このカスタマイズでは、指定したカスタム投稿タイプの各記事に紐づいたターム(例えば、カテゴリーやタグなど)を <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.php
やarchive-{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
まとめ
このカスタマイズでは、カスタム投稿タイプに紐づくタームを <li>
タグで簡単に表示する方法を紹介しました。ショートコードとして登録することで、記事本文やウィジェットに挿入するなど、幅広い用途で利用できます。
コメント