Ecrire un plugin pour WordPress

Publié le 29 septembre 2008 par Ekevin


Il arrive quelques fois de ne pas trouver son bonheur dans les extensions pour Wordpress ou de vouloir en adapter une. Dans cet article nous allons voir comment créer notre premier plugin pour wordpress en s’aidant de la documentation officielle. Ce plugin affichera les derniers commentaires approuvés de votre blog. Nous personnaliserons ce plugin en le déclarant comme widget. Dans un prochain tutoriel nous ajouterons un menu dans l’administration et un peu de javascript pour le rendre plus attractif (à venir).

Pour ce widget nous aurons besoin :

  • d’un éditeur de code utilisant la coloration syntaxique (Notepad++ fera très bien l’affaire)
  • d’une installation de Wordpress > 2.5 (en local pour tester notre plugin)
  • de la documentation de Wordpress

Quelques remarques avant de commencer

La première tâche à effectuer est de réflechir au nom de notre plugin : pour nommer notre fichier (qui sera un fichier php) et le nom de nos fonctions. Nous choisirons tutcom.php pour tutoriel derniers commentaires. Attention, veillez à donner un nom unique à votre fichier, sans quoi votre fichier pourrait entrer en conflit avec un autre fichier.

Pour que notre plugin fonctionne, il faut l’installer dans un répertoire spécifique de wordpress. En l’occurence, il s’agit de /wp-content/plugins. Créons un répertoire du même nom que notre plugin et enregistrons-le à l’intérieur. En général il est préférable de créer un répertoire pour plus de clarté (même si vous voyez que le plugin Hello Dolly n’est pas inclue dans un répertoire). Ceci vous permettra par exemple, d’ajouter d’autres répertoires (comme un dossier CSS) afin de bien distinguer que ceux-ci appartiennent à votre plugin.

Enfin si vous souhaitez proposez votre plugin sur le site officiel de WordPress, il faudra créer un fichier readme.txt.

Commençons notre plugin

Commençons par quelques lignes de php.


<?php
/*
Plugin Name: Tutoriel derniers commentaires
Plugin URI: http://www.pasunclou.com/#
Description: Ce plugin va nous permettre, non seulement d'afficher les derniers commentaires de notre blog, mais aussi servir de tutoriel pour créer d'autres fonctions dans notre blog.
Author: Kevin Etienne
Version: 0.1
Author URI: http://www.pasunclou.com/
*/
?>

Concrètement, ce code est un commentaire qui sera interprété par Wordpress. Puisqu’une image vaut milles mots, voyons comment WordPress interprètera nos informations.

Voici, ce que devriez voir en allant dans la section plugin de votre Wordpress. Tous les champs que nous avons renseigner apparaissent dans la présentation du plugin.

Implentons les fonctions de notre plugin

Pour plus de clarté dans notre plugin, nous allons écrire notre code sous forme de fonctions php. Notre première fonction servira à intérogger la base de données pour récupérer nos articles populaires. Mais avant de l’écrire regardons comment se comporte les accès à la base de données avec Wordpress.

Wordpress utilise une classe ezSQL. Tous les accès à la base de données se fait sous la forme $wpdb->lenomdelafonction (comme query, get_var, get_row, get_col…). Vous trouverez plus d’informations en lisant cette partie sur le codex de WordPress, en regardant directement le code de la classe dans le dossier wp-includes\wp-db.php ou sur le site de l’auteur Justin Vincent. Cette classe doit faire appel à une variable avant d’être utilisé (global $wpdb), sans quoi tous vos appels du type $wpdb->query(query) et même la connexion à la base de données ne serait pas initialisés.

Ci-dessous une capture de la table comments de Wordpress.

Et le début de notre code de notre fonction.


<?php
/*
Plugin Name: Tutoriel derniers commentaires
Plugin URI: http://www.pasunclou.com/#
Description: Ce plugin va nous permettre, non seulement d'afficher les derniers commentaires de notre blog, mais aussi servir de tutoriel pour créer d'autres fonctions dans notre blog.
Author: Kevin Etienne
Version: 0.1
Author URI: http://www.pasunclou.com/
*/

