single.phpで、タームの表示順を任意の順にソートする

single.phpに所属タームを複数表示させる場合に、所属タームの表示順を指定する方法です。
並び順を変更するプラグインもありますが、不具合が多いのでプラグインなしで作成します。

大まかな手順

  1. ターム詳細にカスタムフィールドを用意する
  2. ターム一覧にカスタムフィールドを表示させる旨をfunctions.phpに追記
  3. single.phpで、所属タームをカスタムフィールドの数値順にソートする

あった方がわかりやすいですが、手順2はなくても構いません。

準備するもの

  • advanced custom field
  • functions.php
  • single.php

手順1.Advanced Custom FIeldで、ターム詳細に数値入力欄を設ける

今回は、ターム名:’技術’、タームスラッグ:’techmiques’というタームで作成します。
フィールドタイプは数値、表示条件はタクソノミーが’技術’と等しい場合、で指定します。

手順2.ターム一覧にカスタムフィールドを表示させる

functions.phpに下記を追記します。

// 管理画面での表示項目追加
function my_add_columns($columns) {
  $columns['my_column_name'] = '表示順';
  return $columns;
}
add_filter( 'manage_edit-techniques_columns', 'my_add_columns' );

// カスタムフィールド'sortnum'を表示させる
function my_add_columns_content_taxonomy($arg_1, $column_name, $term_id) {
  if( $column_name == 'my_column_name' ) {
    $sort = get_field('sortnum', 'techniques_'.$term_id);
    $stitle = $sort;
  }

  if ( isset($stitle) && $stitle ) {
    echo esc_attr($stitle);
  }
}
add_action( 'manage_techniques_custom_column', 'my_add_columns_content_taxonomy', 10, 3 );

これで管理画面にカスタムフィールド’sortnum’が表示されるようになります。
こちらの画像は数値入力後なので、本来はこの段階ではまだ数字は表示されません。

手順3.表示順を入力する

手順1で、ターム詳細に「カテゴリー表示順」というフィールドが追加されましたので、入力していきます。
(ターム一覧→ターム名クリック→下の方にあります)

タームの増加や入れ替えの可能性を考え、10刻み、100刻みなどで入れていくといいかもしれません。

手順4.singe.phpでソートする

single.phpの所属タームを表示させる部分で、カスタムフィールド’sortnum’に入力した数値順になるように指定します。

<?php
  $post_ID = get_the_ID();
  $taxonomy_name = 'techniques';
  $category_term = wp_get_post_terms($post_ID, $taxonomy_name, array( 'meta_key' => 'sortnum', 'orderby' => 'meta_value_num', ));
  if ($category_term) {
  foreach ($category_term as $value) {
      $url = home_url('/'.$taxonomy_name. '/' . $value->slug.'/');
      echo '<a href="'.$url.'">'.$value->name.'</a>';
        }
} ?>

コメント

タイトルとURLをコピーしました