Подсчет записей внутри произвольного типа записей с учетом определенной таксономии и терминов?
Я хочу подсчитать, сколько записей находится в произвольном типе записей "videos", но только те, которые относятся к категории "work".
<?php $count_posts = wp_count_posts('videos'); echo $count_posts->publish; // ?>
Как можно изменить этот код для достижения нужного результата?
Спасибо!
Альтернативное решение с использованием WP_Query будет выглядеть так:
$args = array(
'cat' => 4,
'post_type' => 'videos'
);
$the_query = new WP_Query( $args );
echo $the_query->found_posts;

Для работы с пользовательской таксономией используйте:
$the_query = new WP_Query( array(
'post_type' => 'CUSTOM_POST_TYPE',
'tax_query' => array(
array(
'taxonomy' => 'CUSTOM_TAXONOMY',
'field' => 'id',
'terms' => TERM_ID
)
)
) );
$count = $the_query->found_posts;
Документация доступна по ссылке: https://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters

Очень плохая идея. Что если у вас 15000 записей? Вы загрузите их ВСЕ в память? Подобные заблуждения могут разрушить рабочий сайт.

Как упомянул @Cranio выше: ужасная идея получать все записи только для их подсчёта.

Я знаю, что это старая тема, но она появляется первой в Google, поэтому вот РЕАЛЬНОЕ решение, как это сделать.
$term = get_term( $termId, $taxonomy );
$total_in_term = $term->count;
Таким образом, вам нужно передать ID термина и таксономию. Это самое легковесное решение, которое также работает с пользовательскими таксономиями.

Наткнулся на это, когда сам разбирался с похожей задачей, так что вот моё решение на случай, если оно кому-то ещё пригодится... Примечание: ответ Harmonic работает, но в зависимости от сценария может быть проще сделать так:
$count = get_category($category->term_id)->category_count;
Где $category
- это ваш объект таксономии.
Важное замечание: это предполагает, что никакой другой тип записи (post_type) не использует ту же таксономию.
Подробности: get_category()
фактически является обёрточной функцией для get_term()
.
В данном случае get_term() имеет параметр name__like, которого нет у get_category(). Вероятно, есть и другие небольшие различия.
Смотрите: get_term() get_category

По сути, если вы используете ваше найденное решение, вы потратите довольно много ресурсов базы данных при выборке большого количества записей.
$query = new WP_Query();
echo $query->found_posts();
Однако WP_Query->found_posts просто выбирает 'posts_per_page' и выполняет за вас COUNT(*) в MySQL. Поэтому я рекомендую использовать последний вариант.
