Intereting Posts
Перенаправление на localhost после установки Multisite на сервере Thumbnail With Next / Prev Links Не показывая следующую запись? Как ограничить пользователей одним комментарием за сообщение Пользовательский тип сообщения с двумя иерархическими пользовательскими таксономиями: стратегия создания наилучшей структуры постоянной ссылки Перезапись posts_per_page в новом WP_Query Как перечислить все страницы (с именами их шаблонов) На веб-сайте Два меню навигации в темах. Создавайте те же меню. Отображать теги, относящиеся только к определенному типу сообщений Запросить комментарии с непустым значением 'author_url' на экране комментариев администратора Плагин WordPress не создает пользовательские таблицы Гибкая компоновка ширины Интеграция Cubepoints / Достижения Нужна консультация> преобразование присвоений категорий в персонализированные метаданные Отфильтруйте мои аргументы по почте 1-го письма Как отображать обычные сообщения и настраиваемые типы сообщений, которые попадают под категорию, используя шаблон общей категории?

Отображать теги, относящиеся только к определенному типу сообщений

Следующий код в настоящее время индексирует все теги для моего сайта (независимо от того, прикреплен ли он к стандартным сообщениям или пользовательским сообщениям), как это

Я хочу ограничить этот код индексированием тегов только из специального пользовательского сообщения (а затем и таксономии внутри этого пользовательского сообщения), но я не могу определить, какая настройка мне нужна для исходного кода (я не знаю, как установить $ args и Я подозреваю, что не могу использовать get_terms() для настраиваемых сообщений).

По достоинству оценят любые предложения.

  $list = ''; $tags = get_terms( 'post_tag' ); $groups = array(); if( $tags && is_array( $tags ) ) { foreach( $tags as $tag ) { $first_letter = strtoupper( $tag->name[0] ); $groups[ $first_letter ][] = $tag; } if( !empty( $groups ) ) { foreach( $groups as $letter => $tags ) { $list .= "\n" . '<div class="index-letter">' . apply_filters( 'the_title', $letter ) . '</div>'; foreach( $tags as $tag ) { $url = attribute_escape( get_tag_link( $tag->term_id ) ); $count = intval( $tag->count ); $name = apply_filters( 'the_title', $tag->name ); $list .= "\n" . '<li><a href="' . $url . '">' . $name . '</a> (' . $count . ')</li>'; } $list .= "\n" . '</li>'; } } }else $list .= "\n" . '<p>Sorry, but no tags were found</p>';?> 

Я успешно использовал следующий код из @StephenHarris из этого ответа . Я сделал небольшую настройку или два оригинального кода, но самое важное – назвать новый объект count count_type из исходного COUNT* который был возвращен по умолчанию

Совсем get_terms функция работает точно так же, как вы обычно используете get_terms . Однако есть дополнительный аргумент, который называется post_type и будет принимать массив или строку имен типа post. Когда аргументы post_type установлены, функция использует фильтр terms_clauses для получения условий только этим конкретным типом сообщения

ПРИМЕЧАНИЕ. При установке типа сообщения, который ранее не упоминался, следует проявлять большую осторожность, функция возвращает два объекта подсчета с count ключей и (теперь имя из COUNT* ) count_type . count прежнему получает счетчик сообщений для определенного термина по всей доске , а не счет для конкретного типа сообщения. Чтобы отобразить правильное количество для заданного типа сообщения, вам нужно будет использовать count_type который отобразит правильный счет

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

 object(stdClass)#583 (10) { ["term_id"]=> string(3) "145" ["name"]=> string(7) "testing" ["slug"]=> string(7) "testing" ["term_group"]=> string(1) "0" ["term_taxonomy_id"]=> string(3) "145" ["taxonomy"]=> string(8) "post_tag" ["description"]=> string(0) "" ["parent"]=> string(1) "0" ["count"]=> string(1) "4" ["count_type"]=> string(1) "2" } 

Вы можете видеть, что count равен 4 , это общие сообщения из всех типов сообщений, count_type равно 2 , это количество сообщений с определенным тегом в указанном типе сообщения

Вот код, который входит в ваши функции.php ( Опять же, особая благодарность @StephenHarris за исходный код )

 function get_terms_per_post_type( $taxonomies, $args=array() ) { //Parse $args in case its a query string. $args = wp_parse_args($args); if( !empty( $args['post_type'] ) ){ $args['post_type'] = (array)$args['post_type']; add_filter( 'terms_clauses', function ( $pieces, $tax, $args){ global $wpdb; //Don't use db count $pieces['fields'] .= ", COUNT(*) AS count_type" ; //Join extra tables to restrict by post type. $pieces['join'] .= " INNER JOIN $wpdb->term_relationships AS r ON r.term_taxonomy_id = tt.term_taxonomy_id INNER JOIN $wpdb->posts AS p ON p.ID = r.object_id "; //Restrict by post type and Group by term_id for COUNTing. $post_type = implode( ',', $args['post_type'] ); $pieces['where'] .= $wpdb->prepare( " AND p.post_type IN(%s) GROUP BY t.term_id", $post_type ); remove_filter( current_filter(), __FUNCTION__ ); return $pieces; }, 10, 3 ); } return get_terms($taxonomies, $args); } 

Вы можете использовать его в своих файлах шаблонов

 $terms = get_terms_per_post_type( 'post_tag', array( 'post_type' => 'post' ) ); foreach ( $terms as $term ) { echo "$term->name ( $term->count_type ) </br>"; }