Intereting Posts
Ошибка WordPress multisite :( Запросить сообщения и отобразить все даты в поле повторителя в хронологическом порядке Где исходный код, который делает массив «all» захватывает фильтры в $ wp_filter? Как подключиться к процессу регистрации пользователя Перед регистрацией пользователей Как напечатать галерею fallix feilds id? Настройка темы WordPress CSS Как я могу переписать URL-адрес и категорию фильтра и таксономию как условие Получите изображение с URL-адреса, измените его размер и сохраните в пользовательской папке (а не в медиа-библиотеке) Почему шаблон Full-width в Twenty Twelve содержит столько классов в атрибуте body body? Тема для подкатегорий Лучшие правила структуры / перезаписи для достижения следующего URL-адреса Какова наилучшая практика для избежания URI данных? Меню fallback «menu_class» создает «div» вместо «ul», Как я могу экпортировать JQuery из html моего Tinymce Modal Dialog и Enqueue JS File, чтобы увидеть JQuery Пользовательский запрос не находит страницы

Список таксономии / категории с указанием только опубликованных сообщений

Я хочу показать в списке таксономии с соответствующими сообщениями только количество опубликованных статей. Проверка документации WP. Кажется, я могу ПОЛНОСТЬЮ добиться этого, используя функцию get_terms https://developer.wordpress.org/reference/functions/get_terms/, но я получаю ВСЕ количество сообщений, включая черновик и trashed.

$taxonomy = 'item_category'; $args = array( 'hide_empty' => false, 'orderby' => 'name', 'order' => 'ASC' ); $terms = get_terms( $taxonomy , $args ); foreach( $terms as $term ) { echo $term->name . ' - ' . $term->count . '<br/>'; } 

Имеет ли WP встроенный аргумент для отображения его из функции get_terms, потому что я не вижу его в документации? Есть ли какие-либо другие функции или фильтр, которые я могу попытаться достичь своего желаемого результата?

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

 function get_terms_filter_published( $terms, $taxonomies, $args ) { global $wpdb; $taxonomy = $taxonomies[0]; if ( ! is_array($terms) && count($terms) < 1 ) { return $terms; } $filtered_terms = array(); $ctr = 0; foreach ( $terms as $term ) { $result = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts p JOIN $wpdb->term_relationships rl ON p.ID = rl.object_id WHERE rl.term_taxonomy_id = $term->term_id AND p.post_status = 'publish' LIMIT 1"); $published_terms[ $ctr ] = $term; if ( intval($result) > 0 ) { $published_terms[ $ctr ] = $term; } else { // you can comment this out if you don't want to show empty terms $published_terms[ $ctr ]->count = 0; } $ctr++; } return $published_terms; } add_filter('get_terms', 'get_terms_filter_published', 10, 3); $taxonomy = 'item_category'; $args = array( 'hide_empty' => false, 'orderby' => 'name', 'order' => 'ASC' ); $terms = get_terms( $taxonomy , $args ); foreach( $terms as $term ) { echo $term->name . ' - ' . $term->count . '<br/>'; }