MENU

カスタム投稿タイプのタームリストを取得する

このカスタマイズでは、指定したカスタム投稿タイプの各記事に紐づいたターム(例えば、カテゴリーやタグなど)を <ul><li> 形式でリスト表示します。ショートコードとして実装することで、好きな場所で簡単に表示可能です。

目次

ショートコードで取得する

WordPressには get_the_terms() 関数を使うことで、投稿に関連するターム情報を取得できます。本カスタマイズでは、特定のカスタム投稿タイプでこの関数を使い、表示するタームリストを <li> タグ形式で出力します。
ショートコードでの実装なので、記事や固定ページの本文など、どこにでも挿入可能です。

// ショートコードの登録
function custom_post_terms_list_shortcode($atts) {
    // ショートコードの属性を設定(投稿IDを取得する)
    $atts = shortcode_atts(
        array(
            'post_id' => get_the_ID(),  // デフォルトで現在の投稿IDを使用
            'taxonomy' => 'category',  // タクソノミーのデフォルトは 'category'
        ),
        $atts
    );

    $post_id = $atts['post_id'];
    $taxonomy = $atts['taxonomy'];

    // タームを取得
    $terms = get_the_terms($post_id, $taxonomy);

    // タームがない場合の処理
    if (!$terms || is_wp_error($terms)) {
        return '<p>タームがありません。</p>';
    }

    // タームリストの生成
    $output = '<ul class="custom-term-list">';
    foreach ($terms as $term) {
        // get_term_linkを使ってタームのリンクURLを取得
        $term_link = get_term_link($term->slug, $taxonomy);
        
        // 取得したURLが有効かチェック
        if (!is_wp_error($term_link)) {
            echo '<li><a href="' . esc_url($term_link) . '">' . esc_html($term->name) . '</a></li>';
        }
    }
    $output .= '</ul>';

    return $output;
}
add_shortcode('custom_terms', 'custom_post_terms_list_shortcode');
shortcode_atts()

ショートコードの属性を設定します。デフォルトでは、表示される投稿のIDは get_the_ID() で取得し、タクソノミーは 'category' に設定しています。

get_the_terms()

指定した投稿IDとタクソノミーに基づいて、紐づけられているタームを取得します。

HTMLの生成

取得したターム情報を使い、<ul><li> タグで構造化して出力します。

ショートコードの使い方

ショートコード [custom_terms post_id="123" taxonomy="post_tag"] のように使うと、投稿ID「123」の記事に紐づく post_tag のタームが表示されます。

難易度(1.5)

このカスタマイズは、PHPの基礎知識とWordPressの関数に関する理解が少し必要ですが、シンプルな実装なので比較的簡単です。ショートコードでの使用も柔軟なため、初心者でも利用しやすいでしょう。

テンプレートファイルに記述する関数で取得する

以下の関数をテーマのテンプレートファイル(例:single.phparchive-{post_type}.php)に追加します。

<?php
// カスタム投稿タイプの記事に紐づくタームリストを表示する関数
function display_custom_post_terms($post_id = null, $taxonomy = 'category') {
    // 投稿IDが指定されていない場合は現在の投稿IDを使用
    if (!$post_id) {
        $post_id = get_the_ID();
    }

    // 指定したタクソノミーからタームを取得
    $terms = get_the_terms($post_id, $taxonomy);

    // タームが取得できない場合は処理を中断
    if (!$terms || is_wp_error($terms)) {
        echo '<p>タームが見つかりません。</p>';
        return;
    }

    // タームリストをUL/LIで表示
    echo '<ul class="custom-term-list">';
    foreach ($terms as $term) {
        echo '<li><a href="' . esc_url(get_term_link($term)) . '">' . esc_html($term->name) . '</a></li>';
    }
    echo '</ul>';
}
?>
get_the_ID()

投稿IDが指定されていない場合、現在の投稿のIDを自動的に取得します。これにより、どのテンプレートファイルからでも機能します。

get_the_terms()

指定した投稿IDに紐づけられているタームを取得します。

is_wp_error()

ターム取得に失敗した場合や、何も紐づいていない場合にエラーチェックを行います。

タームリストの表示

取得したタームを<ul><li>形式で表示し、各ターム名にリンクを付与します。

Q&A

タームが表示されないのはなぜですか?

投稿にタームが紐づけられていない可能性があります。また、タクソノミー名が間違っていると、何も表示されません。

post_id を指定しない場合、何が表示されますか?

現在表示されている投稿のIDが自動的に取得され、その投稿に紐づくタームが表示されます。

まとめ

このカスタマイズでは、カスタム投稿タイプに紐づくタームを <li> タグで簡単に表示する方法を紹介しました。ショートコードとして登録することで、記事本文やウィジェットに挿入するなど、幅広い用途で利用できます。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

WordPress Love! 休日はほぼWordPress仲間と一緒に勉強会や写真を撮りに行っています。現在育児中のため、オフが多いです(>△<<<)

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次