Woocommerce удаляет товары из результатов поиска, если они не относятся ни к одной категории

#php #wordpress #woocommerce

#php #wordpress #woocommerce

Вопрос:

Я пытаюсь удалить товары из результатов поиска, которые не относятся ни к одной категории.

Я пробовал это, но это не работает.

 add_action('pre_get_posts', 'products_pre_get_posts');

function products_pre_get_posts($query) {

  if ( ! is_admin() amp;amp; is_search() amp;amp; is_shop() ) {
    $query->set( 'tax_query', array(array(
       'taxonomy' => 'product_cat',
       'field' => 'slug',
       'terms' => array( '' ),
       'operator' => 'NOT IN'
   )));
  }
}
  

Ответ №1:

Это сработает для вас:

 add_action( 'pre_get_posts', 'products_pre_get_posts' );

function products_pre_get_posts( $query ) {

    if ( ! is_admin() amp;amp; $query->is_main_query() amp;amp; $query->is_search() ) {

        $query->set( 'tax_query', array(
            array(
                'taxonomy'  => 'product_cat',
                'field'     => 'term_id',
                'terms'     => get_terms( array( 'taxonomy' => 'product_cat', 'fields' => 'ids' ) )
            )
        ));
    }
}
  

В этом случае функция get_terms() вернет массив идентификаторов терминов, исключенных терминов, не присвоенных никаким записям, поскольку аргумент 'hide_empty' по умолчанию true .

Комментарии:

1. Спасибо за ваш ответ, теперь я получаю эту ошибку => object (WP_Error) # 333 (2) { [«ошибки»] => array (1) { [«invalid_taxonomy»]=> array (1) { [0] => string (16) «Недопустимая таксономия» } } [«error_data»] => array (0) { } }

2. И да, моя версия WordPress 4.6.1

3. Извините, я не могу воспроизвести ошибку, работаю со своей стороны.

4. Не работает с woocommerce 3

5. @Remi обновил ответ, работает с текущей установкой WordPress / Woocommerce.