Les fenêtres modales sont devenues monnaie courante : pratique par exemple pour afficher en grand des images en cliquant sur leurs miniatures, il en existe une multitude avec un fonctionnement, un style et des options différentes. Pour WordPress, de nombreuses extensions remplissent cette fonction, mais il est moins connu que celui-ci embarque par défaut Thickbox, un script javascript de fenêtre modale.
Il a d’ailleurs été utilisé jusqu’à la version 3.5 pour afficher les fenêtres d’insertion de média par exemple, avant d’être remplacé par une solution interne. Mais il reste exploitable par les développeurs qui le souhaitent, et c’est ce que je vais vous montrer dans cet article avec son utilisation pour les images.
Ajouter Thickbox sur votre site
Le code sera à ajouter soit dans le functions.php de votre thème, soit dans le plugin de site (dans mu-plugins ou autre) que vous avez déjà créé (voir cet article de Julio pour en savoir plus) :
Explication :
add_thickbox() est une fonction fournie par WP qui ajoute automatiquement le script js et le style css intégrés au core. Pratique, tout est fait à notre place. Seulement pour que cela fonctionne, tous les liens qui doivent s’ouvrir dans une fenêtre modale, doivent avoir une classe “thickbox”, pour pouvoir être repérés par le script.
Pour ne pas faire l’ajout manuellement à chaque fois, on filtre le contenu renvoyé (par the_content()) avec une fonction qui va rechercher les images avec lien, et ajouter la classe automatiquement.
Les images avec lien de vos articles/pages/etc s’ouvriront dorénavant dans la fenêtre modale, qui reprend la mise en forme de l’admin WordPress.
Amélioration ?
J’ai testé ce bout de code sur un thème que je suis en train de faire, mais il est sans doute possible de l’améliorer. Mon niveau en regex est léger, et peut-être faudrait-il aussi filtrer get_the_content ? Si vous avez des suggestions, je suis preneur !
Hello
Merci pour le lien. Je te suggère de TOUJOURS mettre du code dans un hook, ici ta fonction “add_thickbox()” n’est pas hookée, mets là plutôt dans le hook “plugins_loaded”(si plugin/mu-plugins) ou “init” (plugins/muplugins/themes) ou encore “setup_theme”(theme only)
Jamais il ne faut mettre de code là, même si “oui mais ça marche” ^^ Tout doit être sous un hook, WP Style :D
Je mets à jour le code tout de suite
add_action( ‘init’, ‘add_thickbox’ ); suffit
Inutile de passer une fonction dans une fonction ;)