Come usare le API su WordPress, Guida rapida

Indice dei contenuti

Condividi con:

Introduzione

Puoi usare la WordPress REST API internamente sul tuo sito per recuperare ciò che vuoi, ad esempio: il titolo di un post. Questo è utile quando vuoi accedere alle informazioni dal tuo sito in modo dinamico, usando JavaScript o altre chiamate PHP (server-to-server).

Utilizzo dell’API REST per recuperare internamente il titolo di un post

Concettualmente qualsiasi API nasce per rispondere e restituire dei dati. Per farlo dobbiamo chiamare l’endpoint (ossia un URL) al quale passare un argomento. Nel caso di WP gli endpoint standard, per il recupero di dati dai post, è così strutturato:


/wp-json/wp/v2/posts/{ID}

Dove {ID} rappresenta l’ID del post che vuoi recuperare.

Ad esempio, copia e incolla questo codice PHP all’interno del file functions.php del tuo tema child, o di un plugin, per usare wp_remote_get per inviare una richiesta. Questo codice di esempio recupera il titolo del post con ID 123:


$response = wp_remote_get( site_url( '/wp-json/wp/v2/posts/123' ) );
if ( is_wp_error( $response ) ) {
    return; // Error handling
}
$body = wp_remote_retrieve_body( $response );
$data = json_decode( $body );

if ( isset( $data->title->rendered ) ) {
    $title = $data->title->rendered;
    echo $title;
}

Siccome stiamo facendo una chiamata INTERNA al nostro sito, usiamo la funzione site_url per dire a wp_remote_get di lanciare la nostra richiesta all’endpoint, che sarà una stringa del tipo: https://mywebsite.com/wp-json/wp/v2/posts/123

È richiesta l’autenticazione?

  • Pubblico vs Privato: Per recuperare post pubblici, non è richiesta l’autenticazione. Se il post è pubblico, puoi usare la REST API senza dover autenticarti.
  • Post privati o protetti: se hai bisogno di recuperare post privati o altri dati protetti, devi autenticarti. Puoi usare vari metodi di autenticazione come Autenticazione di base , Autenticazione tramite cookie o OAuth.

Per le richieste interne (ad esempio, se il codice è già in esecuzione sul tuo tema o su un plugin installato, quindi come parte del tuo WordPress), potrebbe non essere necessaria un’autenticazione speciale, poiché si sta già lavorando in un contesto autenticato.

XML-RPC disabilitato: implicazioni

  • API REST e XML-RPC: sono due metodi diversi per accedere ai dati di WordPress. Se XML-RPC è disabilitato, API REST continuerà a funzionare senza problemi, poiché sono indipendenti.
  • Scopi diversi: XML-RPC è spesso utilizzato per connettersi al sito da applicazioni esterne (come l’app mobile di WordPress), ma disabilitarlo non influisce sulla REST API. Se l’accesso tramite XML-RPC è stato disabilitato per motivi di sicurezza, di solito si preferisce la REST API, poiché è più moderna e generalmente più sicura.

Quindi, se hai XML-RPC disabilitato, non ci saranno conseguenze con l’utilizzo della REST API per recuperare dati internamente sul tuo sito. La REST API continuerà a funzionare normalmente e ti consentirà di recuperare i titoli dei post e altre informazioni.

Se vuoi iniziare a lavorare con gli endpoint predefiniti di WP, ti suggerisco di iniziare leggendo la documentazione ufficiale che trovi qui: https://developer.wordpress.org/rest-api/

Hai bisogno di creare il tuo endpoint personalizzato? Cominciamo:

Per ricevere un payload personalizzato da qualsiasi sito web WordPress è necessario registrare il proprio endpoint su di esso .

Nel mio caso, di solito inserisco il codice all’interno di un plugin personalizzato, ma puoi ottenere lo stesso risultato inserendo il codice all’interno del tuo tema child.

Ad esempio : /wp-content/themes/your-child-theme/api/api_v1.php

Nota: ricordati di includere questo file nel tuo functions.php

