¿Cómo modificar el contenido del carrito en WooCommerce?

3 minutos de lectura

Estoy tratando de eliminar un producto en particular del carrito a través de un código. Solo veo la opción de carrito vacío que borra todo el producto en el carrito, pero quiero borrar un producto en particular en la página del carrito. Por ejemplo: supongamos que he agregado dos productos al carrito, pero quiero que el comportamiento del carrito no sea ninguno o que solo un producto deba estar en el carrito. Si el producto 1 está en el carrito, entonces el producto 2 no debería permitir agregarlo al carrito. Si el producto 2 está en el carrito, entonces el producto 1 no debería permitirse.

Probé un pequeño conjunto de código, pero no puedo encontrar el enlace exacto para hacer este comportamiento real. Lo que estoy intentando es, en lugar de vaciar todo el carrito, cargo el contenido del carrito que está en una matriz de valores, simplemente anulo una matriz particular usando la clave del elemento del carrito y cargue el contenido restante en el carrito. Pero parece que no funciona para mí.

function cf_alter_cart_content($value) {
    global $woocommerce;
    $cart_contents = $woocommerce->cart->get_cart();
    foreach ($woocommerce->cart->get_cart() as $cart_item_key => $value) {
        if ($value['product_id'] == '77') {
            unset($cart_contents[$cart_item_key]);
            unset($value['data']);
        }
        return $value['data'];
    }
}

//add_action('wp_head', 'cf_alter_cart_content');
add_filter('woocommerce_cart_item_product', 'cf_alter_cart_content', 10, 1);

Puede ser, ¿hay alguna manera fácil de lograr esto? No estoy seguro de que cualquier sugerencia sería genial.

estoy usando el woocommerce_before_cart filtre para una configuración similar donde las personas en ciertos grupos no pueden pedir códigos de producto específicos. Espero que esto ayude. Es probable que desee crear un campo personalizado en cada producto que sería algo así como una lista delimitada por comas de otros skus/post_ids con los que no se permitiría realizar pedidos.

Este código verifica el primer grupo con el que está asociado el usuario (en el caso de mi sitio, solo tienen 1 grupo). disallowed_product_skus es la lista de skus que el grupo del usuario no puede comprar.

$disallowed_product_skus  =  array (
  <group_num>  =>  array (
        '<sku>',
  )
);
add_filter ( 'woocommerce_before_cart' , 'cart_check_disallowed_skus' );
function cart_check_disallowed_skus() {
        global $woocommerce;
        global $disallowed_product_skus;

        $assigned_group  =  GroupOperations::get_current_user_first_group();

        $cart_contents = $woocommerce->cart->get_cart();
        $keys = array_keys ( $cart_contents );

        if ( array_key_exists ( $assigned_group , $disallowed_product_skus ) ) {
                $disallowed_products_in_cart = false;
                foreach ( $keys as $key ) {
                        $cart_item_product_id = $cart_contents[$key]['product_id'];
                        $cart_product_meta = get_post_meta ( $cart_item_product_id );
                        $cart_product_sku = $cart_product_meta['_sku'][0];

                        if ( in_array ( $cart_product_sku , $disallowed_product_skus[$assigned_group] ) ) {
                                $woocommerce->cart->set_quantity ( $key , 0 , true );
                                $disallowed_products_in_cart = true;
                        }
                }

                if ( $disallowed_products_in_cart ) {
                        echo '<p class="woocommerce-error">Non-approved products have been automatically removed from cart.</p>';
                }
        }
}

  • +1 Gracias por su respuesta, pero ¿la opción de grupo es algo que tenemos que hacer? o ya en woocommerce?

    – Vignesh Pichamani

    5 de agosto de 2014 a las 5:28


  • Groups es un complemento separado que uso para ubicar a los usuarios. Copié/pegué directamente desde mi base de código para darle una plantilla inicial. Las partes importantes son que usted utiliza el woocommerce_before_cart filtro y el $woocommerce->cart->set_quantity en los artículos que desea eliminar del carrito.

    – Rebecca Dessonville

    5 de agosto de 2014 a las 5:30

¿Ha sido útil esta solución?