これから使おう!Term metadataの使い方

Kasumi Ogawa
Kasumi OgawaPrime Strategy Co., Ltd.
これから使おう!
Term Metadataの使い方
小川 果純
自己紹介
• 小川 果純(おがわ かすみ)
• WordPressエンジニア
↓
セールスエンジニア
↓
Webディレクター兼Webエンジニア ←いまここ
• カピバラとポテチとピザが好き
• Facebook: kasumi.ogawa.399
• https://minkapi.style/
これから使おう!Term metadataの使い方
突然ですが…
Term Metadata、
知っていますか?
Term Metadata、
使ったことありますか?
知らない、使ったことない方はぜひ、
今日から使ってみてください!
Term Metadataとは
Term Metadataとは
• WordPress4.4で実装された、投稿のメタ情報のカテゴリー版。
• termmetaというテーブルが追加。
• termmeta用の関数ももちろん追加。
これから使おう!Term metadataの使い方
『投稿のメタ情報のカテゴリー版』ということは、
投稿みたいに、こういうチェックボックスがあって…
こういうフィールドが出てくるはず!!
これから使おう!Term metadataの使い方
カスタムフィールドがない!?
Term Metadataとは
投稿のカスタムフィールドのように、
管理画面上でメタ情報の追加が行えない。
Term Metadataとは
投稿のカスタムフィールドのように、
管理画面上でメタ情報の追加が行えない。
↓
Term Metadataとは
投稿のカスタムフィールドのように、
管理画面上でメタ情報の追加が行えない。
↓
入力フィールドの用意や保存のプログラムなど、
1から実装する必要がある。
面倒!!!!
面倒!!!!
=誰も使ってくれない…
しかも
カテゴリーにカスタムフィールド
追加できるプラグインもたくさん!
それでもせっかくの新機能。
使ってもらいたいので、
利用するメリット
利用するメリット
とあるプラグインを例に挙げると、
カテゴリーにカスタムフィールドを追加した際にデータが保存され
るのは、termmetaテーブルではなくoptionsテーブル。
option_name
→[タクソノミー名]_[term_id]_[管理画面で指定するフィールドの名前]
利用するメリット
Term Metadata実装前にこういった機能を実現していたプラグイ
ンは以下の対応がほとんど。
• optionsテーブルに独自のoption_nameをつけて保存
• 独自テーブルを追加し、そこに保存
利用するメリット
• optionsテーブルに独自のoption_nameをつけて保存
×optionsテーブルが肥大化してしまう
×データの保存の仕方がプラグインの実装に依存してしまう
→他のプラグインに変えることが難しくなる
×配列で保存された場合に、
like検索でデータ取得しなくてはならなくなる
×optionsテーブルの本来の使い方ではない
利用するメリット
• optionsテーブルに独自のoption_nameをつけて保存
×optionsテーブルが肥大化してしまう
×データの保存の仕方がプラグインの実装に依存してしまう
→他のプラグインに変えることが難しくなる
×配列で保存された場合に、
like検索でデータ取得しなくてはならなくなる
×optionsテーブルの本来の使い方ではない
Term Metadataなら
問題なし!!
利用するメリット
• 独自テーブルを追加し、そこに保存
×データの保存の仕方がプラグインの実装に依存してしまう
→他のプラグインに変えることが難しくなる
×Term Metadata実装により、termmetaテーブルと独自
テーブルの名前が被ってしまい、「そのプラグイン使ってたら
WordPressアップデートできない問題」が多発
利用するメリット
• 独自テーブルを追加し、そこに保存
×データの保存の仕方がプラグインの実装に依存してしまう
→他のプラグインに変えることが難しくなる
×Term Metadata実装により、termmetaテーブルと独自
テーブルの名前が被ってしまい、「そのプラグイン使ってたら
WordPressアップデートできない問題」が多発
Term Metadataなら
問題なし!!
でも、実装方法がわからない…
管理画面の実装方法
これから使おう!Term metadataの使い方
管理画面の実装方法
1. 必要なメタ情報とメタキー名などを決める
2. カテゴリー新規追加画面に入力フィールド
3. カテゴリー編集画面に入力フィールド
4. 保存と削除のプログラム
5. ポイント
1. 必要なメタ情報とメタキー名などを決める
2. おすすめマークの表示・非表示
メタキー:osusume_flag
1. カテゴリーのよみがな
メタキー:term_kana
1. 必要なメタ情報とメタキー名などを決める
$meta_array = array(
'term_kana' => array(
'name' => 'よみがな',
'note' => 'よみがなを入力してください',
),
'osusume_flag' => array(
'name' => 'おすすめマーク',
'note' => 'おすすめマークを表示する際は表示にチェックを入れてください‘,
),
);
新規追加画面と編集画面、
それぞれにフィールドを実装する必
要があるので、フィールド名と注釈は
連想配列で管理する。
1. 必要なメタ情報とメタキー名などを決める
function return_meta_array() {
$meta_array = array(
'term_kana' => array(
'name' => 'よみがな',
'note' => 'よみがなを入力してください',
),
'osusume_flag' => array(
'name' => 'おすすめマーク',
'note' => 'おすすめマークを表示する際は表示にチェックを入れてください‘,
),
);
return $meta_array;
}
その配列を返す関数にしておく。
2. カテゴリー新規追加画面に入力フィールド
function add_termmeta_form() {
$meta_array = return_meta_array();
array_map( "esc_html", $meta_array );
$html = <<<EOM
//よみがなのHTML
//おすすめマークのHTML
EOM;
echo $html;
}
メタ情報配列を取得して、array_map()
を使用して各要素にesc_html()の処
理を行い、エスケープする。
2. カテゴリー新規追加画面に入力フィールド
function add_termmeta_form() {
$meta_array = return_meta_array();
array_map( "esc_html", $meta_array );
$html = <<<EOM
//よみがなのHTML
//おすすめマークのHTML
EOM;
echo $html;
}
add_action( 'category_add_form_fields', 'add_termmeta_form' );
category_add_form_fieldsにフックし、
カテゴリー新規追加画面に入力
フィールドを追加する。
2. カテゴリー新規追加画面に入力フィールド
//よみがなのHTML
<div class="form-field term_kana-wrap">
<label for="term_kana">{$meta_array['term_kana']['name']}</label>
<input name="term_kana" id="term_kana" type="text" value="" size="40">
<p>{$meta_array['term_kana']['note']}</p>
</div>
カテゴリー新規追加画面はそれぞれ
の入力フィールドをdivで分ける。
2. カテゴリー新規追加画面に入力フィールド
//おすすめマークのHTML
<div class="form-field osusume_flag-wrap">
<label for="osusume_flag">{$meta_array['osusume_flag']['name']}</label>
<ul>
<li><label><input type="radio" name="osusume_flag" value="0"
checked>非表示</label></li>
<li><label><input type="radio" name="osusume_flag" value="1">表示
</label></li>
</ul>
<p>{$meta_array['osusume_flag']['note']}</p>
</div>
2. カテゴリー新規追加画面に入力フィールド
一番下に追加される
2. カテゴリー編集画面に入力フィールド
function edit_termmeta_form( $tag, $taxonomy ) {
$meta_array = return_meta_array();
array_map( "esc_html", $meta_array );
//現在保存されている値の取得
$html = <<<EOM
//よみがなのHTML
//おすすめマークのHTML
EOM;
echo $html;
}
編集画面では、現在編集を行ってい
るタームとタクソノミーの情報が引数
として受け取れる。
2. カテゴリー編集画面に入力フィールド
function edit_termmeta_form( $tag, $taxonomy ) {
$meta_array = return_meta_array();
array_map( "esc_html", $meta_array );
//現在保存されている値の取得
$html = <<<EOM
//よみがなのHTML
//おすすめマークのHTML
EOM;
echo $html;
}
add_action( 'category_edit_form_fields', 'edit_termmeta_form', 10, 2 );
category_edit_form_fieldsにフックし、
カテゴリー編集画面に入力フィールド
を追加する。
2. カテゴリー編集画面に入力フィールド
//現在保存されている値の取得
$term_kana_value = '';
$osusume_flag_value = '';
$term_kana_value = esc_attr( get_term_meta( $tag->term_id, 'term_kana', true ) );
$osusume_flag_value = esc_attr( get_term_meta( $tag->term_id, 'osusume_flag',
true ) );
if ( $osusume_flag_value == 1 ) {
$osusume_flag_1 = ' checked';
$osusume_flag_0 = '';
} elseif ( $osusume_flag_value == 0 ) {
$osusume_flag_1 = '';
$osusume_flag_0 = ' checked';
}
get_term_meta()で現在保存されてい
る値を取得する。
2. カテゴリー編集画面に入力フィールド
//よみがなのHTML
<tr class="form-field term_kana-wrap">
<th scope="row"><label
for="term_kana">{$meta_array['term_kana']['name']}</label></th>
<td>
<input name="term_kana" id="term_kana" type="text"
value="{$term_kana_value}" size="40">
<p class="description">{$meta_array['term_kana']['note']}</p>
</td>
</tr>
カテゴリー編集画面はそれぞれの入
力フィールドをtable要素で分ける。
2. カテゴリー編集画面に入力フィールド
//おすすめマークのHTML
<tr class="form-field osusume_flag-wrap">
<th scope="row">{$meta_array['osusume_flag']['name']}</th>
<td>
<ul>
<li><label><input type="radio" name="osusume_flag"
value="0"{$osusume_flag_0}>非表示</label></li>
<li><label><input type="radio" name="osusume_flag"
value="1"{$osusume_flag_1}>表示</label></li>
</ul>
<p class="description">{$meta_array['osusume_flag']['note']}</p>
</td>
</tr>
3. カテゴリー編集画面に入力フィールド
一番下に追加される
4. 保存と削除のプログラム
function update_term_meta_array( $term_id ) {
$meta_array = return_meta_array();
foreach ( $meta_array as $meta_key => $value ) {
if ( ! isset( $_POST[$meta_key] ) || ! stripslashes_deep( $_POST[$meta_key] ) ) {
delete_term_meta( $term_id, $meta_key, get_term_meta( $term_id, $meta_key,
true ) );
} elseif ( ! get_term_meta( $term_id, $meta_key ) ) {
add_term_meta( $term_id, $meta_key, stripslashes_deep( $_POST[$meta_key] ),
true );
} elseif ( stripslashes_deep( $_POST[$meta_key] ) != get_term_meta( $term_id,
$meta_key, true ) ) {
update_term_meta( $term_id, $meta_key, stripslashes_deep( $_POST[$meta_key] ) );
}
}
}
add_action( 'created_category', 'update_term_meta_array' );
add_action( 'edited_category', 'update_term_meta_array' );
フィールドの配列をループで回し
て一気に処理する。
5. ポイント
1. nonceの実装は不要!
→デフォルトのカテゴリー新規追加画面や編集画面に実装されている
nonceと、同一のformタグに囲まれているため。
2. サニタイズ処理は不要!
→それぞれの関数の中で、サニタイズやアンサニタイズ処理が行われ
ている。
3. 適宜入力内容のチェックなどを実装しよう!
フロント画面の実装方法
<?php $categories = get_categories(); ?>
<ul>
<?php foreach ($categories as $category) :
$cat_name = esc_html( $category->cat_name );
$cat_link = esc_url( get_category_link( $category->term_id ) );
$cat_kana = esc_html( get_term_meta( $category->term_id, 'term_kana', true ) );
$cat_flg = get_term_meta( $category->term_id, 'osusume_flag', true );
if ( $cat_flg == 1 ) {
$cat_class = ' class="osusume"';
} else {
$cat_class = '';
}
$html = '<li' . $cat_class . '><a href="' . $cat_link . '">';
$html .= '<ruby>'. $cat_name . '<rt>' . $cat_kana . '</rt></ruby>';
$html .= '</a></li>';
echo $html;
endforeach; ?>
</ul>
フロント画面の実装方法
get_term_meta()で必要なものを取
得して整形
フロント画面の実装方法
それでも確かに使いづらいところ…
管理画面のカスタムフィールドは欲しいですね。
さいごに
$post->meta_key
$user->meta_key
はあるのに、
$term->meta_key
はなかったので、
tracにチケット作ってみました!
これで更に
Term Metadata
が使われること間違いなし!
Term Metadataの今後に期待!
ぜひ使ってみてね!
ご清聴ありがとうございました
※今回紹介したコードはGithubにて公開しています。
https://github.com/minkapi/wckansai2016_termmeta
1 of 61