Ora facciamo che hai un CPT custom chiamato “books” sul sito 1, e che dal sito 2 desideri recuperare i dati dei “books” presenti sul sito 1. Come si fa?

Passaggio 1: registra l’endpoint personalizzato sul sito 1

 


//Register my custom endpoints
add_action('rest_api_init', 'register_custom_endpoints');
function register_custom_endpoints() {

$api_endpoint_base = 'books/v1';

    //get-item-title
    register_rest_route($api_endpoint_base, '/get-item-title/', array(
        'methods' => 'GET',
        'callback' => 'fn_get_item_title',
        'args' => array(
            'book_id' => array(
            'required' => true,
            'sanitize_callback' => 'sanitize_text_field',
        )
    ),
        'permission_callback' => '__return_true', // Set the authorization as public
    ));
}

Passaggio 2: crea la funzione callback sul sito 1


// get-item-title callback function
function fn_get_item_title($request) {
    // Check security
    $api_key = "ABCDEF1234567890";
    $api_key_request = $request->get_header('X-API-KEY');
    if ($api_key !== $api_key_request) {
        return new WP_Error('invalid_api_key', 'Invalid API Key', array('status' => 401));
    }

    // Get data from request
    $book_id= urldecode($request->get_param('book_id'));
    // Your query
    global $wpdb;
    $book_title = $wpdb->get_var( $wpdb->prepare("SELECT title FROM $wpdb->posts WHERE post_type='%s' AND id='%s'", array('books', $book_id ) ));
    // Response
    if ($book_title) {
        $response = array(
            'code' => 200,
            'message' => 'success',
            'book_title' => $book_title
            );
        
        // Return JSON response
        return rest_ensure_response($response);
        
    } else {
        new WP_Error('error', "No book found with id $book_id", array('status' => 401));
    }
}  

Passaggio 3: testa la chiamata API (io utilizzo Insomnia che è gratuito e facilissimo da usare)

URL di query [GET]

Aggiungi 1 argomento:
  • book_id -> 987
Aggiungi intestazioni:
  • Tipo di contenuto -> applicazione/json
  • X-API-KEY -> ABCDEF1234567890

Cliccando su “Invia” dovresti ottenere la risposta JSON nella scheda “Preview”.

Passaggio 4: chiama la tua API (dallo stesso sito web o dal sito 2) con una funzione


function get_book_title() {
    // API URL
    $api_url = 'https://www.mywebsite.com/wp-json/books/v1/get-item-title';

    // Add params
    $book_id = 987; //the post_id
    $api_url_with_params = $api_url . '?book_id=' . $book_id;

    // opzioni della richiesta HTTP
    $headers = array(
        'Content-Type' => 'application/json',
        'X-API-KEY' => 'ABCDEF1234567890',
    );
    
    $args = array(
        'method' => 'GET', // (GET, POST, PUT, DELETE, etc.)
        'timeout' => 45,   // Request Timeout
        'headers' => $headers, // Add the headers
    );

    // API call
    $response = wp_remote_request($api_url, $args);

    // Check errors
    if (is_wp_error($response)) {
        
        //handle errors here
        
    } else {
        // Get the JSON response payload
        $body = wp_remote_retrieve_body($response);

        // Decode the response
        $data = json_decode($body);

        // Item title
        echo $data->book_title;
    }
}

Ovviamente questo è solo un esempio. Per testarlo rapidamente, cambia semplicemente il tipo di post da ‘book’ a ‘post’ o ‘page’ e cambia il valore $book_id con uno esistente in “mywebsite.com”.

Da questo esempio dovresti essere in grado di costruire qualsiasi API-REST di cui hai bisogno. Puoi chiamarla dallo stesso sito web (internamente) o da un altro (esternamente).

Hardweb.it

Quanto era utile questo post?

Clicca su una stella per valutarla!

Valutazione media / 5. Conteggio dei voti:

Nessun voto finora! Sii il primo a valutare questo post.

Cerchi un servizio di assistenza e manutenzione professionale?
E' un servizio fondamentale per il tuo sito web WordPress / WooCommerce!