WordPressのカテゴリデータでカスタムフィールドを利用する方法

2019-05-09WordPressWordPressカスタマイズ

WordPressでカテゴリデータに追加のデータフィールドを与えたい場合があります。この記事ではカテゴリデータにカスタムフィールドを追加する方法を紹介します。

カテゴリ追加ページと編集ページにフォーム入力欄を追加

先にカテゴリ追加ページと編集ページに独自のフォーム入力欄を追加します。

カテゴリのデータにカスタムフィールドを追加するには{$taxonomy}_add_form_fields()フックと{$taxonomy}_edit_form_fields()を使います。

※edit_category_form_fields()というアクションフックもありますが、category_edit_form_fields()は廃止予定となっています。

{$taxonomy}_add_form_fields()はカテゴリ追加のフォームになります。{$taxonomy}_edit_form_fields()はカテゴリ編集のフォームになります。

functions.php

function category_form_fields_function($tag){

    $cat_id = $tag->term_id;
    $meta = get_term_meta($cat_id);

    echo '<tr class="form-field"><th><label for="extra_text">グループ</label></th><td><input type="text" name="category_group" id="category_group" size="25" value="'.esc_html($meta['category_group'][0]).'" /></td></tr>';

};

add_action('category_add_form_fields','category_form_fields_function');
add_action('category_edit_form_fields','category_form_fields_function');

{$taxonomy}の部分は共通エディットフォームのフックです。今回はカテゴリページなのでには「category」が入ります。(category_add_form_fields、category_edit_form_fields)

内容は同じなのでcategory_add_form_fields(カテゴリ追加時)とcategory_edit_form_fields(カテゴリ編集時)と同じ関数を呼び出しています。

カテゴリ投稿・編集ページにテキストフォームを追加

追加したフォームの情報をカスタムフィールドに保存する

次は追加したフォームの情報(値)をカスタムフィールドに保存する方法です。

edited_term()アクションフックにて保存ボタンが押された時に処理を追加して、update_term_meta()にてカスタムフィールドのキーと値を保存します。

functions.php

function save_category(){
  
      update_term_meta($_POST['tag_ID'],'category_group', $_POST['category_group']);
      
};

add_action ( 'edited_term', 'save_category');

メモ:update_term_meta(id,key,value)

カテゴリデータ更新後にもフォーム内に表示されていればカスタムフィールドのデータ保存成功している事が確認できます。

カテゴリ更新後にフォームに表示されれば成功

作成したカスタムフィールドのデータを呼び出して利用する

既にフォーム内に出力するのに利用していますが、get_term_meta($cat_id)とすることで情報を配列で取得可能です。

今回はカスタムフィールド名を「category_group」というキー名にしてあるので配列の内容は以下になります。

Array ( [category_group] => Array ( [0] => WEB制作 ) )

get_option()と違って、キー名からの値も配列になっておりますので、特定のカテゴリのカスタムフィールド名から保存したデータを取得します。

取得する値は、カスタムフィールド名[0]に入っています。「category_group」の情報を取得する場合は以下の様になります。

$meta = get_term_meta($cat_id);
$data = $meta['category_group'][0];

echo $data;

2019-05-09WordPressWordPressカスタマイズ

Posted by Yousuke.U