Depósito basado en un porcentaje del monto total del carrito

4 minutos de lectura

Deposito basado en un porcentaje del monto total del carrito
guisosgarage.com

Tomé este código de otra publicación y, básicamente, según tengo entendido, este código está tratando de forzar que el precio del carrito cambie a una cantidad fija de $ 40 y lo cobre como una tarifa de reserva.

Lo que quiero hacer es forzar que el monto del carrito sea el 20% de lo que sería el total en función de sumar todos los productos en el carrito. mi sitio es para reservasasí que solo quiero cobrar un deposito y luego hacer que paguen cuando usen su reserva.

Aquí está el código de esta publicación: Woocommerce cart deposit

add_action( 'woocommerce_cart_calculate_fees', 'booking_fee' );
function booking_fee() {
    global $woocommerce;

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    $bookingfee_array = array( '2434' );

    $fixed = 40.00;

    foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {

        if( in_array( $values['product_id'], $bookingfee_array ) ) {
            $surcharge = $fixed;
            $woocommerce->cart->add_fee( 'Broneeringutasu', $surcharge, true, '' );
        }

    }

}

Y así es como lo cambiaría:

add_action( 'woocommerce_cart_calculate_fees', 'booking_fee' );
function booking_fee() {
    global $woocommerce;

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    $bookingfee_array = array( '2434' );

    $percent = .20;

    foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {

        if( in_array( $values['product_id'], $bookingfee_array ) ) {
            $surcharge = $percent;
            $woocommerce->cart->add_fee( 'Booking Fee', $surcharge, true, '' );
        }

    }

}

Pero esto no está funcionando como se esperaba.

¿Alguna ayuda en esto?

Gracias

Deposito basado en un porcentaje del monto total del carrito
LoicTheAztec

Su código realmente no va a hacer lo que espera, ya que está agregando una tarifa de o.2 a la cantidad total del carrito. Entonces, si el monto del carrito es 100el gran total va a ser 100.2

En cambio, lo que desea hacer es eliminar el 80% del monto total del carrito para obtener un monto del carrito del 20%. Esto es posible utilizando una tarifa negativa del 80% del monto total del carrito. Si no necesita establecer ID de productos específicos como en su código original, use la segunda función a continuación.

Esta es la primera función que eliminará el 80 % del monto total del carrito cuando un artículo del carrito coincida con los ID de productos específicos establecidos en la función:

add_action( 'woocommerce_cart_calculate_fees', 'booking_deposit_calculation' );
function booking_deposit_calculation( $cart_object ) {

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    ## Set HERE your targeted products IDs
    $target_product_ids = array( 2434 );

    ## Set HERE your negative percentage (to remove an amount from cart total)
    $percent = -.80; // 80% off (negative)

    $matching = false;

    // Iterating through each cart items
    foreach ( $cart_object->get_cart() as $item_values )
    {
        if( in_array( $item_values['product_id'], $target_product_ids ) )
        { // If a cart item match with a targeted product ID

            // Get cart subtotal excluding taxes
            $cart_subtotal = $cart_object->subtotal_ex_tax;
            // or for subtotal including taxes use instead:
            // $cart_subtotal = $cart_object->subtotal;

            ## ## CALCULATION ## ##
            $calculated_amount = $cart_subtotal * $percent;

            // Adding a negative fee to cart amount (Including taxes)
            $cart_object->add_fee( __('Deposit calculation', 'woocommerce'), $calculated_amount, true );

            break; // We stop the loop
        }
    }
}

El código va en el archivo function.php de su tema secundario activo (o tema) o también en cualquier archivo de complemento.


Pero puede ser que no necesite tener algunos productos específicos como en el código original.

Si es el caso, esto simplifica el código:

add_action( 'woocommerce_cart_calculate_fees', 'booking_deposit_calculation' );
function booking_deposit_calculation( $cart_object ) {

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    ## Set HERE your negative percentage (to remove an amount from cart total)
    $percent = -.80; // 80% off (negative)

    // Get cart subtotal excluding taxes
    $cart_subtotal = $cart_object->subtotal_ex_tax;
    // or for subtotal including taxes use instead:
    // $cart_subtotal = $cart_object->subtotal;

    ## ## CALCULATION ## ##
    $calculated_amount = $cart_subtotal * $percent;

    // Adding a negative fee to cart amount (Including taxes)
    $cart_object->add_fee( __('Deposit calculation', 'woocommerce'), $calculated_amount, true );

}

El código va en el archivo function.php de su tema secundario activo (o tema) o también en cualquier archivo de complemento.

Ambas funciones están probadas y funcionan.

  • ¡Esto era exactamente lo que estaba buscando! Muchas gracias.

    – Stewsgarage.com

    6 de marzo de 2017 a las 4:49

  • @Stewsgarage.com Bienvenido, esto fue algo muy fácil para mí… También hay algunos complementos gratuitos: wordpress.org/plugins/search.php?q=woocommerce+depósito

    – LoicTheAztec

    6 de marzo de 2017 a las 5:11


¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad