{"id":1934,"date":"2026-07-16T10:13:55","date_gmt":"2026-07-16T08:13:55","guid":{"rendered":"https:\/\/studioimmens.com\/rest-api-wordpress-per-sviluppatori\/"},"modified":"2026-07-16T10:13:55","modified_gmt":"2026-07-16T08:13:55","slug":"rest-api-wordpress-per-sviluppatori","status":"publish","type":"post","link":"https:\/\/studioimmens.com\/en\/rest-api-wordpress-per-sviluppatori\/","title":{"rendered":"Rest API WordPress per sviluppatori"},"content":{"rendered":"<h2>Fondamenti della REST API di WordPress<\/h2>\n<p>La REST API di WordPress \u00e8 un&#8217;interfaccia programmatica che permette a qualsiasi applicazione esterna di interagire con il sito WordPress tramite richieste HTTP standard (GET, POST, PUT, DELETE). Introdotta ufficialmente in WordPress 4.7, la REST API ha trasformato WordPress da semplice CMS a piattaforma di back-end per applicazioni moderne. I dati vengono scambiati in formato JSON, leggibile da qualsiasi linguaggio di programmazione e framework frontend.<\/p>\n<p>Il funzionamento si basa su endpoint (URL) organizzati in route e namespace. Ogni risorsa di WordPress (post, pagina, utente, commento, media) ha un proprio endpoint. La struttura tipica \u00e8: <code>\/wp-json\/wp\/v2\/posts<\/code> dove <code>wp\/v2<\/code> \u00e8 il namespace predefinito e <code>posts<\/code> \u00e8 la risorsa. La risposta JSON include i dati richiesti pi\u00f9 metadati utili come link correlati, informazioni di paginazione e dettagli sull&#8217;autore.<\/p>\n<h2>Endpoint predefiniti di WordPress<\/h2>\n<p>WordPress espone endpoint predefiniti per tutte le risorse principali. Endpoint dei contenuti: <code>\/wp\/v2\/posts<\/code> (articoli), <code>\/wp\/v2\/pages<\/code> (pagine), <code>\/wp\/v2\/media<\/code> (file multimediali). Endpoint degli utenti: <code>\/wp\/v2\/users<\/code> (utenti registrati), <code>\/wp\/v2\/users\/me<\/code> (utente autenticato). Endpoint delle tassonomie: <code>\/wp\/v2\/categories<\/code> (categorie), <code>\/wp\/v2\/tags<\/code> (tag). Altri endpoint: <code>\/wp\/v2\/comments<\/code> (commenti), <code>\/wp\/v2\/settings<\/code> (impostazioni sito, richiede autenticazione), <code>\/wp\/v2\/types<\/code> (tipi di contenuto registrati), <code>\/wp\/v2\/statuses<\/code> (stati degli articoli). Ogni endpoint accetta parametri di query per filtrare, ordinare e impaginare i risultati.<\/p>\n<h2>Metodi di autenticazione<\/h2>\n<p>La REST API supporta diversi metodi di autenticazione a seconda del caso d&#8217;uso.<\/p>\n<h3>Application Passwords<\/h3>\n<p>Introdotto in WordPress 5.6, \u00e8 il metodo pi\u00f9 semplice e sicuro per autenticare applicazioni esterne. L&#8217;utente genera una password specifica dall&#8217;area amministrativa (Utenti \u2192 Profilo \u2192 Application Passwords) e l&#8217;applicazione la usa con Basic Auth. Supporta la revoca individuale senza cambiare la password principale.<\/p>\n<h3>OAuth<\/h3>\n<p>OAuth 1.0a permette a terze parti di accedere all&#8217;API senza condividere le credenziali. Richiede un plugin (es. REST API OAuth) e un processo a tre passaggi: richiesta token, autorizzazione utente, scambio token. Ideale per applicazioni che agiscono per conto di utenti diversi.<\/p>\n<h3>JWT (JSON Web Token)<\/h3>\n<p>Il plugin JWT Authentication for WP REST API implementa l&#8217;autenticazione via token JWT. L&#8217;utente invia username e password a un endpoint di login, riceve un token JWT, e lo usa nelle richieste successive nell&#8217;header <code>Authorization: Bearer &lt;token&gt;<\/code>. I token hanno una scadenza configurabile e possono essere invalidati lato server. Popolare per applicazioni headless e mobile app.<\/p>\n<h2>Creare endpoint personalizzati<\/h2>\n<p>Per estendere la REST API oltre le risorse predefinite, usa <code>register_rest_route()<\/code> nel tuo plugin o in functions.php. La registrazione richiede: namespace (prefisso unico, es. <code>mio-plugin\/v1<\/code>), route (es. <code>\/prodotti<\/code>), e un array di opzioni che include metodi HTTP ammessi, callback di risposta, callback di autorizzazione e argomenti. Ecco uno scheletro base: <code>add_action('rest_api_init', function() { register_rest_route('mio-plugin\/v1', '\/prodotti\/', array( 'methods' =&gt; 'GET', 'callback' =&gt; 'mia_funzione_callback', 'permission_callback' =&gt; function() { return current_user_can('edit_posts'); } )); });<\/code> Il callback riceve un oggetto <code>WP_REST_Request<\/code> che contiene parametri, header e corpo della richiesta, e deve restituire un oggetto <code>WP_REST_Response<\/code> o un <code>WP_Error<\/code>.<\/p>\n<h2>Operazioni CRUD via API<\/h2>\n<p>La REST API supporta le quattro operazioni CRUD (Create, Read, Update, Delete). Per leggere articoli: GET <code>\/wp\/v2\/posts<\/code> (lista) o <code>\/wp\/v2\/posts\/123<\/code> (singolo). Per creare un articolo: POST <code>\/wp\/v2\/posts<\/code> con body JSON contenente title, content, status, categories. Per aggiornare: PUT\/PATCH <code>\/wp\/v2\/posts\/123<\/code> con i campi da modificare. Per eliminare: DELETE <code>\/wp\/v2\/posts\/123<\/code>. Tutte le operazioni di scrittura richiedono autenticazione e permessi adeguati. La risposta include l&#8217;oggetto JSON completo della risorsa dopo l&#8217;operazione, utile per confermare il successo e aggiornare lo stato locale.<\/p>\n<h2>Parametri di query per la ricerca<\/h2>\n<p>Gli endpoint di lista accettano parametri di query per filtrare e ordinare i risultati. <code>per_page<\/code> (1-100): numero di elementi per pagina; <code>page<\/code>: numero di pagina; <code>search<\/code>: termine di ricerca; <code>orderby<\/code>: campo per ordinare (date, title, slug, modified, author, id); <code>order<\/code>: asc o desc; <code>categories<\/code>: ID categoria per filtrare; <code>tags<\/code>: ID tag per filtrare; <code>slug<\/code>: slug esatto; <code>after<\/code> e <code>before<\/code>: filtro per data in formato ISO 8601; <code>meta_key<\/code> e <code>meta_value<\/code>: filtro per metadati; <code>status<\/code>: stato del post (publish, draft, pending, private). Combinando questi parametri, puoi costruire query complesse senza scrivere una riga di PHP.<\/p>\n<h2>Formattazione di richieste e risposte<\/h2>\n<p>Le richieste GET non hanno body: i parametri vanno come query string. Le richieste POST, PUT e PATCH inviano il body in JSON con header <code>Content-Type: application\/json<\/code>. La risposta include sempre: status code HTTP (200 successo, 201 creato, 400 errore validazione, 401 non autenticato, 403 non autorizzato, 404 non trovato), headers con informazioni di paginazione (X-WP-Total, X-WP-TotalPages), corpo JSON con i dati richiesti. WordPress include anche link HAL (<code>_links<\/code>) per navigare le relazioni tra risorse. Per formattare la risposta personalizzata, usa <code>rest_ensure_response()<\/code> che converte array e oggetti in WP_REST_Response validi.<\/p>\n<h2>WordPress headless con React e Vue<\/h2>\n<p>La REST API \u00e8 il fondamento dell&#8217;architettura headless, dove WordPress funge solo da back-end e il frontend \u00e8 costruito con framework JavaScript come React, Vue.js o Next.js. Il flusso tipico: il frontend fa una GET a <code>\/wp\/v2\/posts<\/code> per ottenere gli articoli, usa i dati JSON per renderizzare il layout, e per le operazioni di scrittura usa POST\/PUT\/DELETE con autenticazione. Per un progetto headless, devi: abilitare i permalink (non in modalit\u00e0 Plain), configurare CORS se frontend e back-end sono su domini diversi, rimuovere le intestazioni X-WP-* non necessarie, e ottimizzare la risposta escludendo campi superflui con <code>_fields<\/code>. Vantaggi dell&#8217;architettura headless: separazione completa tra back-end e frontend, performance migliori (il frontend \u00e8 HTML statico generato da un framework), sicurezza (il database non \u00e8 esposto pubblicamente), e flessibilit\u00e0 (puoi cambiare frontend senza toccare WordPress).<\/p>\n<h2>Conclusioni<\/h2>\n<p>La REST API di WordPress \u00e8 uno strumento potentissimo che apre infinite possibilit\u00e0 di integrazione e sviluppo. Dalla semplice lettura di articoli da un&#8217;app mobile alla complessa architettura headless con React, la REST API standardizza l&#8217;accesso ai dati di WordPress in modo elegante e prevedibile. Imparare a usare gli endpoint predefiniti, creare route personalizzate e gestire l&#8217;autenticazione ti permette di trasformare WordPress in un vero e proprio back-end API-first, adatto a qualsiasi esigenza di sviluppo moderno.<\/p>","protected":false},"excerpt":{"rendered":"<p>Fondamenti della REST API di WordPress La REST API di WordPress \u00e8 un&#8217;interfaccia programmatica che permette a qualsiasi applicazione esterna di interagire con il sito WordPress tramite richieste HTTP standard (GET, POST, PUT, DELETE). Introdotta ufficialmente in WordPress 4.7, la REST API ha trasformato WordPress da semplice CMS a piattaforma di back-end per applicazioni moderne. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2061,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_gspb_post_css":"","ai_primary_source":"Studio Immens Blog","visibility_scope":"both","ai_summary":"Fondamenti della REST API di WordPress La REST API di WordPress \u00e8 un'interfaccia programmatica che permette a qualsiasi applicazione esterna di interagire con il sito WordPress tramite richieste HTTP standard (GET, POST, PUT, DELETE). Introdotta ufficialmente in WordPress 4.7, la REST API ha tras...","ai_intent":"informative","ai_related_resources":"","ai_priority":5,"ai_entity_type":"Article","ai_is_based_on":"https:\/\/blog.studioimmens.com\/rest-api-wordpress-per-sviluppatori\/","ai_citations":"","ai_mentions":"","ai_speakable_selector":"","ai_chunk_hints":"Rest, API, WordPress, per","footnotes":""},"categories":[40],"tags":[277],"ai_visibility":[],"class_list":["post-1934","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sviluppo-web","tag-custom-post-type"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/studioimmens.com\/en\/wp-json\/wp\/v2\/posts\/1934","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/studioimmens.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/studioimmens.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/studioimmens.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/studioimmens.com\/en\/wp-json\/wp\/v2\/comments?post=1934"}],"version-history":[{"count":0,"href":"https:\/\/studioimmens.com\/en\/wp-json\/wp\/v2\/posts\/1934\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/studioimmens.com\/en\/wp-json\/wp\/v2\/media\/2061"}],"wp:attachment":[{"href":"https:\/\/studioimmens.com\/en\/wp-json\/wp\/v2\/media?parent=1934"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/studioimmens.com\/en\/wp-json\/wp\/v2\/categories?post=1934"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/studioimmens.com\/en\/wp-json\/wp\/v2\/tags?post=1934"},{"taxonomy":"ai_visibility","embeddable":true,"href":"https:\/\/studioimmens.com\/en\/wp-json\/wp\/v2\/ai_visibility?post=1934"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}