Ottenere i metadati utente dall'API REST di WordPress

14 giu 2017, 22:53:49
Visualizzazioni: 14.5K
Voti: 8

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?

1
Commenti

Solo per informazione. Penso che questo sia stato RIMOSSO dall'API poiché potresti esporre alcuni dati sensibili se i campi meta utente venissero visualizzati automaticamente. Vorrei che ci fosse un modo semplice per whitelistare i meta_fields, senza doversi preoccupare di creare una callback per ogni campo che vuoi aggiungere.

Armstrongest Armstrongest
7 dic 2017 03:04:29
Tutte le risposte alla domanda 2
3

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
15 giu 2017 01:45:41
Commenti

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? :)

Zach Tackett Zach Tackett
15 giu 2017 18:33:52

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.

hwl hwl
15 giu 2017 18:55:24

Ho aggiunto un blocco di codice con alcuni esempi per contestualizzare la registrazione di route personalizzate. Spero possa aiutare!

hwl hwl
15 giu 2017 19:30:42
0

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.

27 ago 2023 12:01:39