Articles taggés avec ‘WordPress’

Bien coder son plugin WordPress

Jeudi 25 décembre 2008

WordPress c’est bien, y a plein de plugins dans le repository qui font un peu tout ce qu’on peut imaginer. Le hic c’est que bien trop souvent, quand on en installe un, ben ça marche pas ou alors ça marchotte puis ça s’effondre un beau jour suite à l’installation d’un autre plugin ou encore on perd une partie des configuration suite à une mise à jour… Ceci arriverait beaucoup moins souvent, si certaines lignes de conduite étaient plus souvent suivies.

Voici donc quelques recommandations à suivre pour développer un plugin WordPress. C’en sont quelques une parmi d’autres, vos plugins ne seront pas parfaits juste parce que vous aurez suivi ces recommandations, bien entendu, mais ça évitera certains problèmes à vos utilisateurs…

Intégration de jQuery

jQuery permet d’effectuer de nombreuses opérations avec du code synthétique et surtout multi-navigateur, c’est bien, mangez-en. Par contre, dans les plugins WordPress c’est souvent intégré n’importe comment.

Déjà, WordPress inclut jQuery de base, donc nul besoin de le joindre au plugin.

Ensuite, inclure jQuery “à la main” via une balise script en dur, quand le plugin est tout seul, ça marche bien. Si un autre exploite directement jQuery sans extension, la page est plus lente parce que jQuery est chargé plusieurs fois mais ça marche aussi. Par contre dès qu’un plugin utilise des extensions de jQuery, là c’est moins cool : en effet, pour peu que ce plugin ne soit pas le dernier à être appelé, l’extension a toutes les chances d’être écrasée lors d’un autre chargement de jQuery… Et cela peut ne se produire que sur certaines pages selon les plugins, donc ça peut être difficile à détecter.

Heureusement, WordPress propose une fonction bien pratique qui permet d’intégrer des javascript sans écrire directement la balise script et surtout en indiquant des dépendances, ce qui évite les scripts inclus dans le mauvais ordre. Cette fonction s’appelle wp_enqueue_script et est définie dans le fichier wp-include/functions.wp-scripts.php.

En particulier, pour inclure jQuery il suffit d’appeler : wp_enqueue_script('jquery');

Et accessoirement, préférez un appel à l’objet jQuery plutôt qu’un appel à $ dans votre code, car si un autre plugin inclut une bibliothèque qui utilise aussi le $, ben… kaboum !

Ne pas gêner les mises à jour

Lorsqu’on met un plugin à jour, le dossier qui le contient est remplacé par la nouvelle version. En conséquence, si des fichiers ont été ajoutés ou modifiés dans ce dossier, ils seront écrasés par la mise à jour.

Cette pratique donc est à éviter absolument. Préférez une écriture en base de données, là aucun problème en cas de mise à jour :

  • Print this article!
  • Turn this article into a PDF!
  • E-mail this story to a friend!
  • Facebook
  • Twitter
  • del.icio.us
  • Digg
  • Google Bookmarks
  • BlogMemes Fr
  • Wikio FR
  • Netvibes

Personnaliser la barre latérale dans un thème WordPress

Dimanche 11 mai 2008

Vu qu’on m’a posé certaines questions là dessus cette semaine, ça va faire le sujet de l’article d’aujourd’hui.

Ajouter une seconde zone de widgets

WordPress - gestion des widgetsDepuis la version 2 (il me semble) de WordPress, si le thème est bien fait, on peut depuis le panneau d’administration ajouter des widgets dans certaines zones bien définies. Dans le thème par défaut, il y a une zone unique pouvant accueillir des widgets, qui se trouve dans la barre latérale. Mais on peut vouloir en ajouter d’autres.

