Durant les développements du plugin ultime pour Twitter (qui sortira bientôt), j’ai un temps envisagé de stocker les tweets dans une table à part.
Je me suis donc intéressé à la question de près. Mon problème n’était pas de créer un table SQL, mais d‘intégrer cette création directement dans le plugin.
![move_server_database1 move server database1 [Wordpress] Créez un plugins avec ses propres tables SQL](http://blog.websourcing.fr/files/2009/07/move_server_database1.jpg)
En effet, il était difficile d’envisager de demander aux (futurs) utilisateurs de créer cette table à la main. Il me fallait un processus entièrement automatisé. C’est ce dont je vais parler dans la suite de ce billet.
L’idée était donc de créer cette table lors de l’installation du plugin via l’interface d’administration.
Tout d’abord, il faut écrire une fonction qui créera la table:
function create_table{
/* Tout d'abord, on récupère les variables globales
* qui permettent d'accéder à la base et au préfixe
* défini.*/
global $table_prefix, $wpdb;
// ...
Ensuite, on définit le nom de la nouvelle table
$wp_my_new_table = $table_prefix . "my_new_table_name";
/* On verifie si la table n'est pas déjà existante.
* Ceci arrive lorsque on réinstalle un plugin par
* exemple */
if($wpdb->get_var("show tables like '$wp_my_new_table'") != $wp_my_new_table) {
//...
}
Si la table n’existe pas, on défini la requête de création de la table:
$sql0 = "CREATE TABLE `". $wp_my_new_table . "` ( "; $sql0 .= " `my_id` int(11) NOT NULL auto_increment, "; $sql0 .= " `field_1` date NOT NULL default '0000-00-00', "; $sql0 .= " `field_2` time NOT NULL default '00:00:00', "; $sql0 .= " UNIQUE KEY `my_id` (`my_id`) "; $sql0 .= ") ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; ";
Ceci est un exemple, il faut bien entendu y ajouter les champs nécessaires à votre plugin.
Il faut ensuite invoquer le l’outil de mise à jour des bases: dbDelta.
Cet outil est spécifique à WordPress et se trouve définit dans le fichier upgrade-functions.php.
require_once(ABSPATH . 'wp-admin/upgrade-functions.php'); dbDelta($sql0);
Tout remis bout à bout, voici la fonction complète:
function create_table{
global $table_prefix, $wpdb;
$wp_my_new_table = $table_prefix . "my_new_table_name";
if($wpdb->get_var("show tables like '$wp_my_new_table'") != $wp_my_new_table) {
$sql0 = "CREATE TABLE `". $wp_my_new_table . "` ( ";
$sql0 .= " `my_id` int(11) NOT NULL auto_increment, ";
$sql0 .= " `field_1` date NOT NULL default '0000-00-00', ";
$sql0 .= " `field_2` time NOT NULL default '00:00:00', ";
$sql0 .= " UNIQUE KEY `my_id` (`my_id`) ";
$sql0 .= ") ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; ";
require_once(ABSPATH . 'wp-admin/upgrade-functions.php');
dbDelta($sql0);
}
}
En l’invoquant avec la requête définie précédemment, la table sera crée de manière propre et surtout sécurisée (en cas d’erreur durant la création).
Pour invoquer cette la fonction create_table lors de l’installation du plugin, il faut ajouter celle-ci dans un hook et invoquer celui ci à l’activation.
register_activation_hook( __FILE__, 'create_table' );
Au final, l’opération se révèle très simple à réaliser.
Pour en savoir plus, il est toujours possible de se réferrer au codex WordPress


