Отобразить облако тегов из определенной категории по ID с помощью шорткода

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

Я пытаюсь отобразить облако тегов в разных частях моего WordPress сайта. Я использую шорткод, но ищу способ отображать только теги из конкретной категории, добавляя ID этой категории прямо в шорткод, например:

 [tagscloud cat_id='2']

Я сделал это, но застрял, потому что не знаю, как фильтровать/применять (не уверен в правильном термине) cat_id.

function wp_tags_cloud_shortcode($atts) {

    extract(shortcode_atts(array(
        'cat_id' => ''
    ), $atts));

    $content = wp_tag_cloud( array( 
    'echo'      => false,
    'smallest'  => 10,
    'largest'   => 10,
    'unit'      => 'px',
    'number'    => 0,
    'format'    => 'flat',
    'orderby'   => 'count' ) 
    );
    return $content;    
}
add_shortcode( 'tagscloud', 'wp_tags_cloud_shortcode' );

Я новичок в PHP, так что любая помощь будет очень полезной 🙂

Я наконец-то нашел работающие решение:

function tag_cloud_shortcode($atts) {

    extract(shortcode_atts(array(
        'cat' => ''
    ), $atts));

    $query_args = array( 'cat' => $atts, 'posts_per_page' => -1 );
    $custom_query = new WP_Query( $query_args );
    if ($custom_query->have_posts()) :
        while ($custom_query->have_posts()) : $custom_query->the_post();
            $posttags = get_the_tags();
            if ($posttags) {
                foreach($posttags as $tag) {
                    $all_tags[] = $tag->term_id;
                }
            }
        endwhile;
    endif;

    $tags_arr = array_unique($all_tags);
    $tags_str = implode(",", $tags_arr);

    $args = array(
    'echo'      => false,
    'smallest'  => 10,
    'largest'   => 10,
    'unit'      => 'px',
    'number'    => 0,
    'format'    => 'flat',
    'order'     => 'count',
    'include'   => $tags_str
    );
    return wp_tag_cloud($args);
}
add_shortcode( 'tagscloud', 'tag_cloud_shortcode' );

Теперь я могу использовать этот шорткод с несколькими ID категорий

[tagscloud cat=3,5]

Спасибо статье Джона Яблонски, ответу Нэйта Бирса и code.tutsplus.com

Ответ или решение

Создание облака тегов для определённой категории с использованием шорткода в WordPress может показаться сложной задачей, особенно для начинающих в PHP и разработке под WordPress. Тем не менее, с правильным подходом и пониманием работы WordPress можно создать решение, которое будет доставлять нужные данные в нужном месте. В этом ответе я расскажу, как создать такой шорткод, и объясню все процессы, которые происходят при его использовании.

Теория

WordPress предлагает мощный инструмент для создания шорткодов, который помогает вставлять динамические элементы в контент без необходимости редактирования кода. Шорткод — это простой текстовый маркер, который заменяется на более сложный контент в момент отображения страницы.

Облако тегов — это визуальный способ отображения тегов в виде изменяющегося по размеру текста, где размеры зависят от популярности (частоты использования) каждого тега. В WordPress это обычно осуществляется с помощью функции wp_tag_cloud.

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

Пример

Ваш код включает в себя инициализацию шорткода и использование его для вывода облака тегов. Важная часть решения — правильная настройка WP_Query для получения постов и их тегов.

function tag_cloud_shortcode($atts) {
    // Извлекаем параметры шорткода
    $atts = shortcode_atts(array(
        'cat' => ''
    ), $atts);

    // Создаем новый WP_Query для заданных категорий
    $query_args = array(
        'cat' => explode(',', $atts['cat']),
        'posts_per_page' => -1
    );
    $custom_query = new WP_Query($query_args);

    // Собираем теги из всех постов в указанных категориях
    $all_tags = array();
    if ($custom_query->have_posts()) {
        while ($custom_query->have_posts()) {
            $custom_query->the_post();
            $posttags = get_the_tags();
            if ($posttags) {
                foreach($posttags as $tag) {
                    $all_tags[] = $tag->term_id;
                }
            }
        }
    }

    // Удаляем дубликаты и готовим строку для wp_tag_cloud
    $tags_arr = array_unique($all_tags);
    $tags_str = implode(",", $tags_arr);

    // Параметры для облака тегов
    if(!empty($tags_str)){
        $args = array(
            'include' => $tags_str,
            'echo' => false,
            'smallest' => 10,
            'largest' => 22,
            'unit' => 'px',
            'number' => 0,
            'format' => 'flat',
            'order' => 'count'
        );

        return wp_tag_cloud($args);
    } else {
        return 'Теги для выбранной категории отсутствуют.';
    }
}
add_shortcode('tagscloud', 'tag_cloud_shortcode');

Применение

После внедрения данного кода в файл функций (functions.php) вашей темы, вы сможете использовать шорткод [tagscloud cat=3,5], чтобы отобразить облако тегов для категорий с ID 3 и 5. Это позволит вам гибко контролировать, где и какие теги отображать, предоставляя визуальное разнообразие и полезную информацию для пользователей вашего сайта.

Этот способ позволяет улучшить навигацию на сайте и предоставлять пользователям возможность быстрого доступа к связанному контенту. Облако тегов может быть полезным инструментом в контексте SEO, так как помогает лучше индексировать контент по ключевым словам.

Помните, что, несмотря на кажущуюся простоту, WP_Query — мощный инструмент, который, если используется неправильно, может привести к нагрузке на сервер. Поэтому важно тщательно тестировать код на производительность и корректность отображаемых данных.

Итак, теперь, обладая знаниями и решениями, обсуждёнными выше, вы сможете реализовать и использовать шорткод для генерации облака тегов в вашем WordPress-сайте для определённых категорий, удовлетворяя как свои потребности, так и потребности ваших пользователей.

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

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