投稿メタデータの管理

メタデータの追加

メタデータの追加は、add_post_meta() で簡単に行うことができます。この関数は post_idmeta_keymeta_value、そして unique フラグを受け付けます。

meta_key は、プラグインがコードの他の場所でメタ値を参照する方法です。mycrazymetakeyname のようなものでも良いですが、プラグインやテーマに関連する接頭辞の後にキーの説明をつけると、より便利です。wporg_featured_menu などが良いかもしれません。メタデータのバリエーションを保存するために、同じ meta_key を複数回使用できることに注意してください (下記のユニークフラグを参照)。

meta_value には、文字列、整数、配列を指定できます。配列の場合は、データベースに格納する前に自動的にシリアライズされます。

unique フラグにより、このキーがユニーク (一意) であるか否かを宣言できます。「非」ユニークキーとは、価格のように、投稿が複数のバリエーションを持つことができるキーのことです。

投稿には価格を 1つ だけ持たせたい場合は、unique フラグを立て、meta_key の値は1つだけ保持できるようにします。

メタデータの更新

キーがすでに存在していて、それを更新したい場合は、update_post_meta() を使用します。この関数を使用し、キーが存在 しない 場合は、add_post_meta() を使用した際と同じように、キーが作成されます。

add_post_meta() と同様に、この関数は post_idmeta_keymeta_value を受け付けます。また、オプションで prev_value を指定でき、この値が指定された場合、この関数は、既存のメタデータ・エントリのみを、この値で更新します。この値が指定されない場合、関数はデフォルトですべてのエントリを更新します。

メタデータの削除

delete_post_meta() は、post_idmeta_key、そしてオプションで meta_value を受け取ります。これは、名前が示すとおりのことを行います。

文字エスケープ

投稿メタの値は、保存時に stripslashes() 関数を通して渡されるため、エスケープされた文字を含む可能性のある値 (JSON など) を渡す際には注意が必要です。

{"key":"value with \"escaped quotes\""} という JSON 値を考えてみましょう:

$escaped_json = '{"key":"value with \"escaped quotes\""}';
update_post_meta( $id, 'escaped_json', $escaped_json );
$broken = get_post_meta( $id, 'escaped_json', true );
/*
$broken, after stripslashes(), ends up unparsable:
{"key":"value with "escaped quotes""}
*/

回避方法

(WordPress 3.6で導入された) 関数 wp_slash() を使って、もう1段階エスケープを追加することで、stripslashes() の呼び出しを補うことができます:

$escaped_json = '{"key":"value with \"escaped quotes\""}';
update_post_meta( $id, 'double_escaped_json', wp_slash( $escaped_json ) );
$fixed = get_post_meta( $id, 'double_escaped_json', true );
/*
$fixed, after stripslashes(), ends up as desired:
{"key":"value with \"escaped quotes\""}
*/

非表示のカスタムフィールド

プラグインやテーマの開発者で、カスタムフィールドを使ってパラメータを格納しようと考えている場合、WordPress では、投稿編集画面や get_post_meta() テンプレート関数のカスタムフィールド一覧で、meta_key が「_」(アンダースコア) で始まるカスタムフィールドは表示されないことに注意してください。

これは、add_meta_box() 関数を使用して、これらのカスタムフィールドを通常とは異なる方法で表示するのに便利です。

以下の例では、meta_key の名前が ‘_color’、meta_value が ‘red’ のユニークなカスタムフィールドが追加されますが、このカスタムフィールドは投稿編集画面には表示されません:

add_post_meta( 68, '_color', 'red', true );

非表示の配列

また、meta_value が配列の場合、meta_key の名前の前にアンダースコアを付けなかったとしても、ページ編集画面には表示されません。

原文 / 日本語訳

s
検索
c
新規投稿を作成する
r
返信
e
編集
t
ページのトップへ
j
次の投稿やコメントに移動
k
前の投稿やコメントに移動
o
コメントの表示を切替
esc
投稿やコメントの編集をキャンセル