WordPress è uno dei sistemi di gestione dei contenuti (CMS) più diffusi al mondo, che aiuta le piccole e grandi imprese a impostare e creare varie forme di contenuti per i siti web. Ma WordPress si è evoluto al di là del semplice supporto ai contenuti dei blog tradizionali, soprattutto grazie alla sua API REST.

L’API REST di WordPress collega WordPress ad altre applicazioni web esterne. Facilita una comunicazione più accessibile e aiuta a creare esperienze web coinvolgenti che si integrano perfettamente con la piattaforma CMS.

Questa API utilizza degli endpoint per recuperare e manipolare i contenuti di WordPress come oggetti JSON. Grazie a questi endpoint, è possibile creare, leggere, aggiornare e cancellare (CRUD) i contenuti di WordPress da remoto, senza dover accedere all’account admin di WordPress, garantendo flessibilità ed estendendo le funzionalità di WordPress al di là delle sue caratteristiche principali.

Questa guida spiega cos’è l’API REST di WordPress, i suoi vantaggi, come estende le funzionalità di base di WordPress e come creare, registrare e accedere a un endpoint personalizzato.

Prerequisiti

Per seguire questo tutorial, servono:

L’API REST di WordPress

L’API REST di WordPress è una potente interfaccia che permette di interagire con i siti WordPress in modo programmatico utilizzando i metodi HTTP standard.

Le sue funzionalità predefinite includono l’accesso e la manipolazione di vari tipi di dati di WordPress, come post, pagine, commenti, utenti e tassonomie, in un formato JSON strutturato. Si possono anche eseguire azioni CRUD in remoto sui contenuti.

Tuttavia, il vero valore dell’API REST di WordPress risiede nella sua estensibilità attraverso endpoint personalizzati. È possibile creare endpoint personalizzati per adattare l’API a esigenze specifiche, come l’integrazione di funzionalità aggiuntive, servizi di terze parti o strutture di dati uniche. Questa flessibilità permette di costruire applicazioni altamente personalizzate e ricche di funzionalità su WordPress.

Come pianificare il proprio endpoint API personalizzato

Pianificare la struttura e lo scopo dei propri endpoint personalizzati è fondamentale per uno sviluppo API efficiente. Gli endpoint personalizzati in base alle proprie esigenze specifiche richiedono un’attenta considerazione per garantire una funzionalità ottimale. La pianificazione strategica facilita la scalabilità e l’adattabilità, rendendo gli endpoint a prova di futuro per soddisfare i requisiti aziendali in evoluzione.

Pianificare gli endpoint delle API personalizzate prima dell’implementazione è di grande aiuto:

  • Chiarezza della funzione dell’endpoint: la pianificazione dell’endpoint chiarisce la funzione specifica dell’endpoint, i tipi di dati previsti e l’utilizzo.
  • Coerenza ed efficienza nello sviluppo: la pianificazione garantisce anche la coerenza nell’uso degli endpoint, dei tipi di risposta e della formattazione, migliorando l’interazione con l’API. Inoltre, conoscere lo scopo dell’API consente una corretta implementazione, riducendo i tempi di sviluppo e il rischio di errori.
  • Scalabilità e adattabilità: definire le esigenze del proprio endpoint aiuta a renderlo a prova di futuro, in modo che possa adattarsi alle mutevoli esigenze e ai requisiti aziendali senza richiedere una riprogettazione completa.
  • Sicurezza: una corretta pianificazione dell’endpoint aiuta a determinare la necessità di autenticazione per accedere o manipolare i dati. L’accesso ai contenuti tramite API a volte non richiede l’autenticazione dell’utente. Tuttavia, per i contenuti con dati sensibili o non autorizzati, è essenziale definire i requisiti di sicurezza e implementare misure come l’autorizzazione e i controlli di accesso per garantire la sicurezza dei dati.

Le sezioni pratiche che seguono spiegano come creare un endpoint personalizzato disponibile su site-domain/wp-json/custom/v2/testimonials per recuperare le testimonianze dei clienti da un sito con database WordPress.

