Отображение товаров из определенной категории на странице магазина

28 апр. 2013 г., 13:47:19
Просмотры: 33.2K
Голосов: 6

Я знаю, что многие задавали этот вопрос, но я не нашел подходящего способа решения. Как добавить простой meta_query (product_cat) перед выполнением запроса на странице магазина.

Возможно, с помощью фильтра?

С уважением,

Адриен

0
Все ответы на вопрос 3
0
19

Страница магазина на самом деле является архивной страницей для записей типа 'product'. Её шаблон находится в woocommerce/archive-product.php.

Вам нужно использовать действие pre_get_posts для предварительной обработки запроса перед циклом, conditional_tags для определения, что вы находитесь на архивной странице товаров, и taxonomy query для фильтрации категорий товаров, которые относятся к таксономии 'product_cat'.

Например, следующий код (размещённый в functions.php вашей темы или в плагине) будет отображать только товары из категории 'type-1':

add_action('pre_get_posts','shop_filter_cat');

function shop_filter_cat($query) {
   if (!is_admin() && is_post_type_archive('product') && $query->is_main_query()) {
      $query->set('tax_query', array(
                   array('taxonomy' => 'product_cat',
                                     'field' => 'slug',
                                      'terms' => 'type-1'
                               )
                    )
      );   
   }
}

Вы также можете исключить категории, используя 'operator' => 'NOT IN', а 'terms' может быть массивом ярлыков категорий товаров.

Хорошее введение в настройку запросов можно найти здесь: http://www.billerickson.net/customize-the-wordpress-query/

29 апр. 2013 г. 03:26:54
0

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

[product_category category="ВАША КАТЕГОРИЯ" per_page="8" columns="3" orderby="date" order="desc"]
23 мая 2015 г. 19:12:27
1

Если вы хотите отображать товары из определенной категории на странице магазина, вы можете вставить следующий код в файл function.php вашей темы.

// Выполняется перед началом цикла
add_action( 'woocommerce_before_shop_loop', 'techlyse_before_action', 15 );
function techlyse_before_action() {
    // Проверка, что это страница магазина
    if ( is_shop() ) {
        $query_args['tax_query'] =  array(
            array( 
                'taxonomy' => 'product_cat',   
                'field' => 'id',  // Если вы хотите использовать slug категории, укажите 'slug' вместо 'id' и укажите slug категории вместо 1330. 
                'terms' => 1330 
            )
        );  
        //print_r($query_args);
        query_posts( $query_args );
    }
} 

// Выполняется после завершения цикла
add_action( 'woocommerce_after_shop_loop', 'techlyse_after_action', 15 );
function techlyse_after_action() {
    // Проверка, что это страница магазина
    if ( is_shop() ) {
        // Сброс запроса после цикла
        wp_reset_query();
    }
}
4 апр. 2019 г. 14:28:29
Комментарии

Это не самый правильный способ сделать это, но я нашел это полезным для другой ситуации, так что спасибо.

MarcGuay MarcGuay
23 нояб. 2021 г. 21:52:00