Search code examples
phpwordpresswoocommerceproductcart

How to hide certain products on WooCommerce cart page


I have changed the main WooCommerce cart page using CSS to hide the products on this page.

The reason for the change, I am attempting to dedicate the cart page to only show the product "Thank You For The Tip" if it is in the cart, without changing any of the WooCommerce product settings to hidden.

All other products that have been added to the cart need to be hidden on the main WooCommerce cart page.

I see that I can not achieve this with CSS as the changes I made to the CSS will hide all products that have been added to the cart.

The closest I have come to finding a PHP solution is the following snippet:

add_filter( 'woocommerce_cart_item_visible', 'bbloomer_hide_hidden_product_from_cart' , 10, 3 );
add_filter( 'woocommerce_widget_cart_item_visible', 'bbloomer_hide_hidden_product_from_cart', 10, 3 );
add_filter( 'woocommerce_checkout_cart_item_visible', 'bbloomer_hide_hidden_product_from_cart', 10, 3 );
add_filter( 'woocommerce_order_item_visible', 'bbloomer_hide_hidden_product_from_order_woo333', 10, 2 );
    
function bbloomer_hide_hidden_product_from_cart( $visible, $cart_item, $cart_item_key ) {
    $product = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key );
    if ( $product->get_catalog_visibility() == 'hidden' ) {
        $visible = false;
    }
    return $visible;
}
    
function bbloomer_hide_hidden_product_from_order_woo333( $visible, $order_item ) {
    $product = $order_item->get_product();
    if ( $product->get_catalog_visibility() == 'hidden' ) {
        $visible = false;
    }
    return $visible;
}

However, this does not give the desired result. Any advice?


Solution

  • To hide certain WooCommerce products only on the cart page and nowhere else, it suffices to just use the woocommerce_cart_item_visible filter hook.

    In the $targeted_ids array you can indicate which productIDs should remain visible. This also works for variationIDs

    function filter_woocommerce_cart_item_visible( $true, $cart_item, $cart_item_key ) {    
        // The targeted product ids
        $targeted_ids = array( 30, 53 );
    
        // Computes the intersection of arrays
        if ( ! array_intersect( $targeted_ids, array( $cart_item['product_id'], $cart_item['variation_id'] ) ) ) {
            $true = false;
        }
        
        return $true; 
    }
    add_filter( 'woocommerce_cart_item_visible', 'filter_woocommerce_cart_item_visible', 10, 3 ); 
    

    To apply the reverse, and hide the productIDs that occur in the array

    Replace

    if ( ! array_intersect(..
    

    With

    if ( array_intersect(..