Interagire con il Database di WordPress in php

Come sfruttare la classe $wpdb per leggere il Database di Wordpress.

Wordpress LogoSe 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.

Tommaso Baldovino

UX/UI Designer di Firenze, appassionato di tecnologia e accessibilità, esperto di WordPress, blogger, gamer e amante della fotografia.

13 commenti su “Interagire con il Database di WordPress in php”

  1. 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.

  2. 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.

  3. Ciao Tommaso! Questo articolo è un tocca sana!!! Sto lavorando sul nuovo tema di Splesh! e queste info mi saranno di grande aiuto! Grazie!

  4. 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? ;)

  5. 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

  6. @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

  7. Sono tutte operazioni possibili con uno strumento come Gravity Forms. Ovviamente possono essere realizzate anche “a mano”, dipende dalle tue esigenze :)

  8. 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

  9. 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