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

Quick Edit Pencil

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

このブログの人気の投稿

PowerShellのGetDetailsOf メソッドでプロパティの詳細情報のID番号と項目名を列挙します

ヤバい!JAPANNEXT WQHD対応 27型ワイド液晶ディスプレイ「JN-IPS2716WQHD」を注文してみた!!!

書字方向 横書方向変換スクリプト 左書きから右書きへ(コピペ用途)

PowerShellで複数ファイルのプロパティを取得する方法(準備編)

ダウンロードページの作り方/githubのページ

マウスキーボードセンターのバージョンアップ後の認識しない問題を解決

Blender: 辺の長さを数値で指定するアドオン

エクセル VBA マウスカーソルの移動とクリック

PowerShell: 詳細情報から取得した日付のフォーマット