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.

Eliminar otros productos si una categoría de producto específica está presente en el proceso de pago de WooCommerce.

Estoy creando una página de destino para los clientes con productos específicos que tienen una categoría de landing-page.

Quiero que los demás productos que actualmente están en la página del carrito se eliminen cuando la categoría landing-page esté presente en el carrito.

Aquí tienes el fragmento. En este momento, elimina todos los productos debido a $woocommerce->cart->empty_cart().

add_action('woocommerce_checkout_before_customer_details', 'check_if_landing_page_category_is_on_cart');
function check_if_landing_page_category_is_on_cart() {

    global $woocommerce;
    $categories   = array('landing-page');
    $has_category = false;

    foreach ( WC()->cart->get_cart() as $cart_item ) {
        // Verificar las categorías de los productos
        if ( has_term( $categories, 'product_cat', $cart_item['product_id'] ) ) {

            $woocommerce->cart->empty_cart();
            $has_category = true;
            break;
        }
    }

    if ( $has_category ) { 
        ?>
            
        

¿Algún consejo?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    En lugar de usar $woocommerce->cart->empty_cart(), puedes usar $woocommerce->cart->remove_cart_item($cart_item_key) para eliminar solo el artículo específico del carrito que no pertenezca a la categoría landing-page. Puedes modificar el código dentro del bucle foreach para llevar un registro de los artículos del carrito que pertenecen a la categoría landing-page y eliminar el resto usando remove_cart_item(). Aquí tienes un fragmento modificado:

    add_action('woocommerce_checkout_before_customer_details', 'check_if_landing_page_category_is_on_cart');
    function check_if_landing_page_category_is_on_cart() {
        global $woocommerce;
        $categories = array('landing-page');
        $has_category = false;
        $product_ids = array(); // llevar un registro de los productos para mantener en el carrito
    
        // revisar los artículos del carrito para la categoría landing-page
        foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {
            if (has_term($categories, 'product_cat', $cart_item['product_id'])) {
                $has_category = true;
                // agregar el producto de landing-page a la lista de productos para mantener
                $product_ids[] = $cart_item['product_id'];
            } else {
                // eliminar el producto que no es de landing-page del carrito
                WC()->cart->remove_cart_item($cart_item_key);
            }
        }
    
        if ($has_category) {
            // agregar código personalizado si hay un producto de landing-page en el carrito
        }
    }
    

    Este código verifica cada artículo del carrito para la categoría landing-page y lo agrega al array $product_ids, mientras elimina cualquier otro artículo del carrito usando remove_cart_item(). Luego, puedes agregar cualquier código personalizado que desees para mostrar si la categoría landing-page está presente en el carrito.

Comments are closed.