register_post_meta()WP 4.9.8

Регистрирует метаполе (ключ произвольного поля) для постов.

Является обёрткой функции register_meta для удобной регистрации метаполей постов.

Чтобы мета-поля зарегистрированные таким образом работали в редакторе блоков, нужно чтобы при регистрации типа записи в поле supports было значение custom-fields:

register_post_type( 'book', [
	...
	'supports' => [ 'title', 'editor', 'custom-fields', ... ],
	...
] );

Чтобы сделать тоже самое для таксономии, смотрите register_term_meta().

Зарегистрированные метаполя хранятся в глобальном массиве $wp_meta_keys.

Работает на основе: register_meta()
1 раз — 0.000126 сек (быстро) | 50000 раз — 0.27 сек (очень быстро) | PHP 7.1.11, WP 4.9.8

Хуков нет.

Возвращает

true|false.

  • true - если мета-ключ был успешно зарегистрирован в глобальном массиве $wp_meta_keys.
  • false - если не удалось зарегистрировать ключ.

Использование

register_post_meta( $post_type, $meta_key, $args );
$post_type(строка) (обязательный)
Тип поста для которого регистрируется метаполе. Передайте пустую строку для регистрации мета-ключа для всех существующих типов постов.
$meta_key(строка) (обязательный)
Название ключа, который нужно зарегистрировать.
$args(массив) (обязательный)

Данные описывающие метаполе. По умолчанию такие:

$args = array(
	'type'              => 'string',
	'description'       => '',
	'single'            => false,
	'sanitize_callback' => null,
	'auth_callback'     => null,
	'show_in_rest'      => false,
);

Описание каждого параметра смотрите в функции register_meta().

Примеры

0

#1 Регистрация метаполя только для страниц

register_post_meta( 'page', 'my_meta_key', [
	// Добавим в ответ REST
	'show_in_rest'      => true,     
	// Обработаем значение поля при сохранение его в базу, функцией absint()
	'sanitize_callback' => 'absint', 

] );

Теперь метаполе c ключом 'my_meta_key' будет зарегистрировано только для страниц.

Тоже самое можно сделать с помощью register_meta(), так:

register_meta( 'post', 'my_meta_key', [
	'object_subtype'    => 'page', // тип поста
	'show_in_rest'      => true,
	'sanitize_callback' => 'absint',
] );
0

#2 Еще пример

Дополнительные примеры и нюансы использования смотрите на странице функции register_meta().

Список изменений

С версии 4.9.8 Введена.

Код register_post_meta() WP 6.1.1

function register_post_meta( $post_type, $meta_key, array $args ) {
	$args['object_subtype'] = $post_type;

	return register_meta( 'post', $meta_key, $args );
}