We’ve already seen how to hide products based on IP addresses, hide products belonging to a specific category and even hide all products from the Shop page.
Today I want to publish another version of those, but this time we’ll use a custom field / ACF in our conditional logic, so that we can toggle the product visibility based on its value. Enjoy!
PHP Snippet: Remove Products With Specific Custom Field Value @ Shop
Simply change “whatever_key” and “whatever_value” below to your custom field / ACF key and value.
This snippet will tell the WooCommerce query to show all products where key = “whatever_key” does not exist OR where value is different from “whatever_value” in case key = “whatever_key” is set.
/**
* @snippet Hide Products With Custom Field Value @ Shop
* @how-to businessbloomer.com/woocommerce-customization
* @author Rodolfo Melogli, Business Bloomer
* @compatible WooCommerce 7
* @community https://businessbloomer.com/club/
*/
add_action( 'woocommerce_product_query', 'bbloomer_hide_product_if_cf_query', 9999, 2 );
function bbloomer_hide_product_if_cf_query( $q, $query ) {
if ( is_admin() ) return;
$meta_query = $q->get( 'meta_query');
$meta_query[] = array(
'relation' => 'OR',
array(
'key' => 'whatever_key',
'compare' => 'NOT EXISTS',
),
array(
'key' => 'whatever_key',
'value' => 'whatever_value',
'compare' => '!=',
),
);
$q->set( 'meta_query', $meta_query );
}
Hello,
Can you help me with combining this code with this functionality, so that I can have influence on which products get shown in parent categories based on a custom field?
https://www.businessbloomer.com/woocommerce-hide-subcategory-products-on-product-category-pages/
Hello Matthijs, thanks so much for your comment! Yes, this is definitely possible, but I’m afraid it’s custom work. If you’d like to get a quote, feel free to contact me here. Thanks a lot for your understanding!