Dopo aver inviato una richiesta, l’endpoint restituisce un oggetto JSON contenente informazioni sulle testimonianze presenti sul nostro sito WordPress, come definito nella funzione di callback.

Andiamo!

Creare un tipo di post personalizzato per l’endpoint

Per prima cosa, dobbiamo creare un tipo di post personalizzato.

  1. Andiamo all’Editor dei file del tema dalla sezione Aspetto del pannello di amministrazione di WordPress.
  2. Apriamo il file function.php del tema e aggiungiamo il seguente codice:
    function create_custom_testimonial_type() {
        register_post_type('testimonials', array(
            'labels' => array(
                'name' => 'Testimonials',
                'singular_name' => 'Testimonial',
            ),
            'public' => true,
            'has_archive' => true,
            'show_in_rest' => true, // This enables REST API support
        ));
    }
    add_action('init', 'create_custom_testimonial_type');

    Questo codice crea un tipo di post personalizzato “Testimonials” e abilita il supporto dell’API REST di WordPress ('show_in_rest' => true). Il codice add_action hook chiama la funzione di callback create_testimonial_type e la lancia durante l’esecuzione.

    Possiamo personalizzare le etichette e gli argomenti rimuovendoli o aggiungendoli per soddisfare le nostre esigenze.

  3. Clicchiamo su Aggiorna file per salvare le modifiche.
    Creare un tipo di post custom_testimonial.

    Aggiorniamo la dashboard per vedere l’opzione Testimonials aggiunta alla bacheca di WordPress.

    Schermata che mostra il nuovo tipo di post Testimonial creato
    Il tipo di post Testimonials appena creato.

  4. Creiamo un nuovo post contenente testimonianze facendo clic su Testimonials > Aggiungi nuovo post. Possiamo utilizzare il blocco Pullquote. A seconda di come presenteremo la nostra testimonianza, potremo utilizzare anche altri blocchi.

Ecco due esempi di testimonianze create con i blocchi Pullquote:

Screenshot delle due testimonianze create con il blocco pullquote
Testimonianze appena create.

Registrare un endpoint personalizzato in WordPress

La registrazione di un endpoint personalizzato lo rende disponibile all’uso tramite l’API REST. Questo comporta l’utilizzo della funzione register_rest_route, la chiamata al metodo rest_api_init e la creazione di un metodo di callback che verrà invocato quando il percorso verrà chiamato.

Incolliamo il seguente codice nel file function.php del tema:

add_action( 'rest_api_init', 'register_testimonial_rest_route' );
 
function register_testimonial_rest_route(){
	register_rest_route(
		'custom/v2',
		'/testimonials',
		array(
			'methods' => 'GET',
			'callback' => 'get_testimonials',
		)
	);
}

Questo register_rest_route() accetta tre parametri:

  • Route Namespace ($route_namespace): questa è la prima parte del segmento URL e deve seguire lo schema vendor/numero di versione. Il vendor rappresenta il fornitore o lo slug del tema. Il namespace aiuta a differenziare gli endpoint e aiuta i clienti a contattare l’assistenza per l’endpoint personalizzato. Questo tutorial utilizza il namespace custom/v2.
  • L’URL di base ($route): segue il namespace ed è un URL mappato su un metodo. Possiamo registrare più di un singolo endpoint per il nostro percorso. Per questo tutorial, utilizzeremo la route /testimonials, che indica all’endpoint di recuperare le testimonianze.
  • Opzioni dell’endpoint ($args): si tratta di un array contenente il metodo HTTP utilizzato per chiamare la route e la funzione di callback che l’endpoint invocherà quando invierà una richiesta. Analizzeremo questa funzione di callback nella prossima sezione.

Infine, prendiamo nota dell’indirizzo dell’endpoint. Il formato di un endpoint è site-address/wp-json/namespace/route. Quindi, in questo esempio, l’endpoint sarà https://www.staging.kidspartysanctuary.co.uk/wp-json/custom/v2/testimonials.

