Как в WooCommerce скрыть товары определенной категории со страницы Магазин

Если необходимо скрыть товары, которые находятся в определенной категории магазина 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 темы.

Автор
Сергей Дугин

Более 5-ти лет на коммерческой основе делаю сайты, а также занимаюсь их технической поддержкой, ускорением, оптимизацией, доработкой. Еще провожу консультации и обучающие занятия по Вордпресс. Делюсь опытом на страницах своего блога.

Добавить комментарий

Ваш адрес email не будет опубликован.

Нажимая кнопку «Отправить комментарий», я принимаю пользовательское соглашение и подтверждаю, что ознакомлен и согласен с политикой конфиденциальности этого сайта