Interfacciarsi con il Database WordPress tramite la classe wpdb

Com’è noto, WordPress per memorizzare i contenuti si appoggia al noto RDBMS MySQL.
La struttura dati è molto semplice ed è costituita da 12 tabelle (wp_commentmeta, wp_comments, wp_links, wp_options, wp_postmeta, wp_posts, wp_terms, wp_termmeta, wp_term_relationships, wp_term_taxonomy, wp_usermeta, wp_users).

Tutto ruota intorno all’articolo (post); ogni articolo è inserito da un utente (user) che associa ad esso una Tassonomia, Categoria o Tag.

Per visualizzare gli articoli, e tutte le informazioni ad essi collegate, WordPress utilizza uno specifico codice PHP, il LOOP; esso visualizza per ciascun articolo le informazioni attraverso un insieme di funzioni come the_title(), the_content(), the_time(), the_category() o the_tags().

Se occorre però estrapolare contenuti che soddisfino criteri specifici, gli sviluppatori di WordPress hanno definito la classe WP_Query che, grazie ai suoi metodi, consente di creare loop personalizzati per recuperare i dati dal database.
Essa è molto potente e versatile, ma non è utile se ad esempio nasce l’esigenza di interrogare direttamente tramite SQL il database di WordPress o richiamare tabelle personalizzate create dai plugin o dallo sviluppatore stesso.

WordPress definisce, a tale proposito, una classe chiamata wpdb; essa contiene un insieme di funzioni utilizzate per interagire essenzialmente con il database WordPress, ma può essere utilizzata per comunicare con qualsiasi altro database appropriato.

Essa offre dei metodi per effettuare operazioni di insert, update e delete. Naturalmente esistono metodi ottimizzati per la lettura sia di un singolo valore (get_var) che di una riga (get_row) o di una colonna (get_col).

Di seguito si esplicita un esempio di utilizzo di un oggetto $wpdb.
Si supponga che, nel database WordPress, oltre alle tabelle standard, sia definita la tabella personalizzata APP_santi avente la seguente struttura:

Nome Tipo
ID int(3)
giorno varchar(10)
data varchar(5)
santo varchar(31)

e il relativo contenuto:

ID giorno data santo
1 01/01/2019 01-01 Maria Madre Di Dio
2 02/01/2019 02-01 Modesto
3 03/03/2019 03-03 Genoveffa
4 04/01/2019 04-01 Ermete
5 04/01/2019 04-01 Fausta
6 04/01/2019 04-01 Angela
7 04/01/2019 04-01 Elsa
8 04/01/2019 04-01 Cristiana
9 05/01/2019 05-01 Amelia
10 05/01/2019 05-01 Nazario

Si vuole creare un loop personalizzato (da inserire ad esempio nel file header.php) per visualizzare i santi del giorno; ecco il codice:

 <?php
	$mydate=getdate();
	if (strlen($mydate['mon'])==1) {
		$Chiave = $mydate['mday'] . '-0' . $mydate['mon'];
		}
	else {
		$Chiave = $mydate['mday'] . '-' . $mydate['mon'];
		}

	$Colonna = $wpdb->get_col( $wpdb->prepare( 
		"
			SELECT santo
			FROM APP_santi 
			WHERE data =  %s 
		", 
		$Chiave
	) );

	foreach ( $Colonna as $santo )	 
	{
		echo $santo . '; ';
	}

?>

Visite: 1164