Позволяет использовать метаданные с определённым ключом в WordPress REST API. Другими словами, если у вас есть произвольное поле color
со значениями например #fff
и #000
, то вы не сможете использовать его ни при написании запросов к REST API ни в редакторе Gutenberg, например не сможете добавить поле в сайдбары.
register_meta( $object_type, $meta_key, $args, $deprecated );
post
, comment
, term
, user
.post
в первом параметре.true
для возможности доступа к этому параметру через REST API. Либо опишите структуру типа данных для массивов или объектов.Зарегистриуем какое-то обычное мета-поле, например color
, которое я упоминал в самом начале для типа записи product
.
add_action( 'init', function() { register_meta( 'post', 'color', array( 'object_subtype' => 'product', 'show_in_rest' => true, ) ); } );
Тут пожалуй имеет смысл упомянуть, что параметр object_subtype
появился в версии WordPress 4.9.8 (мало ли, вдруг вы используете более раннюю версию движка).
Для невидимых (или защищённых) произвольных полей, тех, которые начинаются со знака нижнего подчёркивания _
, ситуация немного отличается, потому что нельзя взять и зарегистрировать его функцией register_meta()
. Ну то есть можно, но для этого нужно передать в неё ещё один параметр.
Окей, давайте предположим, что мета-ключ нашего поля из предыдущего примера не color
, а _color
, тогда код изменится следующим образом:
add_action( 'init', function() { register_meta( 'post', '_color', array( 'object_subtype' => 'product', 'show_in_rest' => true, 'auth_callback' => '__return_true', ) ); } );
То есть мы передаём колбэк-функцию, всегда возвращающую true
, в параметр auth_callback
.
С типами данных значений мета-полей ситуация вообще интересная – использовали или указали неверный тип? Всё, до свидания.
Когда мы используем типы данных string
или boolean
, то вроде трудностей быть не должно. Интереснее становится с типами данных array
и object
. Однако поддержка этих типов появилась в версии WordPress 5.3, до этого приходилось колдовать с JSON. Сейчас же достаточно указать структуру данных JSON в параметре show_in_rest
вместо обычного значения true
.
Итак, предположим, что в качестве значения мета-поля у нас лежит объект { "genre" : "abstraction", "artist" : "Misha" }
, тогда регистрация этого мета-поля будет выглядить вот так:
register_meta( 'post', 'art_information', array( 'single' => true, 'type' => 'object', 'show_in_rest' => array( 'schema' => array( 'type' => 'object', 'properties' => array( 'genre' => array( 'type' => 'string', ), 'artist' => array( 'type' => 'string', ), ), ), ), ) );
А что, если у нас у объекта есть ещё какое-то неизвестное свойство? Допустим мы только знаем его тип, который предположим… число! { "genre" : "abstraction", "artist" : "Misha", "dsadashdka" : 5.2 }
register_meta( 'post', 'art_information', array( 'single' => true, 'type' => 'object', 'show_in_rest' => array( 'schema' => array( 'type' => 'object', 'properties' => array( 'genre' => array( 'type' => 'string', ), 'artist' => array( 'type' => 'string', ), ), 'additionalProperties' => array( 'type' => 'number', ), ), ), ) );
А что, если мы не знаем ни свойства ни его типа данных? Тогда можно в параметр additionalProperties
передать значение true
, но так лучше не делать всё же.
Поговорим теперь за массивы. Начнём с изи – [ "Finland", "Norway", "Germany" ]
.
register_meta( 'post', 'countries', array( 'single' => true, 'type' => 'array', 'show_in_rest' => array( 'schema' => array( 'type' => 'array', 'items' => array( 'type' => 'string', ), ), ), ) );
Тут прикол может быть во вложенности – ведь массив также может состоять и из объектов.
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.