Шорткод для подсчета категорий кастомного типа записи

Вопрос или проблема

Я хотел бы создать шорткод, который отображает количество записей для определенной категории в рамках заданного типа записей. Я пытался изменить приведенный ниже код, но мне нужна помощь. Может кто-нибудь подсказать, как изменить его так, чтобы шорткод был для определенного пользовательского типа записей?

// Добавить шорткод для отображения количества записей в категории
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 взаимодействуют с базой данных, является ключевым аспектом для эффективного использования платформы.

Оцените материал
Добавить комментарий

Капча загружается...