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.

No permitir eliminar un producto con un ID específico del carrito de WooCommerce si se agrega otro producto.

Tengo que implementar la siguiente lógica en mis páginas de Carrito / Pago:

Si el producto con el ID “100” está en el Carrito, necesito evitar que se elimine del Carrito si también se agregó el Producto con el ID “101”.

En pocas palabras, la capacidad de eliminar un producto solo está presente si no se agregó un producto con un ID específico.

Anteriormente, usé la siguiente solución para evitar la eliminación de productos solo para IDs de productos específicos. Pero este código no funciona con productos variables y no puedo entender cómo implementar mi lógica dentro de él.

add_filter('woocommerce_cart_item_remove_link', 'customized_cart_item_remove_link', 20, 2 );
function customized_cart_item_remove_link( $button_link, $cart_item_key ){
    $targeted_products_ids = array( 98,99,100 );

    $cart_item = WC()->cart->get_cart()[$cart_item_key];

    if( in_array($cart_item['data']->get_id(), $targeted_products_ids) )
        $button_link = '';

    return $button_link;
}

Gracias de antemano por cualquier ayuda.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para implementar la nueva lógica, puedes modificar el código existente de la siguiente manera:

    add_filter('woocommerce_cart_item_remove_link', 'customized_cart_item_remove_link', 20, 2 );
    function customized_cart_item_remove_link( $button_link, $cart_item_key ){
        $disallow_product_id = 100;
        $check_product_id = 101;
    
        $cart_item = WC()->cart->get_cart()[$cart_item_key];
    
        if($cart_item['data']->get_id() == $disallow_product_id){
            // obtener todos los artículos del carrito
            $cart_items = WC()->cart->get_cart();
    
            // verificar si check_product_id también está en el carrito
            foreach($cart_items as $cart_item){
                if($cart_item['data']->get_id() == $check_product_id){
                    // si sí, prohibir la eliminación de disallow_product_id
                    $button_link = '';
                    break;
                }
            }
        }
    
        return $button_link;
    }
    

    Aquí, estamos verificando si el producto que se está eliminando tiene el ID “100”. Si es así, obtenemos todos los artículos del carrito y verificamos si “101” también está presente en el carrito. Si es así, prohibimos la eliminación de “100” devolviendo una cadena vacía para el enlace del botón de eliminación.

    Espero que esto ayude. Hazme saber si tienes alguna pregunta.

Comments are closed.