Функция register_post_meta()
в WordPress позволяет регистрировать метаполя для определённых типов постов. Это полезный инструмент для расширения функциональности постов, например, для добавления пользовательских полей в редакторе или через REST API. Используя эту функцию, разработчики могут гибко управлять дополнительной информацией, связанной с постами.
register_post_meta( string $post_type, string $meta_key, array $args ): bool
Параметры:
- $post_type (string, обязательный): Тип поста, для которого регистрируется метаполе. Передайте пустую строку, чтобы зарегистрировать мета-ключ для всех существующих типов постов.
- $meta_key (string, обязательный): Название ключа, который нужно зарегистрировать.
- $args (array, обязательный): Данные, описывающие метаполе. Содержит параметры, такие как тип данных, описание, и т. д.
Возвращаемое значение: bool
— возвращает true
, если мета-ключ был успешно зарегистрирован, и false
, если это не удалось.
Как это работает
Функция register_post_meta()
является обёрткой для функции register_meta()
, что упрощает процесс регистрации метаполей для постов. Для того чтобы метаполя корректно работали в редакторе блоков, необходимо убедиться, что при регистрации типа поста указано значение custom-fields
в параметре supports
.
Пример 1: Регистрация метаполя только для страниц
В этом примере мы зарегистрируем метаполе с ключом my_custom_meta
только для страниц. Мы также включим его в ответ REST API и определим функцию для обработки данных при сохранении.
register_post_meta( 'page', 'my_custom_meta', [
'show_in_rest' => true, // Доступно в REST API
'sanitize_callback' => 'sanitize_text_field', // Обработка данных
'type' => 'string', // Тип данных
'description' => 'Моё пользовательское метаполе для страниц.'
]);
Теперь метаполе с ключом my_custom_meta
будет зарегистрировано только для страниц.
Пример 2: Регистрация метаполя для всех типов постов
Если вы хотите зарегистрировать метаполе для всех типов постов, можно передать пустую строку в качестве типа поста:
register_post_meta( '', 'global_meta_key', [
'show_in_rest' => true,
'sanitize_callback' => 'esc_html',
'type' => 'string',
'description' => 'Глобальное метаполе для всех типов постов.'
]);
Пример 3: Регистрация метаполя с кастомным типом данных
Вы можете зарегистрировать метаполе с типом данных, отличным от строки. В следующем примере мы добавим метаполе, которое будет хранить массив:
register_post_meta( 'custom_type', 'my_array_meta', [
'show_in_rest' => true,
'sanitize_callback' => 'maybe_unserialize', // Декодируем массив при сохранении
'type' => 'array', // Тип данных
'description' => 'Массив пользовательских данных для пользовательского типа.'
]);
Пример 4: Регистрация метаполя с кастомным правом доступа
Вы также можете указать, кто имеет право редактировать зарегистрированное метаполе, используя auth_callback
:
register_post_meta( 'post', 'restricted_meta_key', [
'show_in_rest' => true,
'sanitize_callback' => 'sanitize_text_field',
'auth_callback' => function() {
return current_user_can( 'edit_posts' ); // Только авторизованные пользователи могут редактировать
},
'type' => 'string',
'description' => 'Метаполе с ограниченным доступом.'
]);
Заключение
Функция register_post_meta()
предоставляет мощный способ для разработчиков WordPress регистрировать метаполя, которые можно использовать для хранения и управления дополнительной информацией о постах. Это особенно полезно для создания расширенных функциональностей в темах и плагинах. С её помощью вы можете настроить взаимодействие с пользовательскими полями, чтобы соответствовать уникальным требованиям вашего проекта.