Вот уже месяц я мучаю гугл запросами:
- Показать товары шорткодом без товаров подкатегорий в Woocommerce
- Настройки woo отображение товара подкатегорий
- Woocommerce disable products subcategory in shortcode
- Shortcode woocommerce show products only category
И нашел я код, который должен был убрать с отображения товары из подкатегории. Все пишут, что это работает, но у меня не работает никак. И тут я понял — это работает для страницы категории, но никак не для шорткода типа
[[products category = «samsung»]]
И теперь я в поисках либо кода, либо шорткода.
Пришлось все делать самому. Два месяца гуглил и писал на форумы — безрезультатно.
Сначала я нашел хук, который ловит событие шорткод, который отображает товары из категории (ну и подкатегорий).
Далее надо было посмотреть, какой массив приходит в эту функцию, для этого я использовал команду print_r:
add_filter( ‘woocommerce_shortcode_products_query’, ‘woocommerce_shortcode_products_orderby’ );
function woocommerce_shortcode_products_orderby( $wp_query ) {
print_r($wp_query);
return $wp_query;
}
Эта штука вывела мне массив в вот таком виде:
Array ( [post_type] => product [post_status] => publish [ignore_sticky_posts] => 1 [no_found_rows] => 1 [orderby] => menu_order title [order] => ASC [posts_per_page] => -1 [meta_query] => Array ( ) [tax_query] => Array ( [0] => Array ( [taxonomy] => product_visibility [field] => term_taxonomy_id [terms] => Array ( [0] => 101 ) [operator] => NOT IN ) [1] => Array ( [taxonomy] => product_cat [terms] => Array ( [0] => remont-xiaomi ) [field] => slug [operator] => IN [include_children] => 0 ) ) )
Трудно разобраться в структуре массива, потому что он многоуровневый (трехэтажный массив в массиве).
Запускаю нормальный редактор, и табами распределяю уровни.
Похоже, что нам нужен предпоследний ключ [include_children] и его значение 1 надо изменить на 0 (выключить дочерние категории).
Так как я программист такой себе, сначала я «затупил» и написал $wp_query[include_children]=0;
Это не изменило искомый ключ в под-под-под массиве, а добавило в массив в верхнем уровне новый ключ.
Почитав, инструкцию к PHP, написал в итоге правильно:
add_filter( 'woocommerce_shortcode_products_query', 'woocommerce_shortcode_products_orderby' ); function woocommerce_shortcode_products_orderby( $wp_query ) { $wp_query[tax_query][1][include_children]=0; //print_r($wp_query); return $wp_query; }