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: 1262