WordPress: creare le tabelle dei plugin
Una guida alla creazione e alla gestione delle tabelle dei plugin di WordPress.
Molti plugin di WordPress si appoggiano a tabelle personalizzate create nel database MySQL del sito. Creare tabelle è un requisito fondamentale di tutti quei plugin che hanno una struttura complessa. In questo articolo parleremo della creazione di queste tabelle personalizzate nel database.
Prefisso delle tabelle
Nel file wp-config.php è possibile specificare un prefisso per le tabelle del database. Per impostazione predefinita il prefisso è wp_, ma dovete sempre verificarne il valore in uso per creare le vostre tabelle.
Questo valore si trova nella variabile $wpdb->prefix. Quindi se volete creare una tabella chiamata {prefisso}test dovete scrivere:
|
1 2 3 4 5 6 7 8 |
function plugin_install () {
global $wpdb;
$table_name = $wpdb->prefix . "test";
// continua
} |
Creare la tabella
Il passo successivo è creare la tabella. Si può usare la funzione dbDelta() contenuta in wp-admin/includes/upgrade.php , e per questo motivo dobbiamo includere questo file nel nostro script. Questa funzione esamina la struttura della tabella e fa un raffronto con la struttura voluta, oltre che modificare la tabella se necessario, e in questo senso si rivela molto utile per gli aggiornamenti.
Per funzionare, la funzione dbDelta() vuole questi requisiti:
- Dovete inserire ogni campo su una nuova riga nella query SQL.
- Dovete usare due spazi tra le parole
PRIMARY KEYe la definizione della vostra chiave primaria. - Dovete usare la parola chiave
KEYinvece cheINDEXe ne dovete includere almeno una.
Nota
Ovviamente potete usare anche il metodo query() dell’oggetto $wpdb se non volete sottostare a queste limitazioni.
Esempio:
|
1 2 3 4 5 6 7 8 9 10 11 |
$sql = "CREATE TABLE " . $table_name . " (
id mediumint(9) NOT NULL AUTO_INCREMENT,
time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
name tinytext NOT NULL,
text text NOT NULL,
url VARCHAR(55) DEFAULT '' NOT NULL,
UNIQUE KEY id (id)
);";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql); |
Inserire i primi dati
Ecco come inserire i primi dati nella tabella appena creata:
|
1 2 3 4 |
$name = "Test";
$text = "Test";
$rows_affected = $wpdb->insert( $table_name, array( 'time' => current_time('mysql'), 'name' => $name, 'text' => $text ) ); |
Una cosa importante da ricordare è che dovreste sempre filtrare i dati in entrata nel database utilizzando i metodi $wpdb->escape() e $wpdb->prepare. Per ulteriori informazioni consultate la documentazione.
Aggiungere un numero di versione
Potete aggiungere un numero di versione alla vostra tabella che vi servirà per gli aggiornamenti:
|
1 |
add_option("plugin_db_version", "1.0"); |
Il codice completo
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
global $plugin_db_version;
$plugin_db_version = "1.0";
function plugin_install() {
global $wpdb;
global $plugin_db_version;
$table_name = $wpdb->prefix . "test";
$sql = "CREATE TABLE " . $table_name . " (
id mediumint(9) NOT NULL AUTO_INCREMENT,
time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
name tinytext NOT NULL,
text text NOT NULL,
url VARCHAR(55) DEFAULT '' NOT NULL,
UNIQUE KEY id (id)
);";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
add_option("plugin_db_version", $plugin_db_version);
}
function plugin_install_data() {
global $wpdb;
$name = "Test";
$text = "Test";
$rows_affected = $wpdb->insert( $table_name, array( 'time' => current_time('mysql'), 'name' => $name, 'text' => $text ) );
} |
Richiamare le funzioni
Infine, dobbiamo far eseguire le due funzioni definite in precedenza quando il plugin viene attivato nel backend di WordPress:
|
1 2 |
register_activation_hook(__FILE__,'plugin_install');
register_activation_hook(__FILE__,'plugin_install_data'); |
Aggiornamento del plugin
Quando è disponibile una nuova versione di un plugin, è necessario aggiornare anche la struttura delle tabelle. Potete aggiungere il seguente codice alla funzione plugin_install() per verificare se la versione del plugin è l’ultima disponibile e eventualmente aggiornarne la tabella:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$installed_ver = get_option( "plugin_db_version" );
if( $installed_ver != $plugin_db_version ) {
$sql = "CREATE TABLE " . $table_name . " (
id mediumint(9) NOT NULL AUTO_INCREMENT,
time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
name tinytext NOT NULL,
text text NOT NULL,
url VARCHAR(100) DEFAULT '' NOT NULL,
UNIQUE KEY id (id)
);";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
update_option( "plugin_db_version", $plugin_db_version );
} |
Dalla versione 3.1 di WordPress l’hook di attivazione non viene invocato quando il plugin viene aggiornato, quindi dovete aggiungere la seguente routine di verifica:
|
1 2 3 4 5 6 7 |
function plugin_update_db_check() {
global $plugin_db_version;
if (get_site_option('plugin_db_version') != $plugin_db_version) {
plugin_install();
}
}
add_action('plugins_loaded', 'plugin_update_db_check'); |
In questo caso la action di verifica ha luogo quando il plugin è stato effettivamente caricato.

Nessun commento. Aggiungine uno!
I commenti sono chiusi.