Получение метаданных пользователя через WP REST API
Я работаю над проектом, использующим WordPress REST API и VueJS вместе с Axios (для AJAX запросов GET/POST данных на сайт). Однако мне нужно получить доступ к метаданным пользователя, таким как 'collapsed_widgets', через REST API, но данные, которые я получаю в ответе GET, выглядят так:
"meta": [],
Это происходит для ВСЕХ пользователей, что странно, потому что там должны быть данные.
Есть ли способ получить метаданные пользователей?

Ознакомьтесь с функцией register_rest_field()
для регистрации мета-полей через REST API.
add_action( 'rest_api_init', 'adding_user_meta_rest' );
function adding_user_meta_rest() {
register_rest_field( 'user',
'collapsed_widgets',
array(
'get_callback' => 'user_meta_callback',
'update_callback' => null,
'schema' => null,
)
);
}
Затем поместите ваш код с get_user_meta
в колбэк-функцию.
function user_meta_callback( $user, $field_name, $request) {
return get_user_meta( $user[ 'id' ], $field_name, true );
}
Класс WP_REST_Meta_Fields также может предоставить полезную информацию.
Обновление по комментарию автора о регистрации пользовательских маршрутов
Быстрый и грубый частичный пример. Собран из некоторых наработок, но не является рабочим примером.
Может помочь при изучении документации. Обратите внимание на связь между первым вызовом register_rest_route
, его методом GET
с колбэком my_get_callback
ниже и использованием класса WP_Rest_Request
в методе колбэка. Это поможет понять последовательность шагов. В документации, упомянутой в комментариях, вы найдете информацию о других аргументах, параметрах и, конечно же, о проверке прав через permissions_callback
.
Надеюсь, это поможет.
class My_Extend_Rest extends WP_REST_Controller {
public function __construct() {
add_action( 'rest_api_init', array( $this, 'register_routes' ) );
}//end __construct
public function register_routes() {
$version = '1';
$namespace = 'my-fancy-namespace/v' . $version;
$base = 'my-route-base';
// итоговый URL: site.com/wp-json/my-fancy-namespace/v2/my-route-base/
register_rest_route( $namespace, '/'. $base, array(
array(
'methods' => 'GET',
'callback' => array( $this, 'my_get_callback' ),
'permission_callback' => array( $this, 'key_permissions_check' ),
),
array(
'methods' => 'POST',
'callback' => array( $this, 'my_post_callback' ),
'permission_callback' => array( $this, 'key_permissions_check' ),
),)
);
$base2 = 'my-second-base';
// итоговый URL: site.com/wp-json/my-fancy-namespace/v2/my-second-base/
register_rest_route( $namespace, '/'. $base2, array(
array(
'methods' => 'GET',
'callback' => array( $this, 'my_get_callback_two' ),
'permission_callback' => array( $this, 'key_permissions_check' ),
),
array(
'methods' => 'POST',
'callback' => array( $this, 'my_post_callback_two' ),
'permission_callback' => array( $this, 'key_permissions_check' ),
),)
);
}//register_routes
public function key_permissions_check() {
//проверка прав доступа
}
public function my_get_callback( WP_REST_Request $request ) {
//работа с объектом $request
//см. методы, упомянутые в комментарии

Отлично! Именно это мне и нужно, но после некоторых тестов и размышлений, поскольку мне нужно иметь возможность отправлять данные обратно в API для обновления, я думаю, что теперь мне нужно зарегистрировать 3 пользовательских маршрута. Один для 'collapsed_widgets', один для 'selected_categories' и один для 'quick_links'.
У вас есть какие-нибудь примеры для них, пока я над ними работаю? :)

Обычно я расширяю класс WP_Rest_Controller
, так что обязательно посмотрите на него. А затем изучите класс WP_Rest_Request и его многочисленные методы.

Вы можете использовать register_meta
для регистрации метаполя и сделать его доступным в REST API:
\register_meta(
'user',
'collapsed_widgets',
[
'show_in_rest' => true,
'single' => true,
'type' => 'array',
]
);
Таким образом вы также сможете обновлять метаполе через REST API.
