Функция register_rest_field() используется для регистрации дополнительных полей для объектов REST API, таких как посты, термины, комментарии или пользователи. Это позволяет добавлять новые пользовательские данные в ответы REST API.
- Пример 1: Регистрация пользовательского поля для постов
- Пример 2: Добавление URL миниатюры поста в REST API
- Пример 3: Добавление имени автора поста
- Пример 4: Работа с кастомными постами
- Пример 5: Добавление данных из пользовательской таблицы базы данных
- Заключение
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.