Intereting Posts
Как добавить мета-поле для текущего формата сообщения? Доступ для администратора FQDN для многостраничного доступа WordPress Отображение изображения в мета-коробке Экспорт отображаемого изображения Я хочу получить персонализированный пост с идентификатором таксономии Когда использовать API файловой системы? Должен ли я использовать его вообще? Доступ к WordPress Cant wp-login.php Отображать чек, обозначенный таксономиями, как выпадающее меню Начало работы с Subversion, Git или аналогичной системой контроля версий, чтобы сохранить историю моих файлов? Разделить содержимое сообщения в трех столбцах WordPress перевод loading english file Включить заголовок сообщения в ссылку readmore? Стресс-тестирование WordPress Оптимальный подход для замены 8 изображений заголовков в дочерней теме? Как включить файл только на странице виджетов на панели управления?

Исключить одну категорию и ее подкатегории с помощью WP_LIST_FILTER

Мне нужно исключить категорию и ее подкатегории в сообщениях. Это код, над которым я работаю, и он работает:

<?php $categories = wp_get_post_terms($post->ID, 'category'); $categories = wp_list_filter($categories, array('slug'=>'regione'), 'NOT'); $categories = wp_list_filter($categories, array('slug'=>'lazio'), 'NOT'); $categories = wp_list_filter($categories, array('slug'=>'rm'), 'NOT'); if (!empty($categories)) { ?> <ul class="category"> <?php foreach ($categories as $category) { $cat = get_category($category); echo '<li><a href="' . get_category_link($category) . '">' . $cat->name . '</a></li>'; } ?> </ul> 

Хотя в категории «regione» более 20 подкатов, и у каждого подката есть от 5 до 10 других подкатов: какое-либо предложение о том, как лучше всего исключить основную категорию и ее детей?

Я отвечаю на вопрос, как через 6 месяцев, поэтому я ожидаю, что качество моего ответа не будет соответствовать стандартам WPSE и, следовательно, понравится обратная связь от другого опыта гуру WPSE.

Добавьте к функции functions.php следующую функцию

 function filter_category_list_by_slug( $slug, $categories ) { $excluded_parent = get_category_by_slug( $slug ); $excluded_cats = get_categories( array( 'child_of' => $excluded_parent->term_id ) ); $excluded_cats[] = $excluded_parent; $filtered = array(); $matched = false; foreach ($categories as $category ) { $matched = false; foreach( $excluded_cats as $ex_cat ) { if ( $category->term_id == $ex_cat->term_id ) { $matched = true; } } if ( ! $matched ) { $filtered[] = $category; } } return $filtered; } 

И фильтр списка категорий выглядит следующим образом:

 $categories = wp_get_post_terms($post->ID, 'category'); $categories = filter_category_list_by_slug( 'regione', $categories ); $categories = filter_category_list_by_slug( 'lazio', $categories ); $categories = filter_category_list_by_slug( 'rm', $categories );