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.