Well I did had this code on functions.php for a woocommerce in wordpress.
Basically is a checkbox so when checked or unchecked it adds or doesnt the percentage fee in adition to the normal tax (is a kind of special tax in Spain).
But since like a year it no longer works and I don’t know why. I tried to change variables names or even delete plugins who may interact with fees but… it just doesn’t work and few years ago it worked. Or maybe is probably the code itself.
The code is:
// Agregar un nuevo campo al formulario de pago
add_action( 'woocommerce_review_order_before_payment', 'agregar_checkbox_recargo_equivalencia' );
function agregar_checkbox_recargo_equivalencia() {
echo '<div id="recargo-equivalencia-checkbox"><h3>' . __('Recargo de Equivalencia', 'woocommerce') . '</h3>';
woocommerce_form_field( 'recargo_equivalencia1', array(
'class' => array('input-checkbox'),
'label' => __('Estoy acogido al recargo de equivalencia (+5,2%)', 'woocommerce'),
), WC()->session->get( 'recargo_equivalencia1' ));
// Guardar el estado del checkbox en la sesión
add_action( 'woocommerce_checkout_update_order_meta', 'guardar_checkbox_recargo_equivalencia' );
function guardar_checkbox_recargo_equivalencia( $order_id ) {
if ( !empty( $_POST['recargo_equivalencia1'] ) ) {
WC()->session->set( 'recargo_equivalencia1', '1' );
WC()->session->__unset( 'recargo_equivalencia1', '0');
// Aplicar el recargo de equivalencia al total de los productos si se ha marcado el checkbox
add_action( 'woocommerce_cart_calculate_fees', 'aplicar_recargo_equivalencia' );
function aplicar_recargo_equivalencia() {
if ( WC()->session->get( 'recargo_equivalencia1' ) === '1' ) {
$cart1 = WC()->cart->get_cart();
// Sumar el total de los productos en el carrito
foreach ( $cart1 as $cart_item1 ) {
$total_productos1 += $cart_item1['line_total'];
$recargo1 = $total_productos1 * 0.052; // 5.2% del total de productos
WC()->cart->add_fee( ___ ('RE', 'woocommerce'), $recargo1 );
// Cargar script de JavaScript para actualizar el resumen del pedido en finalizar compra
add_action( 'wp_footer', 'actualizar_resumen_pedido_js' );
function actualizar_resumen_pedido_js() {
// Solo cargamos el script en la página de finalizar compra
if ( is_checkout() && ! is_wc_endpoint_url() ) {
<script type="text/javascript">
jQuery(document).ready(function($){
// Detectar cambios en el checkbox de recargo de equivalencia
$('input[name="recargo_equivalencia1"]').on('click', function(){
// Forzar la actualización del resumen del pedido
$(document.body).trigger('update_checkout');
<code>
// Agregar un nuevo campo al formulario de pago
add_action( 'woocommerce_review_order_before_payment', 'agregar_checkbox_recargo_equivalencia' );
function agregar_checkbox_recargo_equivalencia() {
echo '<div id="recargo-equivalencia-checkbox"><h3>' . __('Recargo de Equivalencia', 'woocommerce') . '</h3>';
woocommerce_form_field( 'recargo_equivalencia1', array(
'type' => 'checkbox',
'class' => array('input-checkbox'),
'label' => __('Estoy acogido al recargo de equivalencia (+5,2%)', 'woocommerce'),
), WC()->session->get( 'recargo_equivalencia1' ));
echo '</div>';
}
// Guardar el estado del checkbox en la sesión
add_action( 'woocommerce_checkout_update_order_meta', 'guardar_checkbox_recargo_equivalencia' );
function guardar_checkbox_recargo_equivalencia( $order_id ) {
if ( !empty( $_POST['recargo_equivalencia1'] ) ) {
WC()->session->set( 'recargo_equivalencia1', '1' );
} else {
WC()->session->__unset( 'recargo_equivalencia1', '0');
}
}
// Aplicar el recargo de equivalencia al total de los productos si se ha marcado el checkbox
add_action( 'woocommerce_cart_calculate_fees', 'aplicar_recargo_equivalencia' );
function aplicar_recargo_equivalencia() {
if ( WC()->session->get( 'recargo_equivalencia1' ) === '1' ) {
$cart1 = WC()->cart->get_cart();
$total_productos1 = 0;
// Sumar el total de los productos en el carrito
foreach ( $cart1 as $cart_item1 ) {
$total_productos1 += $cart_item1['line_total'];
}
$recargo1 = $total_productos1 * 0.052; // 5.2% del total de productos
WC()->cart->add_fee( ___ ('RE', 'woocommerce'), $recargo1 );
}
}
// Cargar script de JavaScript para actualizar el resumen del pedido en finalizar compra
add_action( 'wp_footer', 'actualizar_resumen_pedido_js' );
function actualizar_resumen_pedido_js() {
// Solo cargamos el script en la página de finalizar compra
if ( is_checkout() && ! is_wc_endpoint_url() ) {
?>
<script type="text/javascript">
jQuery(document).ready(function($){
// Detectar cambios en el checkbox de recargo de equivalencia
$('input[name="recargo_equivalencia1"]').on('click', function(){
// Forzar la actualización del resumen del pedido
setTimeout(function(){
$(document.body).trigger('update_checkout');
}, 100);
});
});
</script>
<?php
}
}
</code>
// Agregar un nuevo campo al formulario de pago
add_action( 'woocommerce_review_order_before_payment', 'agregar_checkbox_recargo_equivalencia' );
function agregar_checkbox_recargo_equivalencia() {
echo '<div id="recargo-equivalencia-checkbox"><h3>' . __('Recargo de Equivalencia', 'woocommerce') . '</h3>';
woocommerce_form_field( 'recargo_equivalencia1', array(
'type' => 'checkbox',
'class' => array('input-checkbox'),
'label' => __('Estoy acogido al recargo de equivalencia (+5,2%)', 'woocommerce'),
), WC()->session->get( 'recargo_equivalencia1' ));
echo '</div>';
}
// Guardar el estado del checkbox en la sesión
add_action( 'woocommerce_checkout_update_order_meta', 'guardar_checkbox_recargo_equivalencia' );
function guardar_checkbox_recargo_equivalencia( $order_id ) {
if ( !empty( $_POST['recargo_equivalencia1'] ) ) {
WC()->session->set( 'recargo_equivalencia1', '1' );
} else {
WC()->session->__unset( 'recargo_equivalencia1', '0');
}
}
// Aplicar el recargo de equivalencia al total de los productos si se ha marcado el checkbox
add_action( 'woocommerce_cart_calculate_fees', 'aplicar_recargo_equivalencia' );
function aplicar_recargo_equivalencia() {
if ( WC()->session->get( 'recargo_equivalencia1' ) === '1' ) {
$cart1 = WC()->cart->get_cart();
$total_productos1 = 0;
// Sumar el total de los productos en el carrito
foreach ( $cart1 as $cart_item1 ) {
$total_productos1 += $cart_item1['line_total'];
}
$recargo1 = $total_productos1 * 0.052; // 5.2% del total de productos
WC()->cart->add_fee( ___ ('RE', 'woocommerce'), $recargo1 );
}
}
// Cargar script de JavaScript para actualizar el resumen del pedido en finalizar compra
add_action( 'wp_footer', 'actualizar_resumen_pedido_js' );
function actualizar_resumen_pedido_js() {
// Solo cargamos el script en la página de finalizar compra
if ( is_checkout() && ! is_wc_endpoint_url() ) {
?>
<script type="text/javascript">
jQuery(document).ready(function($){
// Detectar cambios en el checkbox de recargo de equivalencia
$('input[name="recargo_equivalencia1"]').on('click', function(){
// Forzar la actualización del resumen del pedido
setTimeout(function(){
$(document.body).trigger('update_checkout');
}, 100);
});
});
</script>
<?php
}
}
I did try change variables, unistall plugins who may interact, try to re-refresh codes, change to booleans, change the code.
It simply doesn’t work or always add the fee. Probably is something with the checkbox.