Вопрос или проблема
Я хотел бы создать шорткод, который отображает количество записей для определенной категории в рамках заданного типа записей. Я пытался изменить приведенный ниже код, но мне нужна помощь. Может кто-нибудь подсказать, как изменить его так, чтобы шорткод был для определенного пользовательского типа записей?
// Добавить шорткод для отображения количества записей в категории function category_post_count( $atts ) { $atts = shortcode_atts( array( 'category' => null ), $atts ); // получить категорию по слагу. $term = get_term_by( 'slug', $atts['category'], 'category'); return ( isset( $term->count ) ) ? $term->count : 0; } add_shortcode( 'category_post_count', 'category_post_count' );
Заранее спасибо!
Я думаю, вам лучше использовать get_posts
или new WP_Query
вместо get_term_by
. Это позволит вам получить записи для вашего пользовательского типа записей и затем отфильтровать их по таксономии/названию термина.
Если вы достаточно уверены в работе с WP Query, вы можете попробовать следующее: Запрос записей по названию термина таксономии
Если по какой-то причине вы используете шорткод внутри цикла, вы можете попробовать код ниже. В противном случае ваш лучший выбор — разобраться с WP_Query, как предложено в другом ответе.
Добавьте в functions.php
function category_post_count( $atts ) {
$atts = shortcode_atts( array(
'category' => null,
'type' => null
), $atts );
$term = get_term_by( 'slug', $atts['category'], 'category');
$tpt = $atts['type'];
if( get_post_type() == $tpt ) {
return $term->count;
}
}
add_shortcode( 'category_post_count', 'category_post_count' );
Типичное использование
[category_post_count category="category_slug" type="post_type"]
Ответ или решение
Когда работаешь с WordPress и требуется вывести количество записей в определенной категории для произвольного типа записи, использование шорткода может значительно упростить задачу. Рассмотрим, как это реализовать, и обсудим некоторые теоретические и практические аспекты.
Теория
В WordPress для извлечения данных используется класс WP_Query
. Он предоставляет гибкие возможности для создания запросов к базе данных, позволяя фильтровать записи по типу, категории или другим таксономиям. Функция get_term_by
ограничена в своем применении, так как она возвращает объект термина, но не учитывает привязки к произвольному типу записи. Поэтому для более точного определения количества записей рекомендуется использовать WP_Query
.
Пример
Ниже представлен пример кода шорткода, основанного на использовании WP_Query
, который позволяет вывести количество записей в указанной категории и для указанного типа записей:
// Добавляем шорткод для отображения количества записей в категории для произвольного типа записей
function custom_post_type_category_count( $atts ) {
$atts = shortcode_atts(
array(
'category' => '', // Слаг категории
'type' => '', // Произвольный тип записи
),
$atts
);
if ( empty( $atts['category'] ) || empty( $atts['type'] ) ) {
return 'Укажите категорию и тип записи.';
}
// Настраиваем WP_Query
$query_args = array(
'post_type' => $atts['type'],
'posts_per_page' => -1,
'tax_query' => array(
array(
'taxonomy' => 'category', // Здесь может понадобиться изменить на таксономию, соответствующую вашему типу записи
'field' => 'slug',
'terms' => $atts['category'],
),
),
);
$query = new WP_Query( $query_args );
return $query->found_posts;
}
add_shortcode( 'custom_post_type_category_count', 'custom_post_type_category_count' );
Применение
Для использования этого шорткода на странице или в записи, просто добавьте следующий код, заменяя category_slug
и post_type
на реальные значения:
[custom_post_type_category_count category="category_slug" type="post_type"]
Вывод
Благодаря использованию WP_Query
, данный шорткод предоставляет более надежное решение для подсчёта записей в рамках заданного типа записей и категории. Эта методика особенно полезна при работе с большими объемами данных и при необходимости точной фильтрации по таксономиям. Понимание того, как SQL-запросы и классы WordPress взаимодействуют с базой данных, является ключевым аспектом для эффективного использования платформы.