Задача. В интернет-магазине нужно на страницах Магазина и категорий скрыть (исключить) часть товаров, которые имеют определенную метку.
Решение. Чтобы скрыть товары определенных категорий и сами категории, можно воспользоваться плагинами, например:
- «Hide Categories and Products for Woocommerce» (N.O.U.S. Open Useful and Simple);
- «Hide Categories Or Products On Shop Page» (Kaushik Nakrani);
- Или другие, подобные.
Но если необходимо исключить товары с нужной меткой или определенной категории можно использовать хук 'woocommerce_product_query'
в Коде №1 или хук-фильтр 'woocommerce_product_query_tax_query'
в Коде №2.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
## Исключение из вывода товаров нужной метки или категории по слагу
add_action( ‘woocommerce_product_query’, ‘wpcraft_exclude_by_tag’, 30 ); // можно через хук ‘pre_get_posts’
function wpcraft_exclude_by_tag( $query ) {
$tax_query = ( array ) $query–>get( ‘tax_query’ );
$tax_query[] = array(
‘taxonomy’ => ‘product_tag’, // ‘product_cat’ для категорий
‘field’ => ‘slug’,
‘terms’ => array( ‘slug_my_taxonomy_1’, ‘slug_my_taxonomy_3’ ), // ‘slug_my_taxonomy’ – слаг нужных меткок / категорий через запятую (если их несколько)
‘operator’ => ‘NOT IN’
);
$query–>set( ‘tax_query’, $tax_query );
}
|
Если нужно исключить товары определенных таксаномий только на странице Магазина, то нужно использовать условие
if ( is_shop() ){...}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
## Исключение из вывода товаров нужной метки или категории по слагу через хук 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( ‘slug_my_taxonomy_1’, ‘slug_my_taxonomy_3’ ), // ‘slug_my_taxonomy’ – слаг нужных таксономий через запятую (если несколько)
‘operator’ => ‘NOT IN’
);
}
return $tax_query;
}
|