[Wordpress] Créez un plugins avec ses propres tables SQL
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.

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








Citer #1 par Soso le 21 juillet 2009 - 14:32
J’ai commencĂ© le dĂ©veloppement d’un plugin Wordpress Ă©galement et j’ai eu cette problĂ©matique. Heureusement que c’est bien expliquĂ© sur leur site (en anglais).
Le dĂ©veloppement de plugin Wordpress est assez bien pensĂ© mais malheureusement tous les « hooks » ne sont pas (encore) implĂ©mentĂ©s.
Citer #2 par Lionel Roux le 21 juillet 2009 - 15:08
Oui c’est un peu le pb, il faut chercher…. Mais effectivement c’est bien expliquĂ©.
Citer #3 par Um aluno do Professor Gomes. le 21 juillet 2009 - 14:36
VocĂŞ Ă© um gĂŞnio! Maluco belez!
Citer #4 par Lionel Roux le 21 juillet 2009 - 15:08
Aie Maluc’ brunauzinio!
Citer #5 par z0va le 21 juillet 2009 - 17:47
Je me suis lancĂ© depuis peu dans l’aventure du dev de plugin wordpress pour mettre Ă profits mes connaissances en php et je trouves sa assez facile et bien pensĂ© la plupart des fonctions sont entièrement automatisĂ©es et nous mâchent la travail. MalgrĂ© le peu de documentation en Français en fouinant un peu on arrives facilement Ă se dĂ©brouiller. Je pense qu’il serait bien de pouvoir faire des tutoriaux sur la crĂ©ation de plugin wordpress, afin d’aider les plus novices qui hĂ©sitent Ă franchir le pas et qui ne trouvent pas de doc assez dĂ©taillĂ©e, je serait prĂŞt Ă me lancer dedans, Ă©ventuellement Lionel serait tu partant pour cela ?
Citer #6 par Lionel Roux le 21 juillet 2009 - 17:52
Avec plaisir. Je pense qu’il y a de quoi faire. Reste Ă trouver le temps
Citer #7 par jaguie le 21 juillet 2009 - 17:59
arg je l’avais loupĂ© ce billet ! Pratique et intĂ©ressant, faut vraiment que je me mette au dev wordpress !
Citer #8 par Lionel Roux le 21 juillet 2009 - 18:06
hĂ©hĂ© oui surtout que tu touches en PHP, moi ça fait Ă peine 6 mois que j’en fais
A mon avis tu peux t’amuser avec tes connaissances.
(private joke inside)
Sinon en attendant, tu peux aussi tester des plugins, c’est bien aussi
Citer #9 par jaguie le 21 juillet 2009 - 18:09
t’inquiète je teste je teste et je suis de très près ce qui ce passe et les feed back … Mais j’ai vraiment trop de boulot en ce moment… Dit moi on pourrait le passer en SVN le dev du plugin si tu veux peut le mettre sur mon serveur. Ca te branche ?
Bisou
Citer #10 par Lionel Roux le 21 juillet 2009 - 18:12
Je vais le checkiner sur le SVN de Worpdress.org direct. Sauf si on souhaites ne le sortir que qd il sera nickel. Tu préfères quoi ?
Citer #11 par jaguie le 21 juillet 2009 - 18:14
vouaip le SVN wordpress je pense que c’est une meilleure idĂ©e… Tu fais ça quand?
Ce soir, je vais regarder en profondeur ce que tu as fait. Je te fais un feed back ensuite.
Bisou