Задача. В интернет-магазине нужно на страницах Магазина и категорий скрыть (исключить) часть товаров, которые имеют определенную метку.
Решение. Чтобы скрыть товары определенных категорий и сами категории, можно воспользоваться плагинами, например:
- «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; } |