Подсчет записей внутри произвольного типа записей с учетом определенной таксономии и терминов?

4 мар. 2013 г., 04:49:59
Просмотры: 62.3K
Голосов: 9

Я хочу подсчитать, сколько записей находится в произвольном типе записей "videos", но только те, которые относятся к категории "work".

<?php $count_posts = wp_count_posts('videos'); echo $count_posts->publish; // ?>

Как можно изменить этот код для достижения нужного результата?

Спасибо!

0
Все ответы на вопрос 7
1

Альтернативное решение с использованием WP_Query будет выглядеть так:

$args = array(
  'cat' => 4,
  'post_type' => 'videos'
);
$the_query = new WP_Query( $args );
echo $the_query->found_posts;
2 мар. 2014 г. 23:53:48
Комментарии

Пользовательские типы записей используют таксономии, а не "категории", так что это неверно.

Jesse Nickles Jesse Nickles
3 февр. 2022 г. 12:54:59
2

Для работы с пользовательской таксономией используйте:

$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

26 авг. 2015 г. 14:30:32
Комментарии

Не забудьте изменить на echo $count = $the_query->found_posts;, если хотите отобразить реальный результат на фронтенде.

Jesse Nickles Jesse Nickles
3 февр. 2022 г. 12:40:55

Это должен быть принятый (или самый популярный) ответ.

Jesse Nickles Jesse Nickles
7 февр. 2022 г. 12:38:38
3

Нашел решение.

<?php $posts = get_posts('post_type=videos&category=4'); 
$count = count($posts); 
echo $count; 
?>
4 мар. 2013 г. 05:03:16
Комментарии

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

Cranio Cranio
4 мар. 2016 г. 17:12:05

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

dhuyvetter dhuyvetter
28 июл. 2017 г. 15:08:55

Учтите, что он написал это в 2013 году, до того как WP_Query стал популярным.

Jesse Nickles Jesse Nickles
3 февр. 2022 г. 12:53:11
1

Это также должно работать:

$category = get_term('work', 'category');
$posts_in_category = $category->count;
10 нояб. 2015 г. 11:06:46
Комментарии

Это не сработает, если таксономия назначена более чем одному типу записи, а вам нужен только подсчёт записей для одного типа

Pieter Goosen Pieter Goosen
10 нояб. 2015 г. 11:15:45
0

Я знаю, что это старая тема, но она появляется первой в Google, поэтому вот РЕАЛЬНОЕ решение, как это сделать.

$term = get_term( $termId, $taxonomy );
$total_in_term = $term->count;

Таким образом, вам нужно передать ID термина и таксономию. Это самое легковесное решение, которое также работает с пользовательскими таксономиями.

4 апр. 2019 г. 21:01:49
0

Наткнулся на это, когда сам разбирался с похожей задачей, так что вот моё решение на случай, если оно кому-то ещё пригодится... Примечание: ответ 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

20 авг. 2020 г. 06:11:22
0

По сути, если вы используете ваше найденное решение, вы потратите довольно много ресурсов базы данных при выборке большого количества записей.

$query = new WP_Query();
echo $query->found_posts();

Однако WP_Query->found_posts просто выбирает 'posts_per_page' и выполняет за вас COUNT(*) в MySQL. Поэтому я рекомендую использовать последний вариант.

25 июл. 2014 г. 00:39:57