How to turn any jQuery plugin into a WordPress one

WordPress et jQuery sont deux plateformes réputées pour leurs plugins. Dans le cas de jQuery, les plugins permettent aux développeurs d'étendre les capacités de la librairie afin de réer de superbes effets. Dans le cas de WordPress, ils permettent à chacun de bénéficier du travail des autres, car ils sont présentés sous la forme de module qu'il est possible d'activer très simplement depuis l'interface d'administration.

Créer l'un de ces modules n'est pas vraiment difficile, mais si vous n'êtes pas familier avec leur syntaxe, cela peut rapidement devenir épineux. Il y a déjà énormément de plugins jQuery qui ont été adapté pour WordPress, mais que pouvez faire quand ce n'est pas le cas? Comment faites vous quand vous avez trouvé le plugin jQuery idéal pour votre dernier design, mais qu'il n'est pas disponible en plugin WordPress?

Dans ce tutoriel, nous allons montrer comment vous pouvez facilement adapter un plugin jQuery afin de l'utiliser dans WordPress. Nous verrons de quoi sont vraiment constitués les plugins de part et d'autre, et ce qu'ils ont en commun. A partir de la, nous verrons comment il suffit d'opérer quelques modifications simples pour nous permettre de bénéficier de nos plugins jQuery dans WordPress.
  • Ressource Précédente
  • Télécharger
  • Ressource Suivante

Partie 1: Anatomie d'un plugin jQuery

Dans cette partie, nous allons voir de quoi est généralement constitué un plugin jQuery, et où nous devons placer les différents composants. Tout au long de cet article, nous allons prendre l'exemple du plugin FancyBox (même s'il existe déjà une implémentation WordPress, c'est juste pour avoir un exemple concret).

A) La Source Javascript

jQuery est une librairie JavaScript, et les plugins servent à étendre ses possibilités, ils sont donc écrit en suivant la même syntaxe que jQuery. Chaque plugin que vous trouverez est écrit dans un fichier JavaScript. C'est le coeur même du plugin, et doit donc être inclus dans votre application:

  1. //Include the plugin script
  2. <script type="text/javascript" src="Chemin_vers/jquery.fancybox.js"></script>

B) Le Code Javascript

Une fois le plugin inclus, vous êtes souvent amené à écrire quelques lignes de code afin de faire marcher votre plugin avec votre application. La plupart du temps, cela consiste à écrire quelques lignes afin de faire marcher le plugin avec un élément particulier de votre page, et avec un évènement particulier. Comme par exemple, faire marcher la FancyBox après un clic sur un lien:

  1. //Write the plugin setup
  2. <script type="text/javascript">
  3. jQuery(document).ready(function(){
  4. //Fancybox
  5. jQuery("a.fancy").fancybox({
  6. overlayShow: true,
  7. overlayOpacity: 0.7
  8. });
  9. });
  10. </script>

C) Les styles additionnels

Certains plugins marchent avec des styles particuliers, comme les fenêtres modales comme la FancyBox par exemple. Ces styles sont requis et garantissent le bon fonctionnement du plugin. Ils doivent donc être inclus dans l'application.

  1. //Include the plugin Stylesheet
  2. <link rel="stylesheet" type="text/css" href="Chemin_vers/jquery.fancybox.css" />

D) Comment tout mettre en place ?

Une fois que vos fichiers sont prêts, c'est une pratique courante et recommandée de les ajouter à votre application en mettant les styles dans le header de la page, et les scripts juste avant la fermeture du tag </body>.

Partie 2: Comment tout intégrer dans WordPress?

Maintenant que nous avons une meilleure compréhension des différents éléments que l'on peut trouver dans un plugin jQuery, et où ils sont sensé aller, voyons comment nous pouvons faire de même dans WordPress.

Comment déclarer un plugin WordPress ?

A) Dans WordPress, les plugins sont stockés dans le dossier /wp-content/plugins. Il suffit donc de se rendre dans ce dossier, et de créer un dossier du même nom que votre plugin, dans notre cas, FancyBox.

B) Dans ce dossier, copiez tous les fichiers nécessaires au bon fonctionnement de votre plugin jQuery, (script, css, images etc).