Recommended

20120118 titanium by
20120118 titanium20120118 titanium
20120118 titaniumHiroshi Oyamada
1.9K views32 slides
脱コピペ!デザイナーにもわかるPHPとWP_Query by
脱コピペ!デザイナーにもわかるPHPとWP_Query脱コピペ!デザイナーにもわかるPHPとWP_Query
脱コピペ!デザイナーにもわかるPHPとWP_QueryHidekazu Ishikawa
4.7K views65 slides
WordBeach @kurudrive by
WordBeach @kurudriveWordBeach @kurudrive
WordBeach @kurudriveHidekazu Ishikawa
3K views44 slides
Let’s make elastic cms together! by
Let’s make elastic cms together!Let’s make elastic cms together!
Let’s make elastic cms together!Shinichi Takahashi
1.2K views19 slides
WordPress RESTful API & Amazon API Gateway - WordCamp Kansai 2016 by
WordPress RESTful API & Amazon API Gateway - WordCamp Kansai 2016WordPress RESTful API & Amazon API Gateway - WordCamp Kansai 2016
WordPress RESTful API & Amazon API Gateway - WordCamp Kansai 2016崇之 清水
6.2K views53 slides
Make the 3D Wapuu model and printing by the 3D printer. by
Make the 3D Wapuu model and printing by the 3D printer.Make the 3D Wapuu model and printing by the 3D printer.
Make the 3D Wapuu model and printing by the 3D printer.Takeshi Kashihara
2K views35 slides