Implementare la funzione di callback per l’endpoint

Dopo aver creato il tipo di post personalizzato e aver registrato l’endpoint personalizzato, il passo successivo è scrivere la funzione di callback. Questa funzione di callback viene invocata ogni volta che si accede all’endpoint.

  1. Dichiariamo la funzione di callback get_testimonials utilizzando il codice sottostante:
    function get_testimonials(){
    
    }
  2. Inizializziamo un array di testimonial vuoto per memorizzare i dati delle testimonianza WordPress recuperate:
    $testimonials = array();
  3. Impostiamo un array chiamato $args con i parametri di query per una chiamata a WP_Query chiamata.
    $args = array(
        'post_type' => 'testimonials', //specifies you want to query the custom post type   
    'testimonial',
        'nopaging' => true,  // no pagination, but retrieve all testimonials at once
    ),
  4. Creiamo un’istanza della classe WP_Query che riceve l’array $args, esegue una query basata sui parametri specificati e memorizza i risultati della query WordPress nella variabile $query.
    $query = new WP_Query($args)
  5. Scriviamo un’istruzione condizionale per verificare se ci sono post di testimonianze. Quindi, creiamo un ciclo while per iterare i post e restituire i post title e content delle testimonianze.
    if ( $query->have_posts() ) {
            while ( $query->have_posts() ) {
                $query->the_post();
                $testimonial_data = array( /*an array that stores the title 
    and content of every post*/
                'title' => get_the_title(),
                    'content' => get_the_content(),
                    // Add other fields as needed
                );
                $testimonials[] = $testimonial_data; 
            }
            wp_reset_postdata(); /* restores $post 
    global to the current post to avoid any conflicts in subsequent queries*/
        }
        return rest_ensure_response( $testimonials ); /*ensures response is 
    correctly set as a response object for consistency*/

    Ecco il codice completo:

    function get_testimonials() {
    $testimonials = array();
    $args = array(
        'post_type' => 'testimonials',
        'nopaging' => true,
    );
    $query = new WP_Query( $args );
    if ( $query->have_posts() ) {
        while ( $query->have_posts() ) {
            $query->the_post();
            $testimonial_data = array(
                'title' => get_the_title(),
                'content' => get_the_content(),
                // Add other fields as needed
            );
            $testimonials[] = $testimonial_data;
        }
        wp_reset_postdata();
    }
    return rest_ensure_response( $testimonials );
    }
  6. Testiamo l’endpoint utilizzando Postman per verificare se possiamo accedere ai nostri dati.
    Schermata di una chiamata API Postman andata a buon fine all'endpoint personalizzato testimonial
    Postman mostra una risposta di successo.

    Possiamo eseguire il test anche utilizzando un browser. Accediamo all’endpoint inserendo l’URL site-domain/wp-json/custom/v2/testimonials nella barra degli indirizzi del browser.

    Schermata dell'accesso corretto all'endpoint in un browser web
    Il risultato del browser che appare quando si accede all’endpoint.

Riepilogo

Questo tutorial ha spiegato come implementare un endpoint personalizzato dell’API di WordPress. Per consentire agli utenti di accedere e interagire con i dati del database di WordPress, basta solo registrare il percorso che implementa una funzione di callback.

Volete sapere come ottimizzare WordPress per la vostra attività? Kinsta offre numerose opzioni avanzate nell’ambito del nostro servizio di hosting WordPress gestito per aiutarvi a soddisfare le vostre esigenze aziendali. Un’opzione importante è il plugin Kinsta MU (must-use), che gestisce e implementa il caching per il vostro sito per ridurre la latenza e migliorare le prestazioni. Provate Kinsta oggi stesso!

Cosa ne pensate dello sviluppo di endpoint API WordPress personalizzati? Ne avete mai progettato qualcuno? Ci piacerebbe conoscere le vostre esperienze. Condividetele con noi nella sezione commenti qui sotto.

Jeremy Holcombe Kinsta

Content & Marketing Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems ;).