C) Créez un fichier appelé init.php. Init.php est un fichier particulier que va utiliser WordPress pour reconnaître notre nouveau plugin. Ouvrez ce fichier et copiez le code suivant dedans:

  1. /*
  2. Plugin Name: FancyBox //Your plugin name (here we'd write Fancybox)
  3. Plugin URI: http://www.jdmweb.com/resources/fancybox //Url of your choice
  4. Description: Implementation of the FancyBox for jQuery //Brief PLugin Description
  5. Version: 1.0 //Version of your plugin
  6. Author: Jeremy Desvaux //Name of the author
  7. Author URI: http://jdmweb.com/ //Url of your site
  8. License: Creative Commons Attribution-ShareAlike //Licence
  9.  
  10. //Other terms and conditions
  11.  
  12. This program is free software; you can redistribute it and/or modify
  13. it under the terms of the GNU General Public License as published by
  14. the Free Software Foundation; either version 2 of the License, or
  15. (at your option) any later version.
  16. */

Comme vous pouvez le voir, dans ce fichier on spécifie un nom, une URL, une description et deux trois autres informations du même type. Ces informations sont ensuite réutilisées par WordPress dans l'interface d'administration des plugins comme vous pouvez le voir sur l'image suivante:

Plugin Interface Screenshot

Depuis cette image, nous pouvons voir que notre futur plugin a été reconnu par WordPress, et qu'il contient les informations que nous avons spécifiées. Le moment est venu de tout faire marcher maintenant. D'après ce que nous avons wu dans la partie 1, il nous faut trouver un moyen d'inclure nos fichiers dans le header et le footer de notre application.

Comment inclure des fichiers dans le header de WordPress?

Ce que l'on veut faire, c'est inclure notre feuille de style, dans le header de la page. En html, on le fait en plaçant une balise link directement dans le header. Dans WordPress, c'est déconseillé, il existe une fonction spécifique pour réaliser cela, elle s'appelle wp_enqueue_style() (ref codex ici)

wp_enqueue_style accepte plusieurs paramètres, principalement le nom de votre feuille de style et son url. On peut aussi ajouter des dépendances (c'est à dire d'autres styles qui doivent être inclus avant), et un numéro de version. Dans notre cas, afin d'ajouter notre feuille de style dans le header, on utiliserait wp_enqueue_style comme ceci:

  1. //Add the stylesheet into the header
  2. wp_enqueue_style(
  3. "jquery.fancybox",
  4. WP_PLUGIN_URL."/jQuery2Wp_fancybox/jquery.fancybox-1.3.1.css",
  5. false,
  6. "1.3.1"
  7. );

Ligne 3, vous pouvez voir le nom que l'on donne à notre feuille de style, l'url de sa source, avec l'emploi de la constante WP_PLUGIN_URL qui renferme le chemin vers le dossier des plugins. Du coup si l'utilisateur décide de le changer, le lien vers la feuille de style ne sera pas brisé. Ligne 5, false veut dire qu'il n'y a pas de dépendance. et ligne 6, 1.3.1 détermine la version de la feuille.

Voilà tout pour le header. En fait, pour récapituler, au lieu d'ajouter par nous même la feuille de style dans le header directement, on demande à WordPress de le faire pour nous.

Comment inclure des fichiers dans le footer de WordPress?

D'une manière très similaire, afin d'ajouter nos scripts dans le footer de WordPress, nous faisons à nouveau appel à une fonction, cette fois ci appellée wp_enqueue_script() (ref codex ici).

wp_enqueue_script accepte des paramètres similaires à wp_enqueue_style, c'est à dire un nom de script, une url, des dépendances et un numéro de version. Le dernier paramètre est un booléen et vous permet de spécifier où vous désirez inclure vos fichiers. Si c'est 0 (par défaut), le script sera inclus dans le header, sinon, si c'est 1, dans le footer. Dans notre cas, afin d'inclure les fichiers dans le footer, on utilisera le booléen avec la valeur 1.

