Ottenere i metadati utente dall'API REST di WordPress
Sto lavorando a un progetto utilizzando l'API REST di WordPress insieme a VueJS e Axios (per le chiamate AJAX per ottenere/inviare dati al sito). Tuttavia, ho bisogno di accedere ai metadati di un utente come 'collapsed_widgets' dall'API REST, ma i dati che ricevo dalla risposta GET sono:
"meta": [],
Questo succede per TUTTI gli utenti, il che è strano perché dovrebbero esserci dati all'interno.
Esiste qualche modo per ottenere i metadati degli utenti?

Guarda register_rest_field()
per registrare meta con la 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,
)
);
}
E poi metti il tuo codice get_user_meta
nel callback.
function user_meta_callback( $user, $field_name, $request) {
return get_user_meta( $user[ 'id' ], $field_name, true );
}
La classe WP_REST_Meta_Fields può fornire ulteriori informazioni utili.
Aggiornamento per il commento dell'OP sulla registrazione di route personalizzate
Un esempio parziale rapido e sporco. Ricavato da alcune cose che ho davanti, ma non è un esempio funzionante.
Può aiutare mentre leggi la documentazione. Segui la connessione tra il primo register_rest_route
, il suo metodo GET
callback, my_get_callback
, sotto, e l'uso del metodo callback della classe WP_Rest_Request
. Dovrebbe aiutare a tracciare una connessione dei passaggi. La documentazione che ho menzionato nei commenti approfondirà altri argomenti, parametri, ecc., e ovviamente la roba permissions_callback
.
Spero sia utile.
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';
// quindi, 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';
// quindi, 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() {
//fai il controllo dei permessi
}
public function my_get_callback( WP_REST_Request $request ) {
//fai operazioni con $request
//vedi i metodi menzionati nel commento

Ok, perfetto! Era esattamente ciò di cui avevo bisogno, ma dopo alcuni test e riflessioni, dato che devo poter inviare dati all'API per gli aggiornamenti, penso che ora dovrò registrare 3 route personalizzate. Una per 'collapsed_widgets', una per 'selected_categories' e una per 'quick_links'.
Hai per caso qualche esempio su cui lavorare mentre le sto implementando? :)

Di solito estendo la classe WP_Rest_Controller
, quindi dai sicuramente un'occhiata a quella. E poi controlla la classe WP_Rest_Request e i suoi numerosi metodi.

Puoi usare register_meta
per registrare il meta e renderlo accessibile nell'API REST:
\register_meta(
'user',
'collapsed_widgets',
[
'show_in_rest' => true,
'single' => true,
'type' => 'array',
]
);
In questo modo puoi anche aggiornare il campo meta tramite l'API REST.
