Come sfruttare la classe $wpdb per leggere il Database di Wordpress.
Se avete mai realizzato un tema per WordPress, prima o poi avrete avuto la necessità di ricavare delle informazioni dal database non accessibili tramite i template tag di questo CMS. Non ci sono problemi ad ottenere il titolo del blog, di un post, l’elenco delle pagine o delle categorie esistenti, ma quando le necessità si fanno più specifiche diventa necessario scrivere qualche riga in php.
La realtà è molto più semplice di quello che può sembrare: esiste infatti una classe chiamata $wpdb che consente di andare a recuperare qualsiasi informazione dal database. Può essere sfruttata su qualsiasi tabella, anche quelle che non sono state create da WordPress, ma ad esempio da un plugin esterno.
Esempi pratici di utilizzo
Volete visualizzare sulla homepage del blog il numero di utenti registrati? Vi basta aggiungere questa funzione nel file functions.php:
function userCount() {
global $wpdb;
$user_count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->users;");
echo $user_count;
}
Dal template index.php basterà poi richiamare la funzione per visualizzare il risultato:
<p>Utenti registrati: <?php userCount(); ?></p>
E’ possibile eseguire anche query più complesse, ad esempio per ricavare un array di elementi da stampare, come l’elenco delle bozze ancora da pubblicare:
function showDrafts() {
global $wpdb;
$fivesdrafts = $wpdb->get_results("SELECT ID, post_title FROM $wpdb->posts WHERE post_status = 'draft' ");
foreach ($fivesdrafts as $fivesdraft) {
echo '<li>' . $fivesdraft->post_title . '</li>';
}
}
Da visualizzare poi così:
<h3>Bozze in attesa di pubblicazione:</h3>
<ul>
<?php showDrafts(); ?>
</ul>
Questo strumento è interessante, perchè con un minimo di conoscenza del database e delle query possibili, qualsiasi informazione può essere estratta senza difficoltà. C’è un’ottima documentazione a disposizione sul Codex ufficiale di WordPress, di cui trovate anche la traduzione in italiano su wordpress-it.it.
Tra le funzioni a disposizione della classe, potrebbe servirvi $wpdb->show_errors, che visualizza gli errori MYSQL. L’ho trovata molto utile in fase di debug, e se non conoscete bene la sintassi da utilizzare vi sarà di grande aiuto.
Il mio consiglio comunque è di fare qualche test in locale per capire le potenzialità dello strumento: non è così difficile da imparare, anche se non siete dei programmatori. Dopo aver osservato la struttura del database (ad esempio con phpMyAdmin) per conoscere i nomi delle tabelle e dei campi, potrete fare qualsiasi cosa.
Ciao Tommaso, stavo proprio pensando di implementare la possibilità di visualizzare i post di prossima uscita, ma volevo evitare di ricorrere all’utilizzo di un plugin. Credo che tramite l’utilizzo della classe $wpdb sia facilmente fattibile.
Grazie della segnalazione, utilissima come al solito.
Ottimo post. L’interazione con un database esterno amplia gli scenari di utilizzo che si possono raggiungere con questo CMS. Si potrebbe anche realizzare un applicazione da integrare tra le pagine del proprio blog.
Ciao Tommaso! Questo articolo è un tocca sana!!! Sto lavorando sul nuovo tema di Splesh! e queste info mi saranno di grande aiuto! Grazie!
Io non riesco a capire quella “moda” che c’è ultimamente; tutti vogliono visualizzare i post che dovranno essere pubblicati…boo.
Mi spiego:
se una persona fa un post su un’argomento unico, come in teoria dovrebbero esserlo tutti ed il copione di turno passa, lo vede e ruba l’idea, è utile? ;)
Ciao Tommaso,
sono nuovo di WP e questo tuo post mi è stato molto utile per capire come interagire con il database.
Io volevo farti una domanda: ma se devo creare una pagine del sito che mostra una form che si interfaccia al database, devo sviluppare un plugin o semplicemente un template di pagina?
Grazie
@WaPoNe per un form semplice puoi sfruttare plugin come Contact Form 7. Con questo puoi creare la pagina di cui hai bisogno e inserire il form tramite shortcode. Altrimenti ci sono soluzioni più evolute come Gravity forms.
@Tom: grazie per la risposta. Io non voglio una semplice form ma una pagina php che mostra ANCHE una form.
Esempio.. dopo che la form viene compilata e il pulsante di invio cliccato, devo far partire una mail e il dowload di un pdf.
Grazie
Sono tutte operazioni possibili con uno strumento come Gravity Forms. Ovviamente possono essere realizzate anche “a mano”, dipende dalle tue esigenze :)
Grazie Tom.
Appunto.. io vorrei realizzarle a mano ma non ho capito come si fa a creare una semplice pagina php in WP.
Devo creare un template?
Devo creare un plugin?
Grazie
Puoi creare una pagina specifica usando i template, e in quello specifico file scrivere il codice php di cui hai bisogno.
Grandissimo Tom.. capito!
Sei stato chiarissimo!
Quindi ricapitolando, creo un template dove inserisco il codice della mia pagina php poi dal backend di WP creo una Pagina dove inserisco il titolo, non metto nulla nel contenuto e soprattutto associo alla pagina il mio template ed il gioco è fatto, giusto?
Grazie