デフォルトのカスタム投稿タイプのフィールドでは不十分な場合があり、カスタム投稿タイプに追加データを保存する必要が生じることがあります。
幸いなことに、WordPress は投稿メタデータと呼ばれる機能をサポートしており、投稿に関する追加情報を保存できます。
投稿またはカスタム投稿タイプで投稿メタデータを使用する方法を見てみましょう。
投稿メタデータとは
投稿メタデータは、WordPress データベースに投稿に関する追加情報を保存する方法です。
投稿メタデータは、キーと値のペアとして postmeta テーブルに保存されます。WordPress データベースの postmeta テーブルを見ると、meta_id、post_id、meta_key、meta_value の4つの列があることがわかります。
post_id は、メタデータが関連付けられている投稿の ID です。meta_key はメタデータフィールドの名前で、meta_value はその値です。
投稿メタデータの追加
add_post_meta 関数を使用して、投稿に投稿メタデータを追加できます。この関数は、投稿の ID、メタデータの名前、メタデータの値という3つのパラメーターを受け取ります。
たとえば、ID が 1 の投稿に投稿メタフィールドを追加し、その投稿が書かれた場所を London として保存したいとします。
次のコードを使用できます。
add_post_meta( 1, 'location', 'London' );
投稿メタデータを操作する関数には、update_post_meta、delete_post_meta、get_post_meta などもあります。
これらの関数とプラグインでの使用方法については、プラグイン開発者ハンドブックのメタデータページで詳しく読むことができます。
カスタムフィールドパネル
コードを使って投稿メタデータを追加する方法もありますが、WordPress の管理画面からサイト管理者が投稿メタデータを追加できるようにすることもできます。
その方法の一つが、投稿タイプのカスタムフィールドパネルです。
カスタムフィールドパネルを有効にするには、まずカスタム投稿タイプがメタデータをサポートしていることを確認する必要があります。
これを行うには、supports 引数に custom-fields のサポートを含めるよう追加または更新する必要があります。
次に、カスタム投稿タイプの編集中にエディターのオプションアイコンをクリックし、「設定」を選択して「パネル」をクリックし、「カスタムフィールド」の切り替えを有効にします。
これによりエディターが更新され、画面下部にカスタムフィールドパネルが表示されます。
ここで新しいカスタムフィールドを追加し、名前と値を指定できます。
たとえば、本の ISBN 番号を追加したい場合は、名前を isbn、値を ISBN 番号とする新しいカスタムフィールドを追加できます。
このパネルは add_post_meta 関数を使用して投稿にメタデータを追加します。
カスタムフィールドパネルのフィールド名をあらかじめ入力する
カスタムフィールドパネルの「名前」フィールドに、あらかじめ定義したメタフィールドのリストを入力しておくこともできます。
これを行うには、postmeta_form_keys フィルターにフックし、カスタムフィールドパネルに表示したいメタフィールドの名前を追加する必要があります。
postmeta_form_keys フィルターは、カスタムフィールドパネルの HTML がレンダリングされる前に実行され、メタキーの配列と投稿オブジェクトという2つのパラメーターを渡します。
他のキーが定義されていない場合は、投稿に既存するメタデータのキーを取得するためのクエリが実行されます。
そのため、メタキーの配列を更新することで、カスタムフィールドパネルにメタフィールドのキーを追加し、ユーザーが正しいメタデータを追加しやすくすることができます。
これを行う方法の例を次に示します。
add_filter( 'postmeta_form_keys', 'bookstore_add_isbn_to_quick_edit', 10, 2 );
function bookstore_add_isbn_to_quick_edit( $keys, $post ) {
if ( $post->post_type === 'book' ) {
$keys[] = 'isbn';
}
return $keys;
}
postmeta_form_keys フィルターにコールバック関数を登録し、フィルターから渡される両方の引数を受け取れるよう、受け付ける引数の数を 2 に設定します。
次に、投稿のタイプが book かどうかを確認し、book であれば isbn オプションを $keys 配列に追加して、その配列を返します。
投稿タイプが book の場合、カスタムフィールドパネルに isbn メタフィールドが追加されます。
カスタムフィールドパネルを有効にした状態で本を作成または編集すると、投稿にメタデータを追加するための isbn フィールドが利用できることがわかります。
カスタムメタボックス
サイト管理者が投稿メタを追加できるようにするもう一つの方法は、カスタムメタボックスを使用することです。
ただし、カスタムメタボックスを扱うには、セキュリティを考慮した開発について十分に理解する必要もあります。まずは、プラグイン開発者ハンドブックのカスタムメタボックスページで読むことができます。
プラグイン開発者向け学習パスでは、メタボックスの操作方法を学びます。