es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo ocultar el selector de fecha de salida cuando el carrito de WooCommerce contiene un producto virtual?

Necesito desactivar un seleccionador de fecha de salida generado por un plugin cuando un producto en el carrito es virtual.

Aquí está el gancho que proporcionaron para eso:

apply_filters('woocommerce_delivery_disabled_dates', $disableDates);

Basado en esa información, este es mi intento de código:

add_filter('woocommerce_checkout_fields', 'disable_dates');

function disable_dates($fields) {

   $only_virtual = true;

   foreach( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
      // Verificar si hay productos no virtuales
      if ( ! $cart_item['data']->is_virtual() ) $only_virtual = false;   
   }

    if( $only_virtual ) {
       apply_filters('woocommerce_delivery_disabled_dates', $disableDates);
     }

     return $fields;
}

Sin embargo, esto no da el resultado deseado, ¿algún consejo sobre cómo ocultar el seleccionador de fecha de salida cuando el carrito contiene un producto virtual?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que hay un par de errores en tu intento de código. En primer lugar, no has definido la variable $disableDates, la cual es requerida en el gancho. En segundo lugar, estás utilizando comillas simples alrededor de woocommerce_delivery_disabled_dates, lo cual rompe la cadena y no funcionará como un filtro.

    Aquí tienes una versión revisada de tu intento de código:

    add_filter( 'woocommerce_checkout_fields', 'disable_dates' );
    
    function disable_dates( $fields ) {
    
        $only_virtual = true;
    
        foreach( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
            // Comprueba si hay productos no virtuales
            if ( ! $cart_item['data']->is_virtual() ) {
                $only_virtual = false;
                break; // Salir del bucle temprano, no es necesario comprobar el resto de los elementos del carrito
            }
        }
    
        if ( $only_virtual ) {
            $disableDates = true; // Define la variable
            $fields = apply_filters( "woocommerce_delivery_disabled_dates", $disableDates );
        }
    
        return $fields;
    }
    

    En esta versión revisada, hemos definido la variable $disableDates y corregido la cadena del gancho del filtro para utilizar comillas dobles. También hemos añadido un break en el bucle para salir temprano si encontramos un producto no virtual, ya que no es necesario comprobar el resto de los elementos del carrito.

    Con suerte, con estos cambios, el código ahora deshabilitará correctamente el selector de fecha de pago cuando el carrito contenga un producto virtual.

Comments are closed.