Il est maintenant temps d'inclure nos scripts avec wp_enqueue_script:

  1. //Add the scripts in the footer
  2. wp_enqueue_script("jquery");
  3. wp_enqueue_script(
  4. "jquery.fancybox", WP_PLUGIN_URL."/jQuery2Wp_fancybox/jquery.fancybox.js",
  5. array("jquery"), "1.3.1",1);
  6. wp_enqueue_script(
  7. "jquery.fancyboxsetup", WP_PLUGIN_URL."/jQuery2Wp_fancybox/fancybox-setup.js",
  8. array("jquery","jquery.fancybox"), "",1);

Lignes 3 et 6, vous pouvez voir wp_enqueue_script en action. On ajoute les scripts en sépcifiant leur nom, chemin, dépendance et version, et on les places dans le footer grâce au 1 à la fin. Comme vous pouvez le voir, la FancyBox a une dépendance (jQuery) et le script d'initialisation en a 2, (jQuery et FancyBox).

Il est temps de tester.

Votre plugin est maintenant prêt à l'emploi. Si vous retournez dans l'interface d'administration des plugins et que vous l'activez, WordPress va ajouter vos fichiers aux bons endroits, et votre plugin commencera à marcher.

Comment utiliser le plugin sur des pages spécifiques seulement?

Maintenant que notre plugin est actif, WordPress va ajouter les fichiers spécifiés dans init.php dans chaque page de votre application. Alors si c'est ce que vous voulez car vous utilisez le plugin sur toutes les pages c'est très bien. Sinon, c'est un gaspillage de ressources, et cela rajoute du temps de téléchargement pour rien.

Je vais vous montrer une petite technique toute simple que j'utilise pour avoir plus de contrôle. C'est très simple.

L'astuce consiste à rassembler le code que l'on vient d'écrire, et de la placer dans une nouvelle fonction que l'on appellera FancyBox_wp_setup():

  1. //Group the code inside a function
  2. function fancybox_wp_setup(){
  3. wp_enqueue_style(
  4. "jquery.fancybox", WP_PLUGIN_URL."/jQuery2Wp_fancybox/jquery.fancybox-1.3.1.css",
  5. false, "1.3.1");
  6. wp_enqueue_script("jquery");
  7. wp_enqueue_script(
  8. "jquery.fancybox", WP_PLUGIN_URL."/jQuery2Wp_fancybox/jquery.fancybox.js",
  9. array("jquery"), "1.3.1",1);
  10. wp_enqueue_script(
  11. "jquery.fancyboxsetup", WP_PLUGIN_URL."/jQuery2Wp_fancybox/fancybox-setup.js",
  12. array("jquery","jquery.fancybox"), "",1);
  13. }

Ceci à 2 effets différents. Cela empêche WordPress d'ajouter vos fichiers de partout, ce qui est ce que l'on voulait, mais cela vous donne aussi accès à la fonction FancyBox_wp_setup(), que vous pouvez appeler sur chaque page où vous désirez utiliser le plugin.

Conclusion

Quand vous trouvez le plugin idéal pour votre nouveau design, l'intégrer dans WordPress n'est qu'à quelques lignes de code! J'espère que la prochaine fois que vous trouverez un plugin que vous souhaitez utiliser, vous vous souviendrez de cet article et que vous le transformerez en un plugin WordPress en 5 petites minutes.

Partager:

  • Tweet this
  • Buy the author a coffee
  • Bump this
  • Digg this
  • Post this on Del.icio.us
  • Post this on StumbleUpon
  • Post this on Reddit
  • Post this on Technorati
  • Post this on Google
  • Post this on Facebook
  • Email this to a friend

Vous seriez peut être aussi intéressé par::

  • Wordpress SchmancyBox Plugin
  • jQuery FaceBox Plugin
  • jQuery LightBox Plugin
  • jQuery jCarousel Plugin
  • How to Create Native Admin Tables in WordPress
  • YouTube video manager with PHP, MYSQL & jQuery

Commentaires récents

alvaro
It would be great if you did another example with some other jquery plugin. I've searched for hours and there is not much information about this, in fact, this post is the nearest thing I found about including a jquery plugin in wordpress. However I'm still not able of doing it with other plugins. So please if you write another tutorial about this let me know. Thanks!
De alvaro à 09:39 15/11/10 { Répondre }
Lindsay
Great post, its really a good start to me learning how to make a jquery gallery into a wordpress plugin!!

