Obținerea metadatelor utilizatorului din WP REST API
Lucrez la un proiect folosind WordPress REST API și VueJS împreună cu Axios (pentru apelurile AJAX pentru a prelua/trimite date înapoi pe site). Totuși, trebuie să pot accesa metadatele unui utilizator, cum ar fi 'collapsed_widgets' din REST API, dar datele pe care le primesc în răspunsul GET sunt:
"meta": [],
Aceasta se întâmplă pentru TOȚI utilizatorii, ceea ce este ciudat deoarece ar trebui să existe date acolo.
Există vreo metodă prin care să obțin metadatele utilizatorilor?

Aruncă o privire la register_rest_field()
pentru a înregistra meta cu 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,
)
);
}
Apoi puneți partea cu get_user_meta
în callback.
function user_meta_callback( $user, $field_name, $request) {
return get_user_meta( $user[ 'id' ], $field_name, true );
}
Clasa WP_REST_Meta_Fields poate oferi și mai multe informații utile.
Actualizare conform comentariului OP despre înregistrarea rutelor personalizate
Un exemplu parțial rapid și simplist. Asamblat din câteva lucruri aflate în fața mea, dar nu este un exemplu funcțional.
Poate ajuta în timp ce citești documentația. Urmărește legătura dintre primul register_rest_route
, callback-ul metodei sale GET
, my_get_callback
, de mai jos, și utilizarea clasei WP_Rest_Request
în metoda de callback. Ar trebui să ajute la înțelegerea conexiunii dintre pași. Documentația menționată în comentarii va acoperi alte argumente, parametri etc., și desigur chestiile legate de permissions_callback
.
Sper să ajute.
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';
// deci, 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';
// deci, 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() {
//fă verificări de permisiuni
}
public function my_get_callback( WP_REST_Request $request ) {
//fă ceva cu $request
//vezi metodele menționate în comentariu

Ok, excelent! Exact asta aveam nevoie, dar după ceva testare și gândire, pentru că trebuie să pot trimite date înapoi la API pentru actualizare, cred că acum voi avea nevoie să înregistrez 3 rute personalizate. Una pentru 'collapsed_widgets', una pentru 'selected_categories' și una pentru 'quick_links'.
Ai cumva niște exemple pentru acestea în timp ce lucrez la ele? :)

De obicei extind clasa WP_Rest_Controller
, așa că aruncă o privire la asta cu siguranță. Și apoi verifică clasa WP_Rest_Request și numeroasele ei metode.

Puteți utiliza register_meta
pentru a înregistra metadatele și a le face accesibile în API-ul REST:
\register_meta(
'user',
'collapsed_widgets',
[
'show_in_rest' => true,
'single' => true,
'type' => 'array',
]
);
În acest fel, puteți actualiza și câmpul de metadate prin intermediul API-ului REST.
