Estendere le funzionalità di WordPress, con plugin, widget o shortcode, può richiedere di interagire direttamente con il database (wpdb).
Essendo un CMS molto diffuso ed affermato, WordPress mette a disposizione dell’utente parecchie classi per estendere le sue funzionalità, tra cui la classe WPDB.
Requisiti
- Buona conoscenza WordPress e Php;
- Buona conoscenza MySQL;
N.B. Quando si utilizzano le interazioni con il database, è importante prestare la massima attenzione. Un backup prima di qualsiasi azione, è sempre consigliato.
Eseguire una select sul database WordPress
L’esecuzione della query diventa estremamente facile, basta utilizzare $wpdb->get_results($query) per memorizzare, ad esempio, in una variable il risultato della query ed utilizzarlo in un eventuale costrutto foreach.
Ipotizzando dunque di avere una tabella con le seguenti colonne:
- ID
- nomepg
- ruolo
per mostrare, riga per riga, nome e ruolo del personaggio sarà sufficiente creare una funzione simile a quella seguente:
function funzione_select_test()
{
global $wpdb;
$result = $wpdb->get_results("SELECT * FROM tabella_esempio ORDER BY rand() LIMIT 5");
foreach($result as $row) {
$content .= 'Nome del personaggio: '.$row->nomepg;.' | ruolo del personaggio: '.$row->ruolo.'<br/>';
}
return $content;
}
Analisi della funzione
global $wpdb permette di utilizzare la classe wpdb nella nostra funzione. $result memorizzerà al suo interno il risultato della query indicata, in questo caso, aggiungendo order by rand() e limit 5 verranno prelevate dall tabella 5 righe in modo casuale. Il costrutto foreach, per ogni riga prelevata, memorizzerà nella variable $content l’html che con il return mostrerà in output.
Eseguire un insert sul database WordPress
L’esecuzione della query di inserimento è altrettanto facile, ed ipotizzando di avere la stessa tabella di prima, quindi con id, nomepg e ruolo sarà sufficiente procedere come segue:
function funzione_insert_test()
{
//* qui ci sarà tutta la parte relativa alle variabili ottenute ad esempio tramite una post */
$result = $wpdb->insert("tabella_esempio", array(
"nomepg" => $variabile-nuovo-nome,
"ruolo" => $variabile-ruolo
));
if ($result === 0) {
echo 'inserito';
/* qui ci saranno le azioni in caso di successo */
} else {
echo 'non inserito';
/* qui in caso di errore */
}
/* il resto della funzione */
}
Analisi della funzione
Si può notare come l’insert in questo caso non avviene tramite una query diretta, scritta quindi dall’utente, ma attraverso un array inviato tramite la funzione insert della classe wpdb. Per verificare l’esito della query, ad esempio, si può utilizzare la condizione ($result === 0), in caso $result corrisponda a 0, l’inserimento sarà avvenuto correttamente.
E adesso? Cosa si può fare?
Adesso si possono creare shortcode che utilizzino tabelle custom per mostrare statistiche, o dati non direttamente prelevati dalle tabelle di WordPress. Si possono creare sezioni complesse e plugin per l’amministrazione e non ultimo durante l’inserimento dei dati, si possono aggiungere uno o più controlli di sicurezza per evitare il mysql injection.