Не показывать таксономию, если пустая

Я использую следующий код для отображения моих пользовательских почтовых таксономий:

function display_post_taxonomies( $content ) { if( is_single() ) { $args = array( 'public' => true, '_builtin' => false ); $output = 'objects'; $operator = 'and'; $taxonomies = get_taxonomies( $args, $output, $operator ); if( $taxonomies ) { $content .= '<div class="taxonomy_container">'; foreach( $taxonomies as $taxonomy ) { $args = array( 'orderby' => 'name', 'echo' => false, 'taxonomy' => $taxonomy->name, 'title_li' => '<span class="taxonomy_title">' . __( $taxonomy->labels->name, 'your-themes-text-domain' ) . '</span>', 'show_option_none' => __( 'No ' . $taxonomy->labels->name, 'your-themes-text-domain' ) ); $content .= '<ul>' . wp_list_categories( $args ) . '</ul>'; } $content .= '</div>'; } } return $content; } add_filter( 'the_content', 'display_post_taxonomies' ); 

Это прекрасно работает, за исключением случаев, когда у меня нет ничего в моей пользовательской таксономии. В этих случаях я не хочу, чтобы на нем вообще ничего не отображалось, т. Е. Нет названия таксономии или сообщения по умолчанию «без условий».

Я могу избавиться от сообщения «без условий», просто установив show_option_none в false , но это оставляет имя таксономии.

Мне действительно нужна инструкция if аналогичная

 if($taxonomy => 'objects'){ //$args & &content arrays } 

но это не работает.

Помощь очень ценится.

Solutions Collecting From Web of "Не показывать таксономию, если пустая"

Вам нужно установить show_option_none в строку, легко узнаваемую, а затем добавить результат wp_list_categories к контенту, только если он не содержит эту строку.

Таким образом, ваш цикл foreach shoul выглядит примерно так, как

 foreach( $taxonomies as $taxonomy ) { $args = array( 'orderby' => 'name', 'echo' => false, 'taxonomy' => $taxonomy->name, 'title_li' => '<span class="taxonomy_title">' . __( $taxonomy->labels->name, 'your-themes-text-domain' ) . '</span>', 'show_option_none' => '%%NOCAT%%' ); $list = wp_list_categories( $args ); $empty = (bool) substr_count( strip_tags($list), '%%NOCAT%%'); $content .= ! $empty ? '<ul>' . $list . '</ul>' : ''; } 

Таким образом, если у вашего пользовательского налога нет условий, результат wp_list_categories не добавляется в вывод html.


Дополнительные предложения

Всего несколько дней назад я испытал проблему, используя что-то вроде

 add_filter( 'the_content', 'display_post_taxonomies' ); 

потому что некоторые плагины SEO используют get_the_excerpt для заполнения мета-описания в разделе <head> страницы. Проблема в том, что get_the_excerpt , когда нет get_the_excerpt отрывка для сообщения, вызовите wp_trim_excerpt и эта функция запускает the_content . Результат: вы найдете список своей таксономии во главе своей страницы: это плохо.

Также вы должны заметить, что крюк 'the_content' может быть запущен не только в основном запросе, поэтому, если у вас есть вторичные запросы на боковой панели или нижнем колонтитусе, ваша функция снова будет вызвана: это плохо.

Я предлагаю, чтобы у вас было

 if( is_single() ) { 

заменить

 if( is_single() && did_action('loop_start') ) { 

Это предотвратит выполнение функции в разделе <head> .

После этого удалите фильтр для возврата содержимого, таким образом, вы уверены, что фильтр запускается один раз, поэтому

 return $content; 

стал

 remove_filter( 'the_content', 'display_post_taxonomies' ); return $content; 

Используйте get_the_term_list вместо the_terms, которые возвращают список терминов вместо печати, поэтому вывод может использоваться для обеих целей. Проверьте ответ: Покажите таксономический термин, только если есть значение