Pour ajouter une nouvelle zone, il faut effectuer deux modifications dans le code du thème :

  1. premièrement, il faut “enregistrer” une nouvelle zone pour que celle-ci soit disponible dans le menu de sélection des zones. Pour cela il faut en général se rendre dans le fichier functions.php du thème et rechercher où est appelée la fonction register_sidebar (dans le thème par défaut, c’est tout en haut du fichier) et l’appeler une fois de plus pour enregistrer une nouvelle zone.

    Cette fonction peut optionnellement prendre en argument un tableau de paramètres permettant de personnaliser le code HTML qui enrobera la liste de widgets. Dans la plupart des cas on n’en a pas besoin mais au cas où c’est bon de savoir que c’est possible, notamment pour éventuellement spécifier une classe particulière à l’une ou l’autre zone en vu d’appliquer des styles différenciés.

    Une fois cela fait, la nouvelle zone est disponible dans le menu de sélection des zones du panneau d’administration (cf la capture d’écran ci-dessus).

  2. dans un deuxième temps, il faut inclure cette zone dans le rendu de la page à un endroit ou un autre (sinon, forcément, ça sert pas à grand chose). Pour cela il suffit d’intégrer le code suivant dans l’un des fichiers de template :
    <?php dynamic_sidebar(n); ?>
    en prenant garde de bien remplacer le paramètre “n” par un entier représentant le numéro de la zone que vous voulez afficher.

    Par exemple, si vous venez d’ajouter une zone et qu’il y en avait une seule avant, la nouvelle aura fort logiquement le numéro 2 et le code à insérer sera le suivant :

    <?php dynamic_sidebar(2); ?>

N’afficher certaines choses que sur la page d’accueil

Afin de ne pas trop surcharger les pages on peut ne vouloir afficher certaines informations et liens que sur la page d’accueil. Par exemple sur ce site, les encarts “Mes autres sites”, “News du serveur” et “Divers” ne s’affichent que sur la page d’accueil (et les pages de contenu fixe).

Pour restreindre l’affichage d’une portion de code d’un fichier de template, c’est très simple :

Code (HTML)

<?php if ( [CONDITION] ) { ?>
[CODE HTML À RESTREINDRE]
<?php } ?>

WordPress propose quelques fonctions PHP qui testent dans quel type de page on se trouve et qui peuvent servir à composer la condition (qui remplacera la portion “[CONDITION]” du code ci-dessus). Ces fonctions sont définies dans le fichier wp-includes/query.php et comprennent notamment :

  • is_home() disant si l’on se trouve sur la page d’accueil.
  • is_page() disant si l’on se trouve sur une page de contenu fixe.
  • is_search() disant si l’on est dans la page de recherche.
  • is_404() disant si l’on se trouve sur la page d’erreur 404.
  • etc.

Pour composer la condition, il suffit d’appeler une ou plusieurs de ces fonctions séparées par une double barre verticale (||) qui représente un “ou” en PHP.

Par exemple pour ajouter une zone de widgets qui ne sera affichée que sur la page d’accueil et les page de contenu fixe, on utilisera le code suivant :

Code (HTML)

<?php if ( is_home() || is_page() ) { // Home and pages only. ?>
   <?php dynamic_sidebar(2); // Home and pages sidebar. ?>
<?php } ?>

Et ça marche que pour la barre latérale ?

Bien entendu ces deux “astuces” sont valable aussi bien pour la barre latérale que pour n’importe quelle autre partie de votre site. Mais c’est dans la barre latérale que c’est le plus souvent utilisé.

  • Print this article!
  • Turn this article into a PDF!
  • E-mail this story to a friend!
  • Facebook
  • Twitter
  • del.icio.us
  • Digg
  • Google Bookmarks
  • BlogMemes Fr
  • Wikio FR
  • Netvibes

1 an après…

Jeudi 1 mai 2008

Ça y est, ça fait un an que ce site est ouvert ( le premier mai, c’est férié, donc facile à retenir :p ).

Que dire ? Pas grand chose… Si ce n’est que WordPress s’est avéré plutôt pas mal : je me suis essayé au développement de plugins et c’est assez sympathique (comparé à développer des MODs pour phpBB2, c’est un vrai plaisir : le code est organisé dans cette optique !).

C’était mon premier site avec WordPress, entre temps deux autres ont vu le jour :

  • d’une part la page d’accueil du serveur dédié qui héberge ce site ainsi que mes divers forums.
  • d’autre part, depuis quelques semaines, un petit site associé à EDForum : Cultur-ED. Fort logiquement il parle de séries TV et un peu de cinéma, au travers d’articles écrits par les membres du forum.

Voilà voilà, un petit site sans prétention qui fait son chemin.

  • Print this article!
  • Turn this article into a PDF!
  • E-mail this story to a friend!
  • Facebook
  • Twitter
  • del.icio.us
  • Digg
  • Google Bookmarks
  • BlogMemes Fr
  • Wikio FR
  • Netvibes