More Related Content

Similar to これから使おう!Term metadataの使い方

これから使おう!Term metadataの使い方 in WordBench Saitama by
これから使おう!Term metadataの使い方 in WordBench Saitamaこれから使おう!Term metadataの使い方 in WordBench Saitama
これから使おう!Term metadataの使い方 in WordBench SaitamaKasumi Ogawa
609 views55 slides
ブログの枠を超える?ためのWordPressカスタマイズ入門 by
ブログの枠を超える?ためのWordPressカスタマイズ入門ブログの枠を超える?ためのWordPressカスタマイズ入門
ブログの枠を超える?ためのWordPressカスタマイズ入門muracchi
25.1K views56 slides
Inside Movable Type by
Inside Movable TypeInside Movable Type
Inside Movable Type純生 野田
6.6K views72 slides
Movable Type カスタムフィールドのまとめ by
Movable Type カスタムフィールドのまとめMovable Type カスタムフィールドのまとめ
Movable Type カスタムフィールドのまとめYujiro Araki
12.3K views73 slides
Ec cubeの基礎からcms連携まで by
Ec cubeの基礎からcms連携までEc cubeの基礎からcms連携まで
Ec cubeの基礎からcms連携までMakoto Nishimura
2.6K views55 slides
コードビュー中心で開発するDreamweaverテンプレート by
コードビュー中心で開発するDreamweaverテンプレートコードビュー中心で開発するDreamweaverテンプレート
コードビュー中心で開発するDreamweaverテンプレートAkira Maruyama
1.9K views31 slides

