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

Страница магазина на самом деле является архивной страницей для записей типа '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/

Если вы хотите отображать товары из определенной категории на странице магазина, вы можете вставить следующий код в файл 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();
}
}
