WP: 投稿ページにカスタム分類のタームを表示する

wordPressの投稿ページに全てのタームを表示する関数。対象とするタクソノミー、タームを選ぶことができます。
記事についているタームを全部返す。関数を呼ぶときのパラメータで、不要なタクソノミーを指定できる。
次のコードは 関数リファレンス/get the terms - WordPress Codex 日本語版 にあるコードを改変した。
content.phpへ
<?php echo custom_taxonomies_terms_links("include=category,region", "exclude=29", ",", false); ?>
custom_taxonomies_terms_links("タクソノミー" , "ターム" , "区切り文字", "行末改行") タクソノミー (文字列 | 配列)接頭語=タクソノミー 接頭語 exclude 除外するタクソノミーを指定する場合 include 含めるタクソノミーを指定する場合 タクソノミー 対象とするタクソノミーの slug の配列。slugをコンマで区切って文字列として指定することもできます。 ターム (整数 | 文字列 | 配列))接頭語=ターム 接頭語 exclude 除外するタームを指定する場合 include 含めるタームを指定する場合 ターム 除外するタームの ID の配列。ID をコンマで区切って文字列として指定することもできます。 区切り文字 (文字列 | 配列)出力されたタームを区切る文字を指定。 改行 (真偽値)タクソノミー毎に改行します。 true 改行する false 改行しない
function.phpへ
グダグダなコードですが動きます。<?php // content.php // 投稿ページコンテンツに(タクソノミーと)タームのリンクを取得する function custom_taxonomies_terms_links($taxonomies_slug,$terms_id,$separator,$line_break){ // フィルタータイプの抽出 // タクソノミー $para1 = preg_split("/=/",$taxonomies_slug); $filter_type_taxonomy = $para1[0]; $taxonomies_slug = $para1[1]; // ターム $para2 = preg_split("/=/",$terms_id); $filter_type_term = $para2[0]; $terms_id = $para2[1]; // 対象タクソノミーの調整 if ( !empty( $taxonomies_slug ) ) { $taxonomies_slug = str_replace(',','|',$taxonomies_slug); } else { $taxonomies_slug = '[^\s]+'; } if ( ( !empty( $terms ) || $filter_type_taxonomy == 'include' ) && $taxonomies_slug != '[^\s]+' ) { $taxonomies_slug = '^' . $taxonomies_slug . '$'; } if ( $filter_type_taxonomy == 'exclude' && $taxonomies_slug != '[^\s]+' ) { $taxonomies_slug = '[^' . $taxonomies_slug . ']'; } // 対象タームの調整 if ( !empty( $terms_id ) ) { $terms_id = str_replace(',','|',$terms_id); } else { $terms_id = '[^\s]+'; } if ( ( !empty( $terms ) || $filter_type_term == 'include' ) && $terms_id != '[^\s]+' ) { $terms_id = '^' . $terms_id . '$'; } if ( $filter_type_term == 'exclude' && $terms_id != '[^\s]+' ) { $terms_id = '[^' . $terms_id . ']'; } // 投稿 ID から投稿オブジェクトを取得 $post = get_post( $post->ID ); // 同一投稿内展開チェック if( empty( $check_post ) || $check_post !== $post ) { // check用変数に格納 $check_post = $post; // その投稿から投稿タイプを取得 $post_type = $post->post_type; //echo $post_type; // その投稿タイプからタクソノミーを取得 $taxonomies = get_object_taxonomies( $post_type, 'objects' ); } $out = array(); foreach ( $taxonomies as $taxonomy_slug => $taxonomy ){ // 投稿に付けられたタームを取得 $terms = get_the_terms( $post->ID, $taxonomy_slug ); if ( !empty( $terms ) && preg_match( '/'.$taxonomies_slug.'/', $taxonomy->name ) ) { foreach ( $terms as $term ) { //echo $term->term_id; if ( preg_match( '/'.$terms_id.'/', $term->term_id ) ) { $out[] = '<a href="' . get_term_link( $term->slug, $taxonomy_slug ) .'">' . $term->name . '</a>'; if ( !empty( $separator ) && $term !== end($terms) ) { $out[] = $separator; } } } // 改行指定された if( !empty( $line_break ) ){ $out[] = "<br/>"; } // 改行未設定でセパレータ指定 elseif( empty( $line_break ) && !empty( $separator ) && $taxonomy !== end($taxonomies) ){ $out[] = $separator; } } } return implode('', $out ); } ?>
Keyword:カスタム分類
参考リンク
関数リファレンス/wp get post terms - WordPress Codex 日本語版
WordPressのカテゴリ、タグ、ターム、タクソノミーの違いとテンプレートタグ関数一覧 | プライマリーテキスト