php - remove - Depósito basado en un porcentaje del importe total del carrito
strip_tags() (1)
Su código realmente no va a hacer lo que espera, ya que está agregando una tarifa de o.2
al monto total del carrito. Entonces, si el monto del carrito es 100
, el total general será 100.2
...
Lo que quiere hacer, en su lugar, es eliminar el 80% del monto total del carrito para obtener un monto del carrito del 20%. Esto es posible usando 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 importe 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 hijo 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, simplifique 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 hijo activo (o tema) o también en cualquier archivo de complemento.
Ambas funciones son probadas y funcionan
Tomé este código de otra publicación y básicamente, según entiendo, este código intenta forzar el precio del carrito para que cambie a un monto fijo de $ 40 y lo cargue como una tarifa de reserva.
Lo que quiero hacer es forzar que el monto del carrito sea el 20% del total basado en la suma de todos los productos del carro. Mi sitio es para reservas , por lo que solo quiero cobrar un depósito y luego hacer que paguen cuando utilizan su reserva.
Aquí está el código de esta publicación: depósito de carrito de Woocommerce
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 aquí es cómo 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