特定のカテゴリー内で使用されているタグの一覧を表示するには? 自作ショートコードの作成

スポンサーリンク

指定したカテゴリー内で使用されるタグの一覧をショートコードによって表示するプログラムです。

リスト形式で出力されます。

スポンサーリンク

特定のカテゴリー内で使用されているタグを一覧表示するプログラム

ショートコード

[tags_in_category category_id=”1″]

の形式で書くことで表示されます。

category_idとは投稿→カテゴリーで表示されるidです。

PHPプログラム

以下のプログラムをfunctions.phpに追記します。場所はどこでも構いませんが、冒頭がよいでしょう。

テーマをアップデートすると削除される可能性がありますので、注意してください。

function get_tags_in_category($category_id) {
    $args = array(
        'cat' => $category_id,
        'posts_per_page' => -1,
        'fields' => 'ids',
    );

    $query = new WP_Query($args);
    $tags = array();

    if ($query->have_posts()) {
        foreach ($query->posts as $post_id) {
            $post_tags = wp_get_post_tags($post_id);
            foreach ($post_tags as $tag) {
                $tags[$tag->term_id] = $tag->name;
            }
        }
    }

    wp_reset_postdata();

    return $tags;
}

function display_tags_in_category($atts) {
    $atts = shortcode_atts(array(
        'category_id' => get_queried_object_id(),
    ), $atts);

    $tags = get_tags_in_category($atts['category_id']);

    if (!empty($tags)) {
        $output = '<h3>このカテゴリーのタグ</h3><ul>';
        foreach ($tags as $tag_name) {
            $output .= '<li>' . esc_html($tag_name) . '</li>';
        }
        $output .= '</ul>';
        return $output;
    } else {
        return '<p>このカテゴリーにはタグがありません。</p>';
    }
}
add_shortcode('tags_in_category', 'display_tags_in_category');

$tags[$tag->term_id] = $tag->name; の部分で、タグIDをキーに設定しているため、同じタグIDが複数回追加されることを防ぎます。

出力形式

<h3>このカテゴリーのタグ</h3>
<ul>
    <li>タグ1</li>
    <li>タグ2</li>
    <li>タグ3</li>
</ul>
/code>