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

2023-02-22WordPress カスタマイズ,WordPress

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

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

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

カテゴリデータでカスタムフィールドを利用する方法を以下の手順にて紹介します。

  1. カテゴリ追加ページと編集ページにフォーム入力欄を追加する
  2. 追加したフォームの情報をカスタムフィールドに保存する
  3. 作成したカスタムフィールドのデータを呼び出して利用する

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

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

カテゴリのデータにカスタムフィールドを追加するには{$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()は同じ関数を呼び出しています。

この結果、カテゴリ追加ページと編集ページにフォーム入力欄が追加されます。

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

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

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

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

function saveCategory()
{

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

add_action('edited_term', 'saveCategory');

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

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

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

既にフォーム内に出力するのに利用していますが、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;