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のカテゴリ、タグ、ターム、タクソノミーの違いとテンプレートタグ関数一覧 | プライマリーテキスト