WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru Хостинг, VPS/VDS и отдельные сервера только на SSD дисках. 7 дней бесплатного тестирования.

register_rest_field() WP 4.7.0

Регистрирует новое REST поле для указанного типа REST объекта (ресурса).

Функцию нужно вызывать на событии rest_api_init. Использование этого события вместо init предотвратит регистрацию поля во время запросов к WordPress, которые не используют rest API.

Как работает функция

В REST API используется глобальная переменная $wp_rest_additional_fields. Она содержит в себе все поля ответа, которые выводятся для отдельного объекта (ресурса). REST API использует функцию register_rest_field(), как вспомогательную, чтобы добавить поле в эту глобальную переменную. Работа с этой глобальной переменной напрямую не рекомендуется, по причинам обратной совместимости.

Для каждого ресурса REST (посты, термины, комменты, юзеры и т.д.) переменная $wp_rest_additional_fields содержит массив с названиями полей и коллбек функциями для получения или обновления значений этих полей.

Работает на основе: wp_parse_args()
✈ 1 раз = 0.000001с = скорость света | 50000 раз = 0.04с = скорость света PHP 7.1.11, WP 4.9.8

Хуков нет.

Возвращает

Ничего (null)

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

register_rest_field( $object_type, $attribute, $args );
$object_type(строка/массив) (обязательный)
Название ресурса REST для которого регистрируется поле. Несколько ресурсов можно можно указать в массиве. Возможные ресурсы из ядра: post, term, meta, user, comment. Также может быть название произвольного ресурса, например при регистрации типа записи или таксономии.
$attribute(строка) (обязательный)
Название поля. Это поле будет использовано как ключ в объекте REST ответа.
$args(массив)

Параметры обработки указанного поля во время REST запроса.

  • $get_callback (строка/массив/null)
    Функция для получения значения поля.
    По умолчанию: null - значение не будет показано в ответе

  • $update_callback (строка/массив/null)
    Функция, используемая для установки и обновления значения поля.
    По умолчанию: null - значение не может быть установлено или обновлено

  • $schema (строка/массив/null)
    Функция, используемая для создания схемы этого поля.
    По умолчанию: null - схема не будет показана

По умолчанию: array()

Примеры

#1 Создаем поле выводящие имя автора поста

add_action( 'rest_api_init', function(){

	register_rest_field( 'post', 'my_awesome_field', array(
		'get_callback'    => function( $post, $field_name, $request ){
			return get_the_author_meta( 'display_name', $post['author'] );
		},
		'update_callback' => null,
		'schema'          => null
	) );

} );

Теперь поле my_awesome_field - можно найти в json ответе маршрута http://site.ru/wp-json/wp/v2/posts.

#2 Получаем кастомные посты по произвольному полю. Или обновляем произвольное поле кастомного поста

add_action( 'rest_api_init', 'slug_register_my_post_types' );
function slug_register_my_post_types() {
	register_rest_field( 'my_post_type', 'my_custom_field',
		array(
			'get_callback'    => function ( $object, $field_name, $request ) {
				return get_post_meta( $object['id'], $field_name );
			},
			'update_callback' => function ( $value, $object, $field_name ) {
				if ( ! $value || ! is_string( $value ) ) {
					return;
				}

				return update_post_meta( $object->ID, $field_name, strip_tags( $value ) );
			},
			'schema'          => null,
		)
	);
}

Таким GET запросом можно получить список постов отсортированы по значению метаполя my_custom_field:

https://mysite.ru/wp-json/wp/v2/my_post_type?filter[meta_query][0][key]=my_custom_field&filter[meta_query][0][value]=my_find_value

А обновить значение этого мета поля можно POST запросом

https://mysite.ru/wp-json/wp/v2/my_post_type/{id}

где {id} это id нужного поста и в параметрах запроса указано: my_custom_field => 'new_value'.

Код register_rest_field: wp-includes/rest-api.php VER 4.9.8

<?php
function register_rest_field( $object_type, $attribute, $args = array() ) {
	$defaults = array(
		'get_callback'    => null,
		'update_callback' => null,
		'schema'          => null,
	);

	$args = wp_parse_args( $args, $defaults );

	global $wp_rest_additional_fields;

	$object_types = (array) $object_type;

	foreach ( $object_types as $object_type ) {
		$wp_rest_additional_fields[ $object_type ][ $attribute ] = $args;
	}
}

Cвязанные функции

Из метки: REST API

petrozavodsky 772alkoweb.ru
Делаю веб руками.
Редакторы: Kama 7021, campusboy 3061
Комментариев нет
    Здравствуйте, !     Войти . Зарегистрироваться