add_meta() は、WordPress の管理画面(投稿編集画面)でカスタムフィールドを追加する際に使用される内部関数です。この関数は、$_POST から送信されたメタデータを処理し、add_post_meta() を使って投稿メタデータとして保存します。
一般的なテンプレートタグとしての利用は想定されていませんが、管理画面のカスタマイズを行う際に活用できます。
目次
機能の説明
- 投稿編集画面のカスタムフィールドの追加処理
$_POST経由でメタデータを保存する- 内部的に
add_post_meta()を呼び出す
この関数は、カスタムフィールドの metakey(キー)と metavalue(値)を $_POST から取得し、add_post_meta() を使って投稿メタデータとして保存します。
注意点
- 管理画面のカスタムフィールド機能に依存しているため、通常のテンプレートでは使用しません。
- 直接呼び出すことは推奨されていない(
add_post_meta()を使うべき)。 $_POSTから取得したデータを処理するため、フロントエンドでは動作しません。
シンプルなコード例
管理画面の投稿編集画面から add_meta() を実行すると、$_POST から送信されたデータが保存されます。
投稿メタデータを追加する場合
if (isset($_POST['custom_field_key']) && isset($_POST['custom_field_value'])) {
$_POST['metakeyinput'] = sanitize_text_field($_POST['custom_field_key']);
$_POST['metavalue'] = sanitize_text_field($_POST['custom_field_value']);
add_meta($post_id);
}$_POST['metakeyinput']にメタキーをセット$_POST['metavalue']にメタ値をセットadd_meta($post_id)を実行して保存
※ この処理は管理画面用であり、テンプレートでの使用は非推奨。
使い方の説明
add_meta() の関数定義
function add_meta( $post_id ) {
$post_id = (int) $post_id;
$metakeyselect = isset($_POST['metakeyselect']) ? wp_unslash(trim($_POST['metakeyselect'])) : '';
$metakeyinput = isset($_POST['metakeyinput']) ? wp_unslash(trim($_POST['metakeyinput'])) : '';
$metavalue = isset($_POST['metavalue']) ? $_POST['metavalue'] : '';
if (is_string($metavalue)) {
$metavalue = trim($metavalue);
}
if ((( '#NONE#' !== $metakeyselect ) && !empty($metakeyselect)) || !empty($metakeyinput)) {
if ('#NONE#' !== $metakeyselect) {
$metakey = $metakeyselect;
}
if ($metakeyinput) {
$metakey = $metakeyinput;
}
if (is_protected_meta($metakey, 'post') || !current_user_can('add_post_meta', $post_id, $metakey)) {
return false;
}
$metakey = wp_slash($metakey);
return add_post_meta($post_id, $metakey, $metavalue);
}
return false;
}add_meta() の処理内容
$_POSTからカスタムフィールドのデータを取得metakeyinput(手入力のキー)とmetakeyselect(既存キー選択)を判定- 適切なメタキーを決定し、
add_post_meta()を実行 - 管理者権限を持つユーザーのみ実行可能
一緒に使うことが多い関連タグ
add_post_meta()
通常のメタデータ追加にはこちらを使用する。
add_post_meta($post_id, 'custom_price', '1000');update_post_meta()
既存のメタデータを更新する。
update_post_meta($post_id, 'custom_price', '1500');delete_post_meta()
特定のメタデータを削除する。
delete_post_meta($post_id, 'custom_price');追加情報で取得したい場合
get_post_meta() を使う
保存したメタデータを取得する場合
$custom_price = get_post_meta($post_id, 'custom_price', true);
echo $custom_price;get_user_meta() でユーザーメタを取得
$membership_level = get_user_meta($user_id, 'membership_level', true);
echo $membership_level;想定されるトラブル
add_meta() が動作しない
$_POSTに適切なデータがセットされていない- ユーザーの権限が不足している
- フロントエンドで実行しようとしている
解決方法
$_POSTのデータをvar_dump($_POST);で確認current_user_can('add_post_meta')をチェックadd_post_meta()を直接使用する
メタデータが更新されず、重複する
add_meta() は add_post_meta() を使用するため、既存データの上書きではなく追加処理を行う
解決方法
update_post_meta() を使用して更新する
update_post_meta($post_id, 'custom_price', '2000');Q&A
まとめ
add_meta()は管理画面の「カスタムフィールド」機能専用の関数$_POSTのデータを受け取り、add_post_meta()を通じて保存する- 通常のテンプレートやフロントエンドでは
add_post_meta()を使用すべき - メタデータの取得には
get_post_meta()を使用する
管理画面カスタマイズを行う場合にのみ使用し、通常の開発では add_post_meta() を活用するのがベストです。
コメント