メタデータの追加

メタデータの追加は、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_key、および meta_value を受け入れます。また、オプションの prev_value も受け入れます。指定された場合、この値を持つ既存のメタデータエントリのみを更新します。提供されない場合、関数はすべてのエントリを更新することをデフォルトとします。

メタデータの削除

delete_post_meta() は、post_idmeta_key、およびオプションで meta_value を受け取ります。名前が示す通りのことを正確に行います。

文字のエスケープ

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

JSON値 {"key":"value with \"escaped quotes\""} を考慮してください:

  1. $escaped_json = '{"key":"value with \"escaped quotes\""}';
  2. update_post_meta( $id, 'escaped_json', $escaped_json );
  3. $broken = get_post_meta( $id, 'escaped_json', true );
  4. /*
  5. $broken, after stripslashes(), ends up unparsable:
  6. {"key":"value with "escaped quotes""}
  7. */

回避策

関数 wp_slash() を使用してさらに1レベルのエスケープを追加することで、stripslashes() への呼び出しを補うことができます:

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

隠しカスタムフィールド

プラグインまたはテーマの開発者であり、パラメータを保存するためにカスタムフィールドを使用する予定がある場合、WordPressは、カスタムフィールドリストに「_」(アンダースコア)で始まる meta_key を持つカスタムフィールドを表示しないことに注意することが重要です。投稿編集画面や the_meta() テンプレート関数を使用する際に表示されません。

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

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

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

隠し配列

さらに、meta_value が配列である場合、meta_key 名にアンダースコアを付けなくても、ページ編集画面には表示されません。