Robar
Residencia en Agregue una clase de cuerpo para la opción de envío seleccionada específica en el pago de Woocommerce código de respuesta, he estado usando el siguiente fragmento de código durante algún tiempo:
add_filter( 'wp_footer','weekend_selected' );
function weekend_selected(){
if( ! is_page( 8 ) ) return; // only on checkout
$method_id = "''";
// Find the Shipping Method ID for the Shipping Method label name 'Delivery price on request'
foreach( WC()->session->get('shipping_for_package_0')['rates'] as $rate_key => $rate ){
if( 'Saturdays DPD' == $rate->label ){
$method_id = $rate_key;
break;
}
}
?>
<script type="text/javascript">
(function($){
// variables initialization
var a="input[name^="shipping_method[0]"]",
b = a+':checked',
c="weekend-selected",
d = '<?php echo $method_id; ?>';
if( $(b).val() == d )
$('body').addClass(c);
else
$('body').removeClass(c);
$( 'form.checkout' ).on( 'change', a, function() {
if( $(b).val() == d )
$('body').addClass(c);
else
$('body').removeClass(c);
});
})(jQuery);
</script>
<?php
}
Sin embargo, he notado que ya no se activa al cargar la página, tengo que actualizar la página para que se active, lo que la hace inútil.
El caso de uso es básicamente cargar una etiqueta de cuerpo (seleccionada por el fin de semana) que luego oculta (con CSS) ciertos días en un calendario.
Primero pensé que era porque las opciones de envío no se cargaban antes de que se agregara una dirección, así que completé los campos de dirección requeridos para ver si este era el problema, pero sucede lo mismo, tengo que actualizar la página para que se active el código.
LoicTheAztec
Pruebe la siguiente manera simple y ligera (sin usar Jquery):
add_filter( 'body_class', 'add_shipping_classes_to_body_class' );
function add_shipping_classes_to_body_class( $classes ) {
// only on checkout page
if( ! ( is_checkout() && ! is_wc_endpoint_url() ) )
return;
$chosen_method = WC()->session->get('chosen_shipping_methods')[0];
$shipping_rates = WC()->session->get('shipping_for_package_0')['rates'];
if( 'Saturdays DPD' === $shipping_rates[$chosen_method]->label ){
$classes[] = 'weekend-selected';
}
return $classes;
}
El código va en el archivo functions.php del tema secundario activo (o tema activo). Debería funcionar mejor.
Relacionado: Agregue la clase de envío a la clase de cuerpo en la página de pago de WooCommerce
-
Gracias. Solo obtengo un error en la línea 10 – ‘romper’ no en el contexto ‘bucle’ o ‘cambiar’
– robo
13 de febrero de 2021 a las 15:37
-
Gracias, eliminé la línea if( ! ( is_checkout() && ! is_wc_endpoint_url() ) ) return; ya que está causando problemas. Aparte de eso, funciona bien.
– robo
13 de febrero de 2021 a las 15:51
-
Lo siento, no estaba diciendo que su código no funciona, solo que esa línea está en conflicto con algo en el sitio web. lo aceptaré Gracias.
– robo
13 de febrero de 2021 a las 15:57