Sei qui: Homepage » wordpress » Interagire con il Database di WordPress in php
giu 08 2009
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.
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.
Hai trovato interessante questo post? Puoi leggere anche i seguenti articoli:
Classificato in wordpress. Puoi fare un trackback dal tuo sito.
TomStardust.com è realizzato secondo i canoni dell'accessibilità, le normative del W3C, e la legge Stanca, pur non essendo il sito di una pubblica amministrazione e non avendo nessun obbligo a riguardo.
Poter navigare su internet ed accedere alle informazioni sulla rete è un diritto di tutti, realizzare siti che rispondano agli standard web dovrebbe essere un dovere di ogni sviluppatore.
Questo sito e tutti i suoi contenuti, compresi i temi Wordpress, sono pubblicati sotto licenza Creative Commons 2.5.
Questo sito non rappresenta una testata giornalistica e viene aggiornato senza alcuna periodicità.
Powered by Wordpress
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? ;)