En Woocommerce se tiene la funcionalidad de comisiones o costos adicionales, y de descuentos.
Se usan lo que llaman Fees, y si el valor es positivo (mayor a cero) es un costo adicional. Si el valor es negativo (menor a cero) entonces se toma como un descuento.
Por ejemplo podemos agregar un costo dependiendo del método de pago:
function udev_paypal_fee($cart){ $order = new WC_Order( $order_id ); // $order->get_payment_method_title() devuelve el titulo que el admin define en la configuración $payment_title = $order->get_payment_method_title(); if ('PayPal' === $payment_title){ $perc = 0.05; // 5% $fee = ( $cart->cart_contents_total + $cart->shipping_total ) * $perc; $cart->add_fee( 'Comisión adicional PayPal', $fee, true, '' ); } if ('Transferencia bancaria directa' === $payment_title){ $perc = 0.05; // 5% $fee = ( $cart->cart_contents_total + $cart->shipping_total ) * $perc; $cart->add_fee( 'Descuento Pago en efectivo', $fee*-1, true, '' ); } } add_action ('woocommerce_cart_calculate_fees', 'udev_paypal_fee');
Ahora, si hay un cambio en la forma de pago, la página no se recarga, por lo que no cambiaría la comisión /descuento. Para eso debemos agregar jquery.
add_action( 'wp_footer', 'udev_wc_add_cart_fees_by_payment_gateway_script' ); function udev_wc_add_cart_fees_by_payment_gateway_script() { ?> <script> jQuery( function() { jQuery( 'body' ).on( 'change', 'input[name="payment_method"]', function() { jQuery( 'body' ).trigger( 'update_checkout' ); } ); } ); </script> <?php }
También se tienen los cupones, es otra forma de dar descuentos, pero esa es otra historia.