Similar to これから使おう!Term metadataの使い方(20)

これから使おう!Term metadataの使い方 in WordBench Saitama by Kasumi Ogawa
これから使おう!Term metadataの使い方 in WordBench Saitamaこれから使おう!Term metadataの使い方 in WordBench Saitama
これから使おう!Term metadataの使い方 in WordBench Saitama
Kasumi Ogawa609 views
ブログの枠を超える?ためのWordPressカスタマイズ入門 by muracchi
ブログの枠を超える?ためのWordPressカスタマイズ入門ブログの枠を超える?ためのWordPressカスタマイズ入門
ブログの枠を超える?ためのWordPressカスタマイズ入門
muracchi25.1K views
Movable Type カスタムフィールドのまとめ by Yujiro Araki
Movable Type カスタムフィールドのまとめMovable Type カスタムフィールドのまとめ
Movable Type カスタムフィールドのまとめ
Yujiro Araki12.3K views
Ec cubeの基礎からcms連携まで by Makoto Nishimura
Ec cubeの基礎からcms連携までEc cubeの基礎からcms連携まで
Ec cubeの基礎からcms連携まで
Makoto Nishimura2.6K views
コードビュー中心で開発するDreamweaverテンプレート by Akira Maruyama
コードビュー中心で開発するDreamweaverテンプレートコードビュー中心で開発するDreamweaverテンプレート
コードビュー中心で開発するDreamweaverテンプレート
Akira Maruyama1.9K views
a-sap06「カスタムフィールドを使いこなす」 by Seiko Kuchida
a-sap06「カスタムフィールドを使いこなす」a-sap06「カスタムフィールドを使いこなす」
a-sap06「カスタムフィールドを使いこなす」
Seiko Kuchida1.9K views
Movable TypeのWebアプリケーションフレームワークの基本 by Hajime Fujimoto
Movable TypeのWebアプリケーションフレームワークの基本Movable TypeのWebアプリケーションフレームワークの基本
Movable TypeのWebアプリケーションフレームワークの基本
Hajime Fujimoto4.2K views
カラーミーショップ「カスタマイズスクール第1期vol.1」 by ec-campus
カラーミーショップ「カスタマイズスクール第1期vol.1」カラーミーショップ「カスタマイズスクール第1期vol.1」
カラーミーショップ「カスタマイズスクール第1期vol.1」
ec-campus3.7K views
第3回 Magento Cafe Plus モジュール開発入門 by Hirokazu Nishi
第3回 Magento Cafe Plus モジュール開発入門第3回 Magento Cafe Plus モジュール開発入門
第3回 Magento Cafe Plus モジュール開発入門
Hirokazu Nishi1.8K views
MT meets PHP - PHP conference Kansai 2013 by 純生 野田
MT meets PHP - PHP conference Kansai 2013MT meets PHP - PHP conference Kansai 2013
MT meets PHP - PHP conference Kansai 2013
純生 野田18.3K views
WordPressのテンプレートタグを理解する by Yoshinori Kobayashi
WordPressのテンプレートタグを理解するWordPressのテンプレートタグを理解する
WordPressのテンプレートタグを理解する
Yoshinori Kobayashi1.4K views
XPages 開発 Tips 百連発 by Mitsuru Katoh
XPages 開発 Tips 百連発XPages 開発 Tips 百連発
XPages 開発 Tips 百連発
Mitsuru Katoh20.3K views
Apexコアデベロッパーセミナー070726 配布用 by stomita
Apexコアデベロッパーセミナー070726 配布用Apexコアデベロッパーセミナー070726 配布用
Apexコアデベロッパーセミナー070726 配布用
stomita6.3K views
DW テンプレートをマスターして 楽々サイトメンテナンス by Akira Maruyama
DW テンプレートをマスターして 楽々サイトメンテナンスDW テンプレートをマスターして 楽々サイトメンテナンス
DW テンプレートをマスターして 楽々サイトメンテナンス
Akira Maruyama2.3K views
2006 03 18_osc2006_x_cube_template by Tom Hayakawa
2006 03 18_osc2006_x_cube_template2006 03 18_osc2006_x_cube_template
2006 03 18_osc2006_x_cube_template
Tom Hayakawa411 views
WordPressで投稿記事情報の取得方法 by regret raym
WordPressで投稿記事情報の取得方法WordPressで投稿記事情報の取得方法
WordPressで投稿記事情報の取得方法
regret raym27.8K views
中級者のためのWordPress講座[第2回]WordPressテーマをカスタマイズしてみよう! by switch3000
中級者のためのWordPress講座[第2回]WordPressテーマをカスタマイズしてみよう!中級者のためのWordPress講座[第2回]WordPressテーマをカスタマイズしてみよう!
中級者のためのWordPress講座[第2回]WordPressテーマをカスタマイズしてみよう!
switch30001.9K views

