Riassunto AI
WPForms 1.9.9 ha introdotto un'API REST di sola lettura basata sull'API Abilities di WordPress. Puoi elencare i moduli, recuperare la configurazione del modulo, recuperare e cercare le voci e ottenere statistiche sui moduli da qualsiasi client HTTP, dalla riga di comando, dal tuo codice PHP o da assistenti AI che parlano il Model Context Protocol (MCP).
Se hai cercato "WPForms REST API" e sei arrivato qui, è questa. Non esiste un'API REST separata; l'integrazione con l'API Abilities è il modo in cui WPForms espone i suoi dati tramite HTTP.
Cos'è l'API Abilities
L'API Abilities è una funzionalità principale di WordPress aggiunta in WordPress 6.9. Consente ai plugin di dichiarare capacità individuali (chiamate abilities) con un nome, uno schema di input, uno schema di output e una funzione di callback per i permessi. WordPress espone quindi ogni ability registrata automaticamente tramite l'API REST all'indirizzo /wp-json/wp-abilities/v1/abilities/<ability>/run e ai client AI compatibili con MCP tramite il plugin ufficiale dell'adattatore MCP.
WPForms registra un set di abilities di sola lettura sotto lo spazio dei nomi wpforms/. Ogni ability esegue gli stessi controlli di capacità di WPForms utilizzati nell'area di amministrazione (wpforms_current_user_can()), quindi le superfici REST e MCP ereditano il modello di permessi esistente anziché introdurne uno nuovo.
Requisiti:
- WordPress 6.9 o versione successiva
- WPForms Lite o Pro 1.9.9 o versione successiva (alcune abilities sono solo Pro; vedere la tabella di riferimento di seguito)
- Per i client MCP: il plugin wordpress/mcp-adapter
Chiamare un'Ability
Ogni ability può essere invocata tramite due trasporti. Il risultato è identico; scegli quello che si adatta all'ambiente di chiamata.
API REST
Invia una richiesta GET autenticata a /wp-json/wp-abilities/v1/abilities/<ability>/run. Poiché ogni ability di WPForms è di sola lettura, viene accettato solo GET; POST restituisce 405 Method Not Allowed.
Nota: Passa i parametri come campi della stringa di query tra parentesi sotto la chiave input, ad esempio input[limit]=10&input[status]=publish. Codifica in URL le parentesi se il tuo client non lo fa automaticamente (%5B per [, %5D per ]).
curl "$WP_SITE/wp-json/wp-abilities/v1/abilities/wpforms/list-forms/run?input%5Blimit%5D=10&input%5Bstatus%5D=publish"
PHP
Da qualsiasi plugin, tema o codice personalizzato che viene eseguito dopo che l'azione wp_abilities_api_init è stata attivata, recupera l'ability con wp_get_ability() e chiama il suo metodo execute(). Passa l'input come array associativo di parametri (gli stessi nomi elencati nella tabella dei parametri di ogni ability).
$ability = wp_get_ability( 'wpforms/list-forms' );
if ( $ability ) {
$result = $ability->execute(
[
'limit' => 10,
'status' => 'publish',
]
);
if ( is_wp_error( $result ) ) {
// Handle error.
return;
}
// $result['forms'] array of form summaries
// $result['total'] total count (integer)
}
Autenticazione
Il trasporto REST utilizza l'autenticazione standard di WordPress. Il metodo consigliato per i client esterni sono le Password per applicazioni, che sono integrate nel core di WordPress e non richiedono plugin aggiuntivi.
Generazione di una Password per applicazioni
- Accedi come utente WordPress i cui permessi devono essere utilizzati per le chiamate.
- Vai su Utenti » Profilo e scorri fino alla sezione Password per applicazioni.
- Inserisci un nome per l'integrazione e fai clic su Aggiungi nuova password per l'applicazione.
- Copia la password generata. WordPress la mostra solo una volta.
Per un riferimento più approfondito, inclusi gli endpoint REST per la gestione programmatica delle password per le applicazioni, consulta la Guida all'integrazione delle password per le applicazioni del team principale di WordPress.
Invio delle credenziali
Passa il nome utente e la password dell'applicazione come autenticazione HTTP Basic ad ogni richiesta.
Con curl
Imposta l'URL del tuo sito come variabile d'ambiente in modo che gli esempi in questo documento siano eseguibili così come sono:
export WP_SITE="https://your-wordpress-site.com"
Quindi aggiungi il flag -u a ogni comando curl. Il valore del flag è il tuo nome utente, seguito da due punti, seguito dalla tua password dell'applicazione (senza spazi).
Con Postman, Insomnia o altri client
Imposta il tipo Auth della richiesta su Basic Auth e fornisci il tuo nome utente e la password dell'applicazione. Il client gestisce la codifica per te.
Impostazione manuale dell'intestazione
Invia le tue credenziali come intestazione Authorization codificata in base64:
Combina il tuo nome utente e la password dell'applicazione in un'unica stringa, separati da due punti (senza spazi), e codifica il risultato in base64 utilizzando uno strumento a tua scelta (comando base64, codificatore online o libreria standard del tuo linguaggio). Invia il valore codificato ad ogni richiesta come intestazione Authorization, nel formato Authorization: Basic <encoded>.
Gli esempi di richiesta nel resto di questo documento omettono il flag di autenticazione per leggibilità. Aggiungi il flag -u (o l'intestazione Authorization) ad ogni richiesta reale, altrimenti l'API restituirà 401 Unauthorized.
Permessi
Ogni abilità controlla una specifica capacità di WPForms prima dell'esecuzione. I controlli falliti restituiscono un WP_Error con stato HTTP 403.
| Abilità | Capacità |
|---|---|
wpforms/list-forms | visualizza_moduli |
wpforms/get-form | visualizza_modulo_singolo |
wpforms/get-form-stats (Lite) | visualizza_modulo_singolo |
wpforms/get-form-stats (Pro) | visualizza_invii_modulo_singolo |
wpforms/get-entry-summaries | visualizza_invii_modulo_singolo |
wpforms/get-entry | visualizza_invio_singolo |
wpforms/search-entries (con form_id) | visualizza_invii_modulo_singolo |
wpforms/search-entries (senza form_id) | visualizza_voci |
Riferimento abilità
Tutte le abilità sono di sola lettura e idempotenti. Gli errori vengono restituiti come oggetti WP_Error serializzati in JSON con i campi code, message e data.status.
wpforms/list-forms
Elenca i moduli con metadati di riepilogo. Disponibile in Lite e Pro.
Parametri
| Nome | Tipo | Obbligatorio | Predefinito | Descrizione |
|---|---|---|---|---|
stato | string | No | pubblica | Stato del modulo. Uno tra publish, draft, trash. |
limite | intero | No | 20 | Numero massimo di moduli da restituire. Intervallo da 1 a 100. |
offset | intero | No | 0 | Numero di moduli da saltare. |
Richiesta di esempio
curl "$WP_SITE/wp-json/wp-abilities/v1/abilities/wpforms/list-forms/run?input%5Blimit%5D=10&input%5Bstatus%5D=publish"
Risposta di esempio
{
"forms": [
{
"id": 123,
"title": "Contact Form",
"status": "publish",
"created": "2026-01-27 10:00:00",
"modified": "2026-02-15 14:30:00",
"author": 1
}
],
"total": 5
}
wpforms/get-form
Recupera un singolo modulo, inclusa una selezione curata delle sue impostazioni e, facoltativamente, la sua configurazione dei campi. Disponibile in Lite e Pro.
Parametri
| Nome | Tipo | Obbligatorio | Predefinito | Descrizione |
|---|---|---|---|---|
id_modulo | intero | Sì | — | L'ID del modulo da recuperare. |
includi_campi | booleano | No | vero | Includi la configurazione dei campi del modulo nella risposta. |
Richiesta di esempio
curl "$WP_SITE/wp-json/wp-abilities/v1/abilities/wpforms/get-form/run?input%5Bform_id%5D=123&input%5Binclude_fields%5D=true"
Risposta di esempio
{
"id": 123,
"title": "Contact Form",
"status": "publish",
"created": "2026-01-27 10:00:00",
"modified": "2026-02-15 14:30:00",
"author": 1,
"settings": {
"form_title": "Contact Form",
"form_desc": "Get in touch with us",
"submit_text": "Submit",
"ajax_submit": true,
"honeypot": true,
"antispam": true
},
"fields": [
{
"id": 1,
"type": "text",
"label": "Name",
"description": "",
"required": true,
"size": "medium"
}
]
}
L'oggetto settings restituito da questa abilità è un sottoinsieme curato e non sensibile (titolo, descrizione, testo di invio, flag di invio AJAX, honeypot, anti-spam). Le impostazioni di notifica, conferma e integrazione non sono esposte.
wpforms/get-form-stats
Restituisce le statistiche di invio per un modulo. La forma della risposta differisce tra Lite e Pro.
Parametri
| Nome | Tipo | Obbligatorio | Predefinito | Descrizione |
|---|---|---|---|---|
id_modulo | intero | Sì | — | L'ID del modulo. |
Richiesta di esempio
curl "$WP_SITE/wp-json/wp-abilities/v1/abilities/wpforms/get-form-stats/run?input%5Bform_id%5D=123"
Risposta Lite
{
"form_id": 123,
"entries_available": false,
"message": "Entry statistics require WPForms Pro. Upgrade to access detailed form submission data."
}
Risposta Pro
{
"form_id": 123,
"total_entries": 156,
"unread_entries": 12,
"starred_entries": 8,
"entries_available": true
}
wpforms/get-entry-summaries
Elenco paginato di riepiloghi delle voci per un singolo modulo. Solo Pro.
Parametri
| Nome | Tipo | Obbligatorio | Predefinito | Descrizione |
|---|---|---|---|---|
id_modulo | intero | Sì | — | L'ID del modulo per cui recuperare le voci. |
stato | string | No | "" | Uno tra partial, abandoned, spam, trash. Lasciato vuoto restituisce tutte le voci completate. |
tipo | string | No | "" | Uno tra read, unread, starred. |
includi_campi | booleano | No | falso | Includi i valori dei campi di ogni voce nella risposta. |
limite | intero | No | 20 | Numero massimo di voci da restituire. Intervallo da 1 a 100. |
offset | intero | No | 0 | Numero di voci da saltare. |
Richiesta di esempio
curl "$WP_SITE/wp-json/wp-abilities/v1/abilities/wpforms/get-entry-summaries/run?input%5Bform_id%5D=123&input%5Btype%5D=unread&input%5Blimit%5D=20"
Risposta di esempio
{
"entries": [
{
"id": 456,
"form_id": 123,
"date": "2026-02-15 14:32:10",
"status": "",
"viewed": false,
"starred": true
}
],
"total": 15,
"form_id": 123
}
wpforms/get-entry
Recupera una singola voce tramite ID, inclusi tutti i valori dei campi. Solo Pro.
Parametri
| Nome | Tipo | Obbligatorio | Predefinito | Descrizione |
|---|---|---|---|---|
id_invio | intero | Sì | — | L'ID della voce da recuperare. |
includi_campi | booleano | No | vero | Includi i valori dei campi della voce nella risposta. |
Richiesta di esempio
curl "$WP_SITE/wp-json/wp-abilities/v1/abilities/wpforms/get-entry/run?input%5Bentry_id%5D=456"
Risposta di esempio
{
"id": 456,
"form_id": 123,
"date": "2026-02-15 14:32:10",
"modified": "2026-02-15 15:00:00",
"status": "",
"viewed": true,
"starred": false,
"ip_address": "192.168.1.100",
"fields": [
{
"id": 1,
"name": "Name",
"value": "John Doe",
"type": "text"
}
]
}
L'indirizzo IP nella risposta può essere mascherato. Aggiungi
add_filter( 'wpforms_abilities_mask_ip_address', '__return_true' )al codice del tuo sito; quando abilitato, gli indirizzi IPv4 appaiono con i loro ultimi tre ottetti sostituiti da asterischi (ad esempio,***.***.***.100).
wpforms/search-entries
Cerca voci in un singolo modulo o in tutti i moduli con filtri full-text, specifici per campo, stato e intervallo di date. Solo Pro.
Parametri
| Nome | Tipo | Obbligatorio | Predefinito | Descrizione |
|---|---|---|---|---|
id_modulo | intero | No | — | Limita la ricerca a un singolo modulo. Ometti per cercare in tutti i moduli. |
cerca | string | No | "" | Query full-text confrontata con tutti i campi della voce. |
id_campo | intero | No | — | Limita la ricerca a un ID di campo specifico. Usa con field_value. |
valore_campo | string | No | — | Valore esatto da confrontare nel campo specificato da field_id. |
data_da | string | No | — | Inizio dell'intervallo di date, formato YYYY-MM-DD. |
data_a | string | No | — | Fine dell'intervallo di date, formato YYYY-MM-DD. |
stato | string | No | "" | Uno tra partial, abandoned, spam, trash. |
tipo | string | No | "" | Uno tra read, unread, starred. |
includi_campi | booleano | No | vero | Includi i valori dei campi della voce nella risposta. |
limite | intero | No | 20 | Numero massimo di voci per pagina. Intervallo da 1 a 100. |
pagina | intero | No | 1 | Numero di pagina. Nota che questa funzionalità utilizza la paginazione basata su pagine, a differenza di list-forms e get-entry-summaries, che utilizzano offset. |
ordina per | string | No | data | Uno tra entry_id, date, status. |
ordine | string | No | DESC | Uno tra ASC, DESC. |
Richiesta di esempio
curl "$WP_SITE/wp-json/wp-abilities/v1/abilities/wpforms/search-entries/run?input%5Bform_id%5D=5&input%5Bsearch%5D=john%40example.com&input%5Bpage%5D=1&input%5Blimit%5D=20"
Risposta di esempio
{
"entries": [
{
"id": 142,
"form_id": 5,
"date": "2026-02-15 14:32:10",
"status": "",
"viewed": false,
"starred": true,
"fields": [
{ "id": 1, "name": "Name", "value": "John Doe", "type": "text" },
{ "id": 2, "name": "Email", "value": "[email protected]", "type": "email" }
]
}
],
"total": 47,
"total_pages": 5,
"page": 1,
"limit": 20
}
Utilizzo di WPForms con Client MCP
Ogni funzionalità di WPForms è registrata con mcp.public impostato su true, il che significa che i client AI compatibili con MCP (Claude Desktop, Cursor e altri) le scoprono automaticamente una volta che il sito WordPress è connesso tramite il plugin wordpress/mcp-adapter. Dopo l'installazione, non è richiesta alcuna ulteriore configurazione lato WPForms; le funzionalità appaiono nell'elenco degli strumenti del client sotto la categoria WPForms e rispettano le stesse callback di autorizzazione utilizzate dall'API REST.
Scoperta delle Funzionalità in Programma
Per enumerare le funzionalità disponibili su un sito invece di codificarle in modo fisso i loro ID:
# List all registered abilities on the site
curl "$WP_SITE/wp-json/wp-abilities/v1/abilities"
# Fetch the schema for a single ability
curl "$WP_SITE/wp-json/wp-abilities/v1/abilities/wpforms/list-forms"
La risposta include l'ID, l'etichetta, la descrizione, la categoria e gli schemi di input e output completi di ciascuna funzionalità, che sono sufficienti per creare un client generico senza conoscere in anticipo la superficie specifica di WPForms.
Link Correlati
- Introduzione all'API delle Funzionalità di WordPress (developer.wordpress.org)
- wordpress/mcp-adapter su GitHub
- Protocollo di Contesto del Modello