[WordPress]タームに新しい項目を追加して一覧画面にその値の列を出す

最終更新: 2019/02/05/公開: 2019/02/05
この記事は 2019年2月5日 に投稿されました。
内容が古いかもしれません。ご注意ください。
※最後に更新されたのは 2019年2月5日 です。

wp_termmetaテーブルを使って、カテゴリ・タグ・タクソノミーのタームにカスタムフィールド(メタ情報)を追加する方法

WEMO.tech

WordPress:管理画面のカテゴリーやタクソノミー一覧ページにID(タームID)項目を追加する方法

NxWorld

英語版つきのサイト作成時にターム一覧の英訳版を出力する必要があり、Descriptionの欄使ったろ!と思ったらそれはもう順番ソートに使用していたため詰みかけたが……タームにメタ情報が足せるんだな……
上記のサイトを参考にカスタム。

なお、get_termsをforeachでループで呼び出しているときのIDが$変数->term_id だと気づかないでちょっと詰まりました。これもメモ。暗記しよ…
関数リファレンス/get terms

以下、1〜3はほぼ参考サイト1のママ
4は管理画面へそれを表示する形で参考サイト2を応用しています

// 1.新規追加画面 ============================================================
function add_term_fields() {
  echo '<div class="form-field">
         <label for="term_eng">英語表記</label>
         <input type="text" name="term_eng" id="term_eng" value="" size="40">
         <p>カテゴリー名の英語表記を入力してください。</p>
       </div>';
}
add_action('TAXONOMY-SLUG_add_form_fields', 'add_term_fields');

// 2.編集画面に追加
function edit_term_fields( $tag ) {
  // すでにtermmetaに値があれば取得 ============================================================
  $value = get_term_meta($tag->term_id, 'term_eng', 1);
  //htmlソース
  echo '<tr class="form-field">
           <th><label for="term_eng">英語表記</label></th>
           <td>
               <input type="text" name="term_eng" id="term_eng" size="40" value="'.$value.'">
               <p class="description">カテゴリー名の英語表記を入力してください。</p>
           </td>
        </tr>';
}
add_action('TAXONOMY-SLUG_edit_form_fields', 'edit_term_fields');

// 3.値を保存 ============================================================
function save_terms( $term_id ) {
  if (array_key_exists('term_eng', $_POST)) {
    update_term_meta( $term_id, 'term_eng', $_POST['term_eng']);
  }
}
add_action( 'create_term', 'save_terms' ); //新規追加用フック
add_action( 'edit_terms', 'save_terms' );  //編集ページ用フック

// 4.一覧に列を追加 ============================================================
function add_taxonomy_columns( $columns ) {
  $columns['term_eng'] = '英語表記';
  return $columns;
}
function add_taxonomy_sortable_columns( $columns ) {
  $columns['term_eng'] = '英語表記';
  return $columns;
}
function custom_taxonomy_column( $content, $column_name, $term_id ) {
  if ( $column_name == 'term_eng' ) {
    echo get_term_meta( $term_id, 'term_eng', true );
  }
}
add_filter( 'manage_edit-TAXONOMY-SLUG_columns', 'add_taxonomy_columns' );
add_filter( 'manage_edit-TAXONOMY-SLUG_sortable_columns', 'add_taxonomy_sortable_columns' );
add_action( 'manage_TAXONOMY-SLUG_custom_column', 'custom_taxonomy_column', 10, 3 );