So in order to move to the next steps, I need to learn how to call in the image in the posts and to give them the proper jquery selector - any tutorials with that??
De Lindsay à 05:47 10/11/10 { Répondre }
Karmenka
I'm pretty new to this. When you refer to the JS snippet in Part A: where would we put this little bit of code in Wordpress? I have created my init file and everything works - But I need to put the function somewhere too don't I?
De Karmenka à 08:23 02/09/10 { Répondre }
jdmweb
@name.
This code is specific to the plugin, I therefore place it inside my little init.php. That way, everything that has to do with the plugin code and declaration is all in the same place in the plugin folder.
Regards.
Jeremy
De jdmweb à 18:44 25/05/10 { Répondre }
name
I did fine until this part:
//Hook into wp_head....etc.


Into which page do I insert this code? the init.php in my themes file or the header.php or footer.php???? Very important.
De name à 17:54 25/05/10 { Répondre }
David
I have to agree with Deluxe Blog Tips above; using wp_enqueue_script() is a much better approach. Not only does it allow you to do conditional loading better, but it helps to prevent problems like broken dependency or overwriting scripts though multiple inclusion.
De David à 23:32 17/05/10 { Répondre }
mupet
Nice tutorial, good work
De mupet à 21:18 17/05/10 { Répondre }
jdmweb
@Mark.
Thank you for your comment.

I didn't mean to say that the plugin file has to be named init.php. I reworded my sentence so it less ambiguous.

You are right about using constants for the plugin path, I updated them with the WP_PLUGIN_URL, which according to the codex refers to the server path to the plugins directory. Regards.
De jdmweb à 13:47 17/05/10 { Répondre }
Mark
@Deluxe Blog Tips.

Deluxe is right. Your plugin file DOES NOT need to be named init.php. The plugin file is declared by the comment at the start of the file, not its name. Also, there are constants you can use to get to the plugin directory, rather than using the siteurl + 'wp-content/...'. What if someone moves their wp-content folder for security reasons? Your path would be broken.
De Mark à 13:28 17/05/10 { Répondre }
jdmweb
@Amit.
If you put fancybox_wp_setup() in the head section, it will include the plugin on every page, which defeats the purpose of having a setup function really.

Usually, in any template file, I make a call to the function get_header(), which returns the header. I only have to call fancybox_wp_setup() before get_header() only on specific pages then.
De jdmweb à 11:41 17/05/10 { Répondre }
Tomasz Kowalczyk
Very nice tutorial! I am actually working at one jQuery plugin and would love to port it to WordPress!
De Tomasz Kowalczyk à 10:34 17/05/10 { Répondre }
jdmweb
@Deluxe Blog Tips.
Thank you for sharing this knowledge! I agree with you that using wp_enqueue_scripts() and wp_enqueue_style() is a better way of including scripts and styles.
I did it that way to keep it simple and because I felt it would make it easier to spot the similarities between the two approaches, but yeah you are definitely right.
De jdmweb à 10:31 17/05/10 { Répondre }
Adrian A.
@jdmweb.

No problem ;) keep up the good work
De Adrian A. à 10:27 17/05/10 { Répondre }
jdmweb
@Adrian A.
Thanks for noticing, I corrected the mistake. You are right, the function name should be the same than in the hook.
De jdmweb à 10:18 17/05/10 { Répondre }
Adrian A.
Hey there! Nice tutorial ... Just one thought: is just me or the function names from the example code you gave are different from the ones on the hook call? More precisely you use

add_action('wp_footer', 'fancybox_wp_foot');

but the function name is

function haccordion_wp_foot()

De Adrian A. à 09:41 17/05/10 { Répondre }
Deluxe Blog Tips
I think it's better using wp_print_scripts() and wp_print_styles() or wp_enqueue_scripts(), wp_enqueue_style() to add js, css file into WordPress. This way we can declare some other independent scripts or option to load them in the footer as well.
De Deluxe Blog Tips à 09:28 17/05/10 { Répondre }
Amit
Where would you recommend I include fancybox_wp_setup() in my template? In the <head> section?
De Amit à 05:39 17/05/10 { Répondre }