Succede sempre più di frequente di dover effettuare delle chiamate ajax in Wordpress. In questo articolo vedremo come effettuare delle chiamate asincrone senza dover creare nuove pagine Wordpress ma sfruttando lo script utilizzato dall'interfaccia del wp-admin.
Nell'esempio in questione, la chiamata AJAX restituirà un file JSON formato davvero utile per rappresentare i dati restituiti da una query. Lato javascript useremo la funzione $.getJSON(...) di jQuery mentre lato server scriveremo il nostro script all'interno del file functions.php presente in qualsiasi tema Wordpress.
Per prima cosa dobbiamo creare la corrispondenza tra una nuova action e la nostra funzione php:
Fatto ciò possiamo scrivere la nostra funzione my_function la quale corrisponderà all'azione myaction (il nome è puramente indicativo, potete chiamare l'azione e la funzione come preferite):
In questo script trovate tutto l'indispensabile per completare la parte lato server. Come si può intuire la query dovrà utilizzare un parametro passato in GET, poi utilizzando la variabile globale wpdb effettueremo la query sul database. La json_encode trasformerà l'array associativo con i record letti tramite la SELECT in una stringa JSON e la stamperemo a video tramite l'echo. Non dimenticate la exit() finale perchè altrimenti verrà stampato uno "0" che vi metterà in difficoltà nel parsificare il JSON.
Un ultimo particolare di cui tenere conto è che la add_action crea un'azione per l'admin-ajax.php che è un file accessibile solo da utenti loggati, quindi per consentire l'esecuzione dell'azione sia da utenti registrati sia da ospiti sarà necessario aggiungere un'ulteriore linea di codice come questa:
Dopo aver completato lo script PHP possiamo passare al lato client, con il codice javascript per la chiamata della funzione:
Ho omesso l'inclusione di jquery in Wordpress, ma potete trovare come fare in un mio precedente articolo che trattava l'argomento nello specifico.
A questo punto non vi resta che sbizzarrirvi con le chiamate ajax nel vostro template oppure dai vostri plugin (in quest'ultimo caso basta spostare il codice PHP in un file del vostro plugin).