Если необходимо скрыть товары, которые находятся в определенной категории магазина WooCommerce, можно применить решение из официальной документации Вукомерс:
function custom_pre_get_posts_query( $q ) {
$tax_query = (array) $q->get( 'tax_query' );
$tax_query[] = array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => array( 'category-one' ), // Не отображать товары в категории 'category-one' и на странице магазина.
'operator' => 'NOT IN'
);
$q->set( 'tax_query', $tax_query );
}
add_action( 'woocommerce_product_query', 'custom_pre_get_posts_query' );
В строке номер 8
вместо category-one
подставляем слаг (slug) той категории, товары которой хотим скрыть со страниц этой категории и магазина. Если необходимо скрыть товары из нескольких категорий, то в приведенном сниппете выше, в строке 8
с параметром 'terms'
через запятую указываем слаги этих категорий:
'terms' => array( 'category-one', 'category-two', 'category-three'),
На практике же чаще всего возникает вопрос, как скрыть товары из категории WooCommerce только со страницы магазина, а со страницы самой категории эти товары не скрывать. Решить это можно воспользовавшись условием:
if ( is_shop() && !is_admin() ) {
.... код сниппета ....
}
готовый сниппет будет выглядеть следующим образом:
/* Не показывать товары из категории "category-one" на странице магазина, но показывать
* эти товары в самой категории "category-one"
*/
function custom_pre_get_posts_query( $q ) {
if ( is_shop() && !is_admin() ) {
$tax_query = (array) $q->get( 'tax_query' );
$tax_query[] = array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => array( 'category-one' ), // Не отображать товары из категории 'category-one' только на странице магазина.
'operator' => 'NOT IN'
);
$q->set( 'tax_query', $tax_query );
}
}
add_action( 'woocommerce_product_query', 'custom_pre_get_posts_query' );
Как обычно, размещаем приведенные выше сниппеты в файле function.php
текущей WordPress темы.