Eliminar el botón de “hacer pedido” de Woocommerce para una clase de envío específica

3 minutos de lectura

avatar de usuario
xavi

Tengo un escenario en el que necesito eliminar el botón “Realizar pedido” en la pantalla de pago de Woo-commerce.

Actualmente tengo 2 métodos de envío: Envío flexible y Flete

Si un cliente agrega un artículo con la clase de envío “Flete” a su carrito, mi código actual desactiva el método de envío flexible y luego el método de envío muestra un mensaje de “Llame para conocer las tarifas actuales”.

El problema es que todavía pueden pagar esencialmente sin pagar nada por el envío, por lo que si el flete es el único método de envío disponible, necesito que se elimine o reemplace el botón de realizar el pedido.

Aquí está el código que estoy usando actualmente y tratando de modificar sin éxito:

add_filter( 'woocommerce_package_rates', 'wc_hide_free_shipping_for_shipping_class', 10, 2 );

function wc_hide_free_shipping_for_shipping_class( $rates, $package ) {
    $shipping_class_target = 332; 
    $in_cart = false;

    foreach( WC()->cart->cart_contents as $key => $values ) {
        if( $values[ 'data' ]->get_shipping_class_id() == $shipping_class_target ) {
$in_cart = true;
break;
        } 
    }
    if( $in_cart ) {
        unset( $rates['flexible_shipping_7_2'] );
    }
    return $rates;
}

¿Hay un gancho simple o algo que me estoy perdiendo?

He estado jugando con esto por un tiempo y estoy golpeando una pared.

Intente lo siguiente, que generará un botón de pedido gris inactivo “Hacer pedido” cuando se encuentre una clase de envío específica en los artículos del carrito:

add_filter('woocommerce_order_button_html', 'inactive_order_button_html' );
function inactive_order_button_html( $button ) {
    // HERE define your targeted shipping class
    $targeted_shipping_class = 332;
    $found = false;

    // Loop through cart items
    foreach( WC()->cart->get_cart() as $cart_item ) {
        if( $cart_item['data']->get_shipping_class_id() == $targeted_shipping_class ) {
            $found = true; // The targeted shipping class is found
            break; // We stop the loop
        }
    }

    // If found we replace the button by an inactive greyed one
    if( $found ) {
        $style="style="background:Silver !important; color:white !important; cursor: not-allowed !important;"";
        $button_text = apply_filters( 'woocommerce_order_button_text', __( 'Place order', 'woocommerce' ) );
        $button = '<a class="button" '.$style.'>' . $button_text . '</a>';
    }
    return $button;
}

El código va en el archivo function.php de su tema secundario activo (o tema activo). Probado y funciona.

ingrese la descripción de la imagen aquí


Para eliminar completamente el botón “Realizar pedido”, usará este similar en su lugar:

add_filter('woocommerce_order_button_html', 'remove_order_button_html' );
function remove_order_button_html( $button ) {
    // HERE define your targeted shipping class
    $targeted_shipping_class = 332;
    $found = false;

    // Loop through cart items
    foreach( WC()->cart->get_cart() as $cart_item ) {
        if( $cart_item['data']->get_shipping_class_id() == $targeted_shipping_class ) {
            $found = true; // The targeted shipping class is found
            break; // We stop the loop
        }
    }

    // If found we remove the button
    if( $found )
        $button = '';

    return $button;
}

El código va en el archivo function.php de su tema secundario activo (o tema activo). Probado y funciona.

  • ¡Gracias por la ayuda detallada! El problema con el que me encontré parecía ser que el botón “hacer pedido” estaba allí para todo o para nada y esto definitivamente ayuda a aclarar lo que estaba haciendo mal.

    – Xavi

    15 mayo 2018 a las 19:08

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad