Woocommerce Fees, comisiones y descuentos

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:

[php]
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’);
[/php]

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.

[php]
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
}
[/php]

También se tienen los cupones, es otra forma de dar descuentos, pero esa es otra historia.