Forma de pago contraentrega solo con un pedido mínimo

En este ejemplo vemos como restringimos el botón de contraentrega solo cuando se supere el monto mínimo de $30.000 en productos, o lo que es lo mismo en el subtotal.

En mi caso, para escoger la forma de pago esta con botones con información expandible, pero funciona para los dos casos, cuando esta información esta expandida por defecto, al tener todos los medios de pago colapsados, permite escoger de mejor manera, al visualizar todos los medios de pagos disponibles.

Por medio de CSS, se aplica un estilo que solo se aplica cuando el medio de pago, en este caso “Contraentrega” no funciona a menos que supere el monto mínimo, este estilo css, permite ver la frase “Este servicio solo funciona si agregas mínimo 30.000 en productos.”

// Restringir 'Contra entrega' para pedidos con subtotal por debajo de 30.000, pero seguir mostrándolo
add_filter( 'woocommerce_available_payment_gateways', 'conditionally_disable_cod' );
function conditionally_disable_cod( $available_gateways ) {
    // Define el monto mínimo para permitir el método de pago "Contra entrega"
    $min_amount = 30000;
    
    // Asegúrate de que el carrito esté disponible antes de obtener el subtotal
    if ( WC()->cart ) {
        $cart_subtotal = WC()->cart->get_subtotal(); // Obtiene el subtotal del carrito sin impuestos ni envío
    } else {
        return $available_gateways;
    }

    // Verifica si el método de pago "Contra entrega" está disponible
    if ( isset( $available_gateways['cod'] ) && $cart_subtotal < $min_amount ) {
        // Añadimos una clase a la opción de 'Contra entrega' si no cumple con el mínimo
        add_filter( 'woocommerce_gateway_description', 'add_cod_warning_message', 20, 2 );
    }

    return $available_gateways;
}

// Agrega un mensaje de advertencia y deshabilita el método de pago "Contra entrega"
function add_cod_warning_message( $description, $payment_id ) {
    // Verifica si estamos en el método de pago 'Contra entrega'
    if ( 'cod' === $payment_id ) {
        // Añade un mensaje de advertencia debajo de la opción
        $description .= '<p class="cod-warning" style="color: red; font-weight: bold;">Este servicio solo funciona si agregas mínimo 30.000 en productos.</p>';
        
        // Añade un estilo para deshabilitar el botón de selección
        ?>
        <style>
            .payment_method_cod { 
                pointer-events: none;
                opacity: 0.5; /* Hace que el método de pago parezca deshabilitado */
            }
			.payment_method_cod>label:after
			{
				display: inline-block;
				font-size: inherit;
				-webkit-font-smoothing: antialiased;
				content: "Este servicio solo funciona si agregas mínimo 30.000 en productos.";
				margin-right: .5407911001em;
				transition: color, ease, .2s;
				font-family: "GP Premium";
			}
        </style>
        <?php
    }

    return $description;
}

y que tal el código deshabiilitando el servicio contraentrega con productos especificos?

// Restringir 'Contra entrega' para pedidos con subtotal por debajo de 30.000 o si un producto específico está en el carrito
add_filter( 'woocommerce_available_payment_gateways', 'conditionally_disable_cod_for_specific_product' );

function conditionally_disable_cod_for_specific_product( $available_gateways ) {
    // Define el monto mínimo para permitir el método de pago "Contra entrega"
    $min_amount = 30000;
    
    // Define el ID del producto que no puede pagarse con "Contra entrega"
    $restricted_product_id = 123; // Cambia el 123 por el ID del producto

    // Asegúrate de que el carrito esté disponible antes de obtener el subtotal
    if ( WC()->cart ) {
        $cart_subtotal = WC()->cart->get_subtotal(); // Obtiene el subtotal del carrito sin impuestos ni envío
        $has_restricted_product = false; // Variable para verificar si el producto restringido está en el carrito

        // Recorre los productos del carrito para verificar si el producto restringido está presente
        foreach ( WC()->cart->get_cart() as $cart_item ) {
            if ( $cart_item['product_id'] == $restricted_product_id ) {
                $has_restricted_product = true;
                break; // Detiene el ciclo si el producto está presente
            }
        }

        // Si el subtotal es menor al mínimo o si el producto restringido está en el carrito
        if ( ( isset( $available_gateways['cod'] ) && $cart_subtotal < $min_amount ) || $has_restricted_product ) {
            // Añadimos una clase a la opción de 'Contra entrega' si no cumple con el mínimo
            add_filter( 'woocommerce_gateway_description', 'add_cod_warning_message', 20, 2 );
        }
    }

    return $available_gateways;
}

// Agrega un mensaje de advertencia y deshabilita el método de pago "Contra entrega"
function add_cod_warning_message( $description, $payment_id ) {
    // Verifica si estamos en el método de pago 'Contra entrega'
    if ( 'cod' === $payment_id ) {
        // Añade un mensaje de advertencia debajo de la opción
        $description .= '<p class="cod-warning" style="color: red; font-weight: bold;">Este servicio no está disponible para algunos productos en tu carrito.</p>';
        
        // Añade un estilo para deshabilitar el botón de selección
        ?>
        <style>
            .payment_method_cod { 
                pointer-events: none;
                opacity: 0.5; /* Hace que el método de pago parezca deshabilitado */
            }
        </style>
        <?php
    }

    return $description;
}

Explicación de las modificaciones:

  1. $restricted_product_id: Aquí defines el ID del producto para el que quieres deshabilitar el pago “Contra entrega”. Cambia el 123 por el ID del producto que quieres restringir.
  2. Verificación del carrito: Se agrega un ciclo foreach para recorrer todos los productos en el carrito y verificar si el producto restringido está presente. Si es así, se marca la variable $has_restricted_product como true.
  3. Condiciones para deshabilitar “Contra entrega”: Si el subtotal del carrito es inferior a $30.000 o si el producto restringido está en el carrito, se aplica el filtro add_cod_warning_message que deshabilita la opción de “Contra entrega” y muestra el mensaje de advertencia.
  4. Estilo de deshabilitación: El estilo para deshabilitar el método de pago es el mismo que antes: pointer-events: none; y opacity: 0.5;.

Cómo obtener el ID de un producto:

  • Para obtener el ID del producto, ve a la página de edición del producto en WooCommerce. En la URL del navegador, verás algo como post=123, donde 123 es el ID del producto.

Personalización del mensaje:

Puedes modificar el mensaje que se muestra cuando el método de pago se deshabilita por la presencia del producto restringido. En este ejemplo, el mensaje es:

“Este servicio no está disponible para algunos productos en tu carrito.”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll to Top