Как правильно сделать так, что бы в каталоге не выводилось товары из определенной категории, но выводились в поиске?
Добрый день. Как правильно сделать так, что бы товары не выводились в каталоге, где все товары, но выводились в поиске? Пробовал через хук woocommerce_product_query_tax_query, но в таком случае не выводится и в поиске, что не подходит.
Дополнительно:
Показывайте код
add_filter( 'woocommerce_product_query_tax_query', 'wpcraft_exclude_products_by_wpqtq', 50, 2 );
function wpcraft_exclude_products_by_wpqtq( $tax_query, $query ) {
if( ! is_admin() ){
$tax_query[] = array(
'taxonomy' => 'product_cat', // 'product_tag' для тегов товаров
'field' => 'slug',
'terms' => array( 'furnitura' ), // 'slug_my_taxonomy' - слаг нужных таксономий через запятую (если несколько)
'operator' => 'NOT IN'
);
}
return $tax_query;
}
function exclude_cat_from_catalog( $query ) { if ( $query->is_main_query() && ! is_admin() && is_shop() ) { // тут ваш цикл } } add_action( 'pre_get_posts', 'exclude_cat_from_catalog' ); |
function exclude_cat_from_catalog( $query ) { if ( $query->is_main_query() && ! is_admin() && is_shop() ) { // тут ваш цикл } } add_action( 'pre_get_posts', 'exclude_cat_from_catalog' );
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Вам нужно ограничить условие только каталогом, а не всеми WooCommerce-запросами. Фильтр
woocommerce_product_query_tax_queryс условием только! is_admin()срабатывает слишком широко, поэтому категория исчезает и из поиска.Используйте основной запрос магазина и проверяйте именно
is_shop()или нужные архивы каталога:add_action('woocommerce_product_query', function ($query) { if (is_admin() || is_search()) { return; } if (! is_shop()) { return; } $tax_query = (array) $query->get('tax_query'); $tax_query[] = [ 'taxonomy' => 'product_cat', 'field' => 'slug', 'terms' => ['furnitura'], 'operator' => 'NOT IN', ]; $query->set('tax_query', $tax_query); });
Если нужно скрыть товары также на архивах некоторых категорий, добавьте условие
is_product_category(). Если нужно скрыть только на странице «Магазин», оставьте толькоis_shop().Отдельно проверьте виджеты, блоки «похожие товары» и кастомные
WP_Query: они могут использовать не основной запрос. Для них потребуется отдельный фильтр или аргументы конкретного блока. Поиск не трогайте:is_search()должен выходить из функции до добавленияNOT IN.Перед внедрением на рабочем сайте проверьте решение на копии или хотя бы сделайте резервную копию изменяемого файла. После правки включите отображение ошибок, откройте проблемную страницу в обычном и приватном окне, проверьте консоль браузера и логи PHP. Если задача связана с WordPress, WooCommerce или ACF, дополнительно проверьте поведение после очистки кэша и после выхода из админки: часть ошибок видна только для незалогиненного пользователя.
Если код работает только в одном шаблоне, лучше не оставлять его разрозненно в нескольких файлах. Вынесите повторяемую логику в функцию, небольшой плагин или template part, а в шаблоне оставьте только вызов. Так проще поддерживать решение после обновления темы, плагинов и PHP.