Функция register_rest_field()
используется для регистрации дополнительных полей для объектов REST API, таких как посты, термины, комментарии или пользователи. Это позволяет добавлять новые пользовательские данные в ответы REST API.
register_rest_field( $object_type, $attribute, $args = array() )
Параметры
$object_type
(строка|массив) (обязательный) — Тип объекта, к которому нужно добавить поле. Это может быть строка (например,post
,term
,user
) или массив типов объектов.$attribute
(строка) (обязательный) — Имя поля.$args
(массив) (обязательный) — Аргументы для регистрации поля. Должны включать колбэки для получения и (опционально) обновления значения поля. Возможные ключи:get_callback
(callable) — Функция, которая возвращает значение поля.update_callback
(callable) — Функция, которая обновляет значение поля.schema
(массив) — Схема поля для включения в JSON Schema.
Пример 1: Регистрация пользовательского поля для постов
В этом примере мы зарегистрируем пользовательское поле custom_meta
для постов, которое будет возвращать значение мета-поля _custom_meta_key
.
// Регистрация пользовательского поля для постов
function register_custom_meta_field() {
register_rest_field(
'post', // Тип объекта
'custom_meta', // Имя поля
array(
'get_callback' => 'get_custom_meta_field', // Колбэк для получения значения
'update_callback' => 'update_custom_meta_field', // Колбэк для обновления значения
'schema' => array(
'description' => 'Custom meta field',
'type' => 'string',
'context' => array( 'view', 'edit' ),
),
)
);
}
add_action( 'rest_api_init', 'register_custom_meta_field' );
// Функция для получения значения пользовательского поля
function get_custom_meta_field( $object, $field_name, $request ) {
return get_post_meta( $object['id'], '_custom_meta_key', true );
}
// Функция для обновления значения пользовательского поля
function update_custom_meta_field( $value, $object, $field_name ) {
if ( ! $value || ! is_string( $value ) ) {
return;
}
return update_post_meta( $object->ID, '_custom_meta_key', sanitize_text_field( $value ) );
}
В этом примере мы выполняем следующие шаги:
- Регистрация поля: Используем
register_rest_field()
для регистрации поляcustom_meta
для объектов типаpost
. - Колбэк для получения значения: Функция
get_custom_meta_field()
возвращает значение мета-поля_custom_meta_key
для данного поста. - Колбэк для обновления значения: Функция
update_custom_meta_field()
обновляет значение мета-поля_custom_meta_key
для данного поста.
Пример 2: Добавление URL миниатюры поста в REST API
Этот пример показывает, как добавить поле featured_image_url
для постов, чтобы включить URL миниатюры поста в ответ REST API.
function genius_register_rest_field() {
register_rest_field( 'post', 'featured_image_url', array(
'get_callback' => function ( $post_arr ) {
$image_data = wp_get_attachment_image_src( $post_arr['featured_media'], 'medium' );
return $image_data[0];
},
'update_callback' => null,
'schema' => null,
) );
}
add_action( 'rest_api_init', 'genius_register_rest_field');
В этом примере мы добавляем новое поле featured_image_url
для типа объекта post
. Используем колбэк get_callback
для получения URL миниатюры поста.
Пример 3: Добавление имени автора поста
В следующем примере добавляется поле author_name
, которое выводит имя автора поста.
function genius_register_rest_author(){
register_rest_field( 'post', 'author_name', array(
'get_callback' => function( $post, $field_name, $request ){
return get_the_author_meta( 'display_name', $post['author'] );
},
'update_callback' => null,
'schema' => array(
'description' => __( 'Name', 'textdomain' ),
'type' => 'string',
),
) );
}
add_action( 'rest_api_init', 'genius_register_rest_author');
Это добавляет новое поле author_name
для типа объекта post
. Колбэк get_callback
используется для получения имени автора поста.
Пример 4: Работа с кастомными постами
Этот пример показывает, как добавить и обновить пользовательское поле для кастомного типа поста.
function genius_register_rest_field() {
register_rest_field( 'my_custom_post_type', 'my_custom_field', array(
'get_callback' => function( $object, $field_name, $request ) {
return get_post_meta( $object['id'], $field_name, true );
},
'update_callback' => function( $value, $object, $field_name ) {
return update_post_meta( $object->ID, $field_name, sanitize_text_field( $value ) );
},
'schema' => array(
'type' => 'string',
'arg_options' => array(
'sanitize_callback' => function( $value ) {
return sanitize_text_field( $value );
},
'validate_callback' => function( $value ) {
return is_string( $value );
},
),
),
) );
}
add_action( 'rest_api_init', 'genius_register_rest_field');
Этот код добавляет поле my_custom_field
для типа объекта my_custom_post_type
. Колбэки get_callback
и update_callback
используются для получения и обновления значения метаполя.
Пример 5: Добавление данных из пользовательской таблицы базы данных
function add_custom_table_data() {
// Регистрация поля last_date
register_rest_field( 'post',
'last_date',
array(
'get_callback' => 'get_custom_table_data',
'update_callback' => null,
'schema' => null,
)
);
}
function get_custom_table_data( $object ) {
// Получаем ID поста
$post_id = $object['id'];
global $wpdb;
// SQL-запрос для получения данных из пользовательской таблицы
$sql = $wpdb->prepare( "SELECT last_date FROM wp_it_job_details WHERE post_id = %d", $post_id );
$result = $wpdb->get_row( $sql );
if ( !empty( $result ) ) {
// Если данные найдены, возвращаем значение столбца last_date
return $result->last_date;
} else {
// Если данных нет, возвращаем пустую строку
return '';
}
}
add_action( 'rest_api_init', 'add_custom_table_data' );
В этом примере мы добавляем поле last_date
в ответ REST API для постов. Для получения данных используется SQL-запрос к пользовательской таблице wp_it_job_details
, которая хранит данные о вакансиях. Функция get_custom_table_data()
возвращает значение столбца last_date
для соответствующего поста или пустую строку, если данных нет.
Пояснения
- Регистрация поля: Используется
register_rest_field()
для добавления нового поляlast_date
к типу объектаpost
. - SQL-запрос: Функция
get_custom_table_data()
выполняет SQL-запрос для получения значения столбцаlast_date
из таблицыwp_it_job_details
на основе ID поста. - Возвращаемое значение: Если данные найдены, возвращается значение столбца
last_date
; если данных нет, возвращается пустая строка.
Этот подход позволяет расширить функциональность REST API, добавляя данные из пользовательских таблиц базы данных, что может быть полезно для интеграции с внешними системами и приложениями.
Как работает функция
Функция register_rest_field()
использует глобальную переменную $wp_rest_additional_fields
для хранения зарегистрированных полей. Она содержит массив с названиями полей и коллбэк-функциями для получения или обновления значений этих полей.
Используйте событие rest_api_init
для регистрации полей, чтобы предотвратить регистрацию полей при запросах, не связанных с REST API.
Полезные советы
- Используйте функцию
register_rest_field()
для добавления новых полей к данным REST API, чтобы упростить работу с пользовательскими данными. - Регистрация пользовательских полей через
register_rest_field()
улучшает расширяемость и гибкость вашего REST API. - Определяйте четкую схему для каждого поля, чтобы улучшить документацию и поддержку в REST API.
Заключение
Функция register_rest_field()
— это мощный инструмент для расширения возможностей REST API в WordPress. С её помощью вы можете добавлять пользовательские поля к различным объектам, что позволяет легко и эффективно работать с дополнительными данными через REST API.