WordPress TIPS ver4.4から出来たタームのカスタムフィールドについて

2015年12月17日

先日更新された、WordPress ver 4.4からターム、つまりカテゴリーにカスタムフィールドが使えるようになりました。

これでカテゴリーごとに色をかえるだとか、特定のカテゴリーのアーカイブに出す文言だとか、そういうのが出来るようになります。
綺麗かどうか分かりませんが、地域をタクソノミーで作って、それに紐づく投稿を作るときに、タームのアーカイブをこのカスタムフィールドで構築する、とかもできる気がします。

いずれは拙作のShibuyaCMSに対応させる予定ですが、まだどういう更新画面にするか決まらないので、一旦自分がやった内容を共有しておこうかと思います。

現在はまだadd_meta_boxなどでは出来ないようなので、アクションフックを利用して画面に表示させたりします。
タームの画面に表示させるときは、以下のフックを使います。
“{$taxonomy}_add_form_fields” ※新規 ※引数に$taxonomyをとる
“{$taxonomy}_edit_form_fields” ※更新 ※引数に$tag, $taxonomyをとる
※ただし、どうもeditのほうの$taxonomyは使われてない??

気をつける点としては、addはフォームが<div>なのに対し、editは<table>なので同一の関数にしづらい点ですかね^^;
自分は分けました。

また、保存時のフックは、
“edit_terms” ※引数に$term_id
でできます。

以下は自分がやったソースです。

function.phpに以下を追加

//ターム追加ページ
function hogehoge_add_form( $taxonomy ) { ?>
<div class="form-field term-parent-wrap">
<label for="term_color">カテゴリーカラー</label>
<input name="term_color" id="term_color" type="text" value="" size="40" aria-required="true" />
<p>カテゴリーの色</p>
</div>
<?php }
add_action( 'hogehoge_add_form_fields', 'hogehoge_add_form' );

//ターム更新ページ
function hogehoge_edit_form( $tag, $taxonomy = null ) { ?>
<tr class="form-field term-image-wrap">
<th scope="row"><label for="term-color">カテゴリーカラー</label></th>
<td><input name="term_color" id="term_color" type="text" value="<?php echo get_term_meta($tag->term_id, 'term_color', 1) ?>" size="40">
<p class="description">カテゴリーの色</p></td>
</tr>
<?php }
add_action( 'hogehoge_edit_form_fields', 'hogehoge_edit_form', 10, 2 );

//ターム保存処理
function hogehoge_edit_terms( $term_id ) {
  if( array_key_exists('term_color', $_POST) ) {
    update_term_meta( $term_id, 'term_color', $_POST['term_color']);
  }
}
add_action( 'create_term', 'hogehoge_edit_terms' );
add_action( 'edit_terms', 'hogehoge_edit_terms' );

以上です。

はまった点ははっきり分かりませんが、editの時に$taxonomy = nullという風に第2引数が渡されていないことがあるようだったので、デフォルト値を入れてあげないといけないみたいですね。
2016-07-28更新 これは単にadd_actionに引数の個数の指定を入れてなかったからですね;あと細かいところですがterm-colorはterm_colorに変更しました。やっぱり何かとアンダースコアの方が都合がいいので。
2017-04-20更新 create_termのフックが抜けておりました。