Recently uploaded

JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私 by
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私修治 松浦
208 views36 slides
onewedge_companyguide1 by
onewedge_companyguide1onewedge_companyguide1
onewedge_companyguide1ONEWEDGE1
66 views22 slides
ウォーターフォール開発で生 産性を測る指標 by
ウォーターフォール開発で生 産性を測る指標ウォーターフォール開発で生 産性を測る指標
ウォーターフォール開発で生 産性を測る指標Kouhei Aoyagi
55 views13 slides
Najah Matsuo Self Introduction by
Najah Matsuo Self IntroductionNajah Matsuo Self Introduction
Najah Matsuo Self IntroductionNajahMatsuo
10 views29 slides
システム概要.pdf by
システム概要.pdfシステム概要.pdf
システム概要.pdfTaira Shimizu
44 views1 slide
SSH超入門 by
SSH超入門SSH超入門
SSH超入門Toru Miyahara
490 views21 slides

Recently uploaded(7)

JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私 by 修治 松浦
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私
修治 松浦208 views
onewedge_companyguide1 by ONEWEDGE1
onewedge_companyguide1onewedge_companyguide1
onewedge_companyguide1
ONEWEDGE166 views
ウォーターフォール開発で生 産性を測る指標 by Kouhei Aoyagi
ウォーターフォール開発で生 産性を測る指標ウォーターフォール開発で生 産性を測る指標
ウォーターフォール開発で生 産性を測る指標
Kouhei Aoyagi55 views
Najah Matsuo Self Introduction by NajahMatsuo
Najah Matsuo Self IntroductionNajah Matsuo Self Introduction
Najah Matsuo Self Introduction
NajahMatsuo10 views

これから使おう!Term metadataの使い方