function tutcom() {
	global $wpdb;
	$title = 'tutcom';
	// Nous créons une requête
	$query = "SELECT * from $wpdb->comments WHERE comment_approved= '1' " .
		  "ORDER BY comment_date DESC LIMIT 5";
	// Et nous stockons le résultat exécuté dans $comments
	$comments = $wpdb->get_results($query);
}
?>

Nous avons maintenant notre requête, qui demande à la base de données de sélectionner la table comments ou les commentaires ont été approuvés, organisés par date et enfin avec une limite d’extraction de 5 commentaires. Grâce à la classe ezSQL nous récupérons les résultat grâce à la fonction $wpdb->get_results et nous assignons ce résultat dans la variable $comments. Il ne nous reste plus qu’à faire une boucle pour récupérer le résultat :


<?php
/*
Plugin Name: Tutoriel derniers commentaires
Plugin URI: http://www.pasunclou.com/#
Description: Ce plugin va nous permettre, non seulement d'afficher les derniers commentaires de notre blog, mais aussi servir de tutoriel pour créer d'autres fonctions dans notre blog.
Author: Kevin Etienne
Version: 0.1
Author URI: http://www.pasunclou.com/
*/
function tutcom($title) {
	global $wpdb;
	$title = 'tutcom';
	// Nous créons une requête
	$query = "SELECT * from $wpdb->comments WHERE comment_approved= '1' " .
		  "ORDER BY comment_date DESC LIMIT 5";
	// Et nous stockons le résultat exécuté dans $comments
	$comments = $wpdb->get_results($query);
	// si nous avons des résultats
	if ($comments) {
	// alors on extracte les données
		foreach ($comments as $comment) {
			// Nous récupérons le nom de l'auteur
			$from = stripslashes($comment->comment_author);
			// Puis son url s'il l'a renseignée
			$urlauthor = stripslashes($comment->comment_author_url);
			// le contenu du commentaire
			$comment_content = stripslashes($comment->comment_content);
			// et enfin l'id du commentaire pour faire un lien
			$permalink = get_permalink($comment->comment_post_ID);

			$output .= '<li><a href="' . $urlauthor . '">' . $from . '</a> dit <a href="' .
					   $permalink . '">' . $comment_content . '</a></li>' . "\n";
		}
	// sinon si $comments ne contient pas de commentaire
	} else {

		$output .= "<li>None found</li>\n";
	}
	// enfin nous affichons notre résultat

	echo $before_widget . $before_title . $title . $after_title . '<ul>' . $output . '</ul>' . $after_widget;
}
?>

Nous voilà avec une fonction qui est déjà prête à l’emploi mais qui peut encore être améliorée. Cette fois si vous activez le plugin il suffira à partir de n’importe quel endroit de votre template de faire appel à la fonction sous cette forme, pour voir apparaître les derniers commentaires de votre blog.


<?php tutcom() ?>

Faire du plugin un widget

Seulement deux fonctions de Wordpress suffisent pour créer un widget. Wordpress fournit une liste d’API pour simplifier la vie du codeur. Tout d’abord nous devons initialiser notre widget grâce à la fonction register_sidebar_widget(”nom du widget”, “nom de la fonction”) puis ajouter une action quand le plugin est chargé add_action(”plugin_loaded”, “nom de notre fonction”). Voici ce que celà donne :


function init_tutcom() {
    register_sidebar_widget("derniers commentaires", "tutcom");
}

add_action("plugins_loaded", "init_tutcom");

Aller plus loin

Voici quelques idées pour se familiariser avec ezSQL. Au lieu d’afficher les 5 derniers commentaires, essayez d’afficher les 5 derniers articles ou 5 articles au hasard.

Pour aller plus loin dans l’API essayez de créer une fonction qui permettra d’afficher un menu dans l’administration pour ce widget, permettant par exemple de sélectionner le nombre de requêtes à afficher, de définir un titre… Ce menu sera déclaré comme suit add_action(’admin_menu’, ‘nom de la fonction’)