В плагине WooСommerce есть по умолчанию не удаляемая категория «Uncategorized» («Без рубрики»). Обычно владельцы интернет-магазинов ее или переименовывают, или удаляют совсем, назначая другую рубрику по умолчанию.
Как удалить категорию «Без рубрики» описано довольно часто. Проблема часто возникает в том, что нельзя удалить назначенную по умолчанию категорию в Woocommerce. Думаю суть понятна, что нужно просто сменить по умолчанию категорию.
Но вот появился владелец ИМ, который хотел бы оставить «Без рубрики», но не показывать на сайте посетителям нигде. А зачем? Оказывается, у него менеджеры бывало забывали указывать категории к товарам и они по умолчанию «шли» к рубрике «Без рубрики». Конечно это удобно, посмотрели что попало в «без рубрику» и в последствии отсортировали, но это оказалось не удобным для владельца (может и посетителям). Он хотел оставить рубрику и скрыть ее везде (разумеется на сайте посетителей). Также ему нужно было скрыть еще несколько категорий таким же образом (зачем не знаю).
/* исключить/не показывать нужные категории */
add_filter( 'get_terms', 'wplife_get_subcategory_terms', 10, 3 );
function wplife_get_subcategory_terms( $terms, $taxonomies, $args ) {
$new_terms = array();
$excl_id = array ('slug1','slug2'); // Здесь указываем slug категорий, который нужно не показывать
//print_r($terms);
// Если категория товара
if ( in_array( 'product_cat', $taxonomies ) ) {
foreach ( $terms as $key => $term ) {
if ( ! in_array( $term->slug, $excl_id ) ) {
$new_terms[] = $term;
}
}
$terms = $new_terms;
}
return $terms;
}
В functions.php вашей темы (дочерней) добавляем указанный код. В массиве $excl_id указываем ID категорий, которые не хотим показывать нигде (не в магазине, не в меню и т.д.), обязательно в кавычках и через запятую. Я указал в примере две, вы можете указать одну или сколько угодно.
Надеюсь это кому-то пригодится, пишите в комментариях пригодилось или нет.
Дополнено:
Т.к. возник вопрос исключить категории не по их slug, а по ID, то можно использовать такой код:
add_filter( 'get_terms_args', 'wplife_get_subcategory_terms', 10, 2 );
function wplife_get_subcategory_terms( $args ) {
$args['exclude'] = array( 459,325 ); // В массиве указываем ID категорий, которые нужно исключить
return $args;
}
Ну и как?
Этот фильтр скрыл категорию везде, и на сайте, и в админке. Сейчас в ней не было товаров, но после импорта из другой программы они могут появиться и как их искать, чтоб исправить? Отключать ненадолго фильтр, потом опять включать?
Если нет товаров временно, то скорее всего вам подойдет код, который скрывает категории, если нет там товаров, а когда появляются товары, то показывает.
Искать категории можно как по slug, так и по ID
Если для админки пропало, то попробуйте изменить код так, вместо строки
add_filter( ‘get_terms’, ‘wplife_get_subcategory_terms’, 10, 3 );
замените на
if ( !is_admin() ){ add_filter( ‘get_terms’, ‘wplife_get_subcategory_terms’, 10, 3 ); }