Ecrire un plugin pour WordPress

by ekevin on septembre 29th, 2008



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 inclus 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 proposer 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.

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 renseignés 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 à interrogger 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 font 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ée (global $wpdb), sans quoi tous vos appels du type $wpdb->query(query) et même la connexion à la base de données ne seraient pas initialisés.

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

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

1
2
3
4
5
6
7
<?php
global $wpdb;
$query = "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 où 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ésultats avec 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 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
global $wpdb;
$query = "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 si le commentateur 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.

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 :

1
2
3
4
5
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’)

Share and Enjoy:
  • RSS
  • Fuzz
  • del.icio.us
  • Facebook
  • Scoopeo
  • Google
  • Blogasty
  • Bluegger
  • Digg
  • Digg-Design
  • Digg France
  • MisterWong Fr
  • Nuouz
  • Pioche
  • Reddit France
  • Tapemoi
  • Technorati
  • Tutmarks
  • TwitThis
  • Wikio FR
  • Yoolink

From cms, tutoriaux

13 Comments
  1. Intéressant. J’ai survolé parce qu’il est tard, mais je marque la page. ;-)

  2. slt, j’ai une idée de plugin qui serait à mon avis repris par pas mal de blog mais le soucis, c’est que je ne suis pas très bon en php…
    Le projet t’intéresse-t-il? ^^

  3. ekevin permalink

    Bonjour foxo,

    Les projets sont toujours intéressants, vous pouvez soit l’exposer ici ou encore me contacter par e-mail.

  4. Intéressant comme article ! Cela m’enlève un peu le brouillard dans la compréhension du fonctionnement des plug-in wordpress .
    Merci !!!

  5. ekevin permalink

    Merci goosy,

    D’ailleurs je dois toujours écrire la deuxième partie… ;)

  6. Merci,Mis en favori cause il est tres long

  7. pato permalink

    Salut a tous, le tuto m’a beaucoup interresse,seulement je n’ai pas compris comment faire appel a la fonction dans le template.

Trackbacks & Pingbacks

  1. Ecrire un plugin pour WordPress
  2. comment faire un plugin pour wordpress | jaiunblog.com | j'ai un blog
  3. Centre de Ressources des Espaces Publics Numériques de Wallonie : Tutoriel WordPress : 50 tutoriels WordPress gratuits
  4. Plugin RSS By Author - mon premier plugin | LE GLOB DE BARGEO
  5. Wordpress : 50 tutoriels gratuits à télécharger « Groupekeredern’s Blog

Leave a Reply

Note: XHTML is allowed. Your email address will never be published.

Subscribe to this comment feed via RSS