« Beware Flying Footballs :: Cartographie du site »

Bien développer un plugin pour WordPress

WordPress est étonnant de simplicité lorsqu’il s’agit de développer de nouveaux plugins. Cependant, il convient de suivre un certains nombre de bonnes pratiques.

Quelques bonnes pratiques

  • Encapsuler ses functions dans une classe afin de complètement isoler le fonctionnement du plugin de WordPress. Cela évite les conflits de variables, de nom de fonction, etc.
  • Penser à l’internationalisation du code en utilisant les fonctions __() et _e() et déclarer un domaine pour votre plugin.
  • Penser à documenter l’utilisation du plugin : rédiger une page de mode d’emploi que l’on affichera ensuite par le menu plugins > aide plugin X
  • N’utilisez pas n’importe quel “hook”, mais assurez-vous qu’il correspond bien à votre usage.

Un modèle de squelette de plugin

Dans le squelettes suivant, je vous propose un petit coup de pouce pour mettre en place vos plugins. Copiez ce code dans un nouveau fichier et créez votre plugin…

Dans l’exemple proposé, le plugin va ajouté à la fin de chaque billet le nom du plugin. Cen’est pas très utile mais ça permet de faire un exemple.


/*
Plugin Name: Nom du Plugin
Plugin URI: http://www.example.com/votre_plugin
Description: Ce que fait votre plugin en quelques mots.
Version: 1.0
Author: Votre Nom
Author URI:  http://www.example.com
*/

/*
Squelete de plugin : Mode d'emploi

1. Remplir le cartouche en début de fichier, ce sont les informations qui apparaissent dans la description du plugin dans WordPress
2. Remplacer {{VotrePlugin}} par le nom de votre plugin composé de lettres (sans accents), chiffre, underscore (_)
3. Ajouter vos fonctions dans la partie à éditer
4. Gérer le contenu de la page d'aide de votre plugin (fonction AdminHelpPage)
5. (facultatif) Gérer l'installation options de paramétrage, tables... (fonction install)

*/

class {{VotrePlugin}} {
  var $domain = '';
  var $version = '1.0'; //Changer pour correspondre à la version courante
  var $option_ns = '';
  var $options = array();

// Raccourci interne pour ajouter des actions
  function add_action($nom, $num = 0) {
    $hook = $nom;
    $fonction = $nom;
    if(!$num) { $fonction .= $num; }
    add_action($hook, array(&$this, 'action_'.$nom));
  }

  function {{VotrePlugin}}() {
// Initialisation des variables
     if ($this->domain == '') $this->domain = get_class($this);
     if ($this->option_ns == '') $this->option_ns = get_class($this);
// Récupération des options
		$this->options = get_option($this->option_ns);

// Doit-on lancer l'installation ?
    if(!isset($this->options['install']) or ($this->options['install'] != $this->version))
    	$this->install();

//Charger les données de localisation
    load_plugin_textdomain($this->domain); 

// gestion automatique des actions
		foreach(get_class_methods(get_class($this)) as $methode) {
			if(substr($methode, 0, 7) == 'action_') {
				$this->add_action(substr($methode, 7));
			}
		}		

  }      

  function action_admin_menu() {
    if (function_exists('add_submenu_page')) {
      add_submenu_page('plugins.php',
                       __('{{VotrePlugin}}', $this->domain),
                       __('{{VotrePlugin}}', $this->domain),
                       3,
                       basename(__FILE__),
                       array(&$this, 'AdminHelpPage'));
    }
  }

  function set($option, $value) {
  	$this->options[$option] = $value;
  }

  function get($option) {
  	if (isset($this->options[$option])) {
  		return $this->options[$option];
  	} else {
  		return false;
  	}
  }

  function update_options() {
  	return update_option($this->option_ns, $this->options);
  }

//---------------------------------------------
// Editez à partir d'ici
//---------------------------------------------

  function install() {
// Fonction permettant l'installation de votre plugin (création de tables, de paramètres...)
		$this->set('install', $this->version);
		$this->set('page', 0);
		$this->update_options();
  }

  function AdminHelpPage() {
  	echo '
Page d'admin de votre plugin
'; } function action_wp_title($titre) { return $titre.' (on stéroïd)'; } //--------------------------------------------- // Fin de la partie d'édition //--------------------------------------------- } $inst_{{VotrePlugin}} = new {{VotrePlugin}}();

Dans la partie édition, il suffit de créer de nouvelles méthodes action_“nom du hook” pour que celles-ci soient automatiquement enregistrées et exécutées par WordPress. De plus il est facile de gérer les options de votre plugin parmi les options de WordPress en utilisant les méthodes get, set et update_options

N’hésitez pas à faire vos remarques dans les commentaires.

Télécharger le squelette

Ressources connexes

Pour vous aider à créer vos propres plugins, n’hésitez pas à consulter :

2 commentaires pour 'Bien développer un plugin pour WordPress'

  1. Ozh (le 29 mars 2006 à 12:19)

    Très bon.

  2. z720.net » Archive » Séparer son site et son weblog propulsé par WordPress (le 12 octobre 2006 à 13:26)

    [...] Pour éviter que nos fonctions entrent en collision avec celles de WordPress, celles-ci seront encapsulées dans une classe. De la même manière que je le préconise pour les plugins. [...]


*