Websourcing.fr

Websourcing.fr » ActualitĂ©s, Web, Logiciels et Fun

Image pour [Wordpress] Créez un plugins avec ses propres tables SQL

[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.

move_server_database1

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


Cet article vous a plu ?

Commenter Laissez un commentaire | Recevez les mises à jour Souscrivez au flux RSS | Partager : Twitter AddInto Fuzz del.icio.us Wikio FR Blogonet
Websourcing.fr - Tous droits réservés. Reproduction interdite sans accord préalable.
  1. Répondre 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.

    • Répondre 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Ă©.

  2. Répondre Citer #3 par Um aluno do Professor Gomes. le 21 juillet 2009 - 14:36

    VocĂŞ Ă© um gĂŞnio! Maluco belez!

  3. Répondre 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 ?

    • Répondre 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 ;)

  4. Répondre 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 !

    • Répondre 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.
      Sinon en attendant, tu peux aussi tester des plugins, c’est bien aussi ;) (private joke inside)

  5. Répondre 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

    • Répondre 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 ?

  6. Répondre 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

(Ne sera pas publié)
  1. Pas encore de trackback.