Содержание
Задача. В интернет-магазине нужно на страницах Магазина и категорий скрыть (исключить) часть товаров, которые имеют определенную метку. А также исключить вывод некоторых категорий.
Скрыть товары по категории или метке
Решение 1. Чтобы скрыть товары определенных категорий и сами категории, можно воспользоваться плагинами, например:
- «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.1 или хук-фильтр 'woocommerce_product_query_tax_query'
в Коде №1.2.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
## Исключение из вывода товаров нужной метки или категории по слагу 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 |
## Исключение из вывода товаров нужной метки или категории по слагу через хук 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; } |
Скрыть категории или метки
Решение 2. Также, если выводятся именно категории и нужно какие-то из них исключить, то можно их скрыть с помощью Кода №2 в functions.php
. Условие ! is_admin() && is_shop() || is_product_category()
означает, что код будем исключать на страницах Магазина или категорий (если исключаемые категории имеют родительские).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
## Исключить категории Без категории и Архив со страницы Магазина add_filter( 'get_terms', 'wpcraft_exclude_product_cat', 10, 3 ); function wpcraft_exclude_product_cat( $terms, $taxonomies, $args ) { $new_terms = array(); // Если страница магазина и не админка if ( ! is_admin() && is_shop() || is_product_category() ) { foreach ( $terms as $key => $term ) { if ( ! in_array( $term->term_id, array( 15, 2165 ) ) ) { /* Если по слагу: * if ( ! in_array( $term->slug, array( 'uncategorized', 'arhiv' ) ) ) { * */ $new_terms[] = $term; } } $terms = $new_terms; } return $terms; } |