Obținerea metadatelor utilizatorului din WP REST API

14 iun. 2017, 22:53:49
Vizualizări: 14.5K
Voturi: 8

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?

1
Comentarii

Doar pentru informare. Cred că acest lucru a fost ELIMINAT din API, deoarece ai putea expune unele date sensibile dacă câmpurile meta ale utilizatorului sunt afișate automat. Mi-aș dori să existe o metodă simplă de a adăuga câmpuri meta pe o listă albă, fără să fie nevoie să creezi un callback pentru fiecare câmp pe care vrei să îl adaugi.

Armstrongest Armstrongest
7 dec. 2017 03:04:29
Toate răspunsurile la întrebare 2
3

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
15 iun. 2017 01:45:41
Comentarii

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

Zach Tackett Zach Tackett
15 iun. 2017 18:33:52

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.

hwl hwl
15 iun. 2017 18:55:24

Am adăugat un bloc de cod care are câteva exemple pentru context la înregistrarea rutelor personalizate. Sper să te ajute!

hwl hwl
15 iun. 2017 19:30:42
0

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.

27 aug. 2023 12:01:39