Скрыть товары без категории на странице магазина
Когда WooCommerce обновился до версии 3.3, была добавлена категория товаров "Без категории", которая стала отображаться на всех страницах (включая страницу магазина WooCommerce), где отображаются товары. Все товары, которым не назначена хотя бы одна категория, автоматически попадают в категорию "Без категории".
Я всегда использовал (возможно, не идеальный) подход скрытия сезонных товаров путем удаления всех категорий у этих товаров, когда они были не в сезоне. Это новое изменение привело к тому, что эти "скрытые" товары внезапно появились на сайте для продажи в этой новой категории, чего я не хочу видеть ни на одной странице.
Я искал в интернете способ скрыть категорию товаров "Без категории" и обнаружил, что эта проблема широко распространена. Было предложено несколько решений, включая превращение категории "Без категории" в подкатегорию с последующим скрытием всех подкатегорий или скрытие категорий с помощью CSS.
Смотрите https://wordpress.org/support/topic/uncategorized-product-category-still-showing-after-3-3-1/
Однако ни одно из этих решений не является "чистым" или достаточно надежным.
Мой временный вариант заключался в том, чтобы показывать только те товары, которые я хочу видеть, используя шорткод категорий товаров (без ID категории "Без категории"). Например:
[product_categories ids="11, 19, 18, 14, 7, 8, 9, 10, 15, 98, 16, 17"]
но это не решает проблему на странице магазина (которая не использует шорткоды).
Интересно, есть ли у кого-нибудь надежный метод скрытия категории товаров "Без категории", так как эта проблема актуальна и в настоящее время широко распространена.

Я решил эту проблему на основе кода, любезно предоставленного rynoldos (https://gist.github.com/rynaldos/a9d357b1e3791afd9bea48833ff95994), следующим образом:
Добавьте следующий код в файл functions.php:
/** Удаление категорий из магазина и других страниц
* в WooCommerce
*/
function wc_hide_selected_terms( $terms, $taxonomies, $args ) {
$new_terms = array();
if ( in_array( 'product_cat', $taxonomies ) && !is_admin() && is_shop() ) {
foreach ( $terms as $key => $term ) {
if ( ! in_array( $term->slug, array( 'uncategorized' ) ) ) {
$new_terms[] = $term;
}
}
$terms = $new_terms;
}
return $terms;
}
add_filter( 'get_terms', 'wc_hide_selected_terms', 10, 3 );
Этот код применяется к странице магазина в WooCommerce. Если вы хотите применить его к другой странице, замените is_shop() на is_page('SLUG_ВАШЕЙ_СТРАНИЦЫ').
Я также долго искал решение этой проблемы, но приведённый выше код отлично работает в моём случае.
