- 実践 WordPress ホーム
- 投稿タイプ管理
WordPress の関数 register_meta() の使い方まとめ

WordPress でメタデータ(カスタムフィールド)を登録するための関数 register_meta() についてまとめました。
Note
register_meta() は汎用の関数です。
これとは別に投稿専用の register_post_meta() という関数もあります。
投稿・固定ページ・カスタム投稿タイプにカスタムフィールドを追加したいときは register_post_meta() を使用してください。
ちなみに、 register_post_meta() はほとんどの引数を register_meta() に渡すラッパー関数となっています。
基本的な使い方
register_meta() は通常 init フックのコールバック内で実行して使用します。
関数に渡すべき引数は次の 3 つです。
- オブジェクトタイプ(文字列)
- メタキー(文字列)
- 設定(連想配列)
add_action( 'init', 'myplugin_register_meta' );
function myplugin_register_meta() {
// メタデータを登録する
$object_type = 'post';
$meta_key = 'my_meta_key';
$args = [
// 格納する値の型:
'type' => 'string',
// 説明:
'description' => 'カスタムメタデータの説明',
// 各投稿オブジェクトに対して保存できる値を 1 つだけにするかどうか:
'single' => true,
// 値のデフォルト値:
'default' => 'デフォルト値',
// REST API でフィールドを公開するかどうか:
'show_in_rest' => true,
];
register_meta( $object_type, $meta_key, $args );
}
厳密には第 4 引数もありますが deprecrated 扱いとなっており使用することはありません。
戻り値は登録結果を表す boolean ( true / false )です。
引数・戻り値
以下引数と戻り値の説明です。
第 1 引数 $object_type string
メタデータを追加する先のオブジェクトタイプ。 通常次のうちのどれかを指定する。
post: 投稿、固定ページ、カスタム投稿タイプcomment: コメントterm: タクソノミータームuser: ユーザー
第 2 引数 $meta_key string
メタデータのキー(名前)。
第 3 引数 $args array
メタデータの設定を指定するための連想配列。
$args = [
'object_subtype' => '...',
'type' => '...',
'description' => '...',
'single' => true,
'default' => '',
'sanitize_callback' => '',
'auth_callback' => '',
'show_in_rest' => true,
'revisions_enabled' => true,
];
指定可能なキーは次のとおり。
object_subtype (string)
オブジェクトのサブタイプ。
例えば $object_type が post の場合は投稿タイプを指す。
デフォルトは空文字列で、空文字列の場合はそのオブジェクトタイプすべてに適用される。
type (string)
メタデータの型。 以下の値が指定可能。
string: 文字列boolean: 真偽値integer: 整数number: 数値array: 配列object: オブジェクト
デフォルトは string。
description (string)
説明。
single (bool)
メタデータが単一の値か複数の値か。
true の場合は単一の値、 false の場合は複数の値を持つことができる。
デフォルトは false。
default (mixed)
値がセットされていないときに get_metadata() が返すデフォルト値。
get_metadata() を引数 $single を false で呼び出した場合はこの値を格納した配列が返される。
WordPress 5.5 で追加された。
sanitize_callback (callable)
サニタイジングに使用される関数。
sanitize_meta() で使用される。
sanitize_meta() は add_metadata() update_metadata() などで使用される。
auth_callback (callable)
edit_post_meta add_post_meta delete_post_meta の権限チェックで使用される関数。
これらは current_user_can() 関数で使用される。
show_in_rest (bool|array)
REST API でメタデータを公開するかどうか。
カスタム投稿タイプの場合は、この値が true であることに加えて custom-fields が supports に含まれている必要がある。
現状ではブロックエディタでメタデータ(カスタムフィールド)を編集できるようにするためにはこの値を true にしなくてはならない。
複雑な設定をしたい場合は boolean の代わりに schema と prepare_callback というキーを持つ連想配列をセットするとよい。
デフォルトは false。
revisions_enabled (bool)
リビジョン機能を有効にするかどうか。
WordPress 6.4 で追加された。
デフォルト値まとめ
| キー | デフォルト値 |
|---|---|
object_subtype |
'' |
type |
'string' |
description |
'' |
default |
'' |
single |
false |
sanitize_callback |
null |
auth_callback |
null |
show_in_rest |
false |
revisions_enabled |
false |
サンプルコード
サンプル A. 基本的な使い方
add_action( 'init', 'myplugin_register_meta' );
function myplugin_register_meta() {
register_meta( 'post', 'my_custom_meta', [
'type' => 'string',
'single' => true,
'show_in_rest' => true,
] );
}
このコードは my_custom_meta という名前のメタデータを登録します。型は文字列で、単一の値を持ち、REST API で利用可能です。
サンプル B. リビジョン機能を使う
add_action( 'init', 'myplugin_register_meta' );
function myplugin_register_meta() {
register_meta( 'post', 'my_year', [
'type' => 'integer',
'single' => false,
'revisions_enabled' => true,
] );
}
このコードは my_year という名前のメタデータを登録します。型は整数値で、複数の値を持ち、投稿のリビジョン機能をサポートしています。
サンプル C. カスタムサニタイズ関数を使う
add_action( 'init', 'myplugin_register_meta' );
function myplugin_register_meta() {
register_meta( 'post', 'my_custom_number', [
'type' => 'integer',
'single' => true,
'show_in_rest' => true,
'sanitize_callback' => 'myplugin_sanitize_number',
] );
}
function myplugin_sanitize_number( $meta_value, $meta_key, $object_type, $object_subtype ) {
return absint( $meta_value );
}
このサンプルでは、my_custom_number というメタデータを登録し、カスタムのサニタイズ関数を使用して、値が必ず正の整数になるようにしています。
サンプル D. 権限チェック関数を使う
add_action( 'init', 'myplugin_register_meta' );
function myplugin_register_meta() {
register_meta( 'post', 'my_restricted_field', [
'type' => 'string',
'single' => true,
'show_in_rest' => true,
'auth_callback' => 'myplugin_check_meta_permission',
] );
}
function myplugin_check_meta_permission( $allowed, $meta_key, $post_id, $user_id, $cap, $caps ) {
return current_user_can( 'edit_post', $post_id );
}
このサンプルでは、my_restricted_field というメタデータを登録し、カスタムの権限チェック関数を使用して、投稿を編集する権限を持つユーザーのみがこのフィールドを編集できるようにしています。
WordPress.org 参考ページ / WordPress コード
register_meta()– Function | Developer.WordPress.org- wordpress-develop/src/wp-includes/meta.php at 6.6 · WordPress/wordpress-develop
確認時のバージョン
- WordPress
6.6.2