Tout savoir sur WordPress
Tutoriel WordPress

Autoriser les shortcodes dans les widgets

Par défaut, il n’est pas possible d’insérer un shortcode au sein d’un widget. Grâce à cette astuce, WordPress sera capable d’interpréter les shortcodes dans les widgets.

Jusqu’à présent dans WordPress, les widgets n’interprètent pas les shortcodes. Par exemple, si vous essayez d’insérer [mon-shortcode=”valeur”] dans le widget “Texte”, il le retournera comme tel sur votre site.

Dans ce cas, comment faire en sorte que les shortcodes soient interprétés par les widgets ?

Copiez le code ci-dessous dans le fichier functions.php de votre thème pour autoriser les shortcodes dans les widgets :

[pastacode lang=”php” message=”” highlight=”” provider=”manual”]


if ( !is_admin() ) {
    add_filter('widget_text', 'do_shortcode', 11);
}

[/pastacode]

Cet article a été mis à jour il y a 4537 jours - Il n'est peut être plus à jour !

Article écrit par Jonathan B.

Jonathan est le co-fondateur de WP Media, startup connue pour être l’auteur de WP Rocket et Imagify. Il est aussi co-organisateur du WordCamp Lyon et Paris.

25 Commentaires

    • Je passe beaucoup de temps sur le web et sur des sites américains pour trouver certaines astuces.

      Et surtout, je n’hésite pas à aller dans le code de WordPress pour justement découvrir et apprendre de nouvelles astuces !

  1. +1, la lecture du core est la plus enrichissante, encore faut-il aimer lire du code comme on lis un roman ;)

  2. J’ai fait ce que vous avez dit et mon site à planter ! Que faire ? C’est écrit : Parse error: syntax error, unexpected ‘<' in /htdocs/public/www/wp-content/themes/Backstreet/functions.php on line 301

  3. @Mehdi : Et il y a quoi à la ligne 301 ?

    Vu l’erreur, vous avez mal copier le code ou vous avez écraser une partie de votre code existant.

  4. bonjour et merci pour vos tutos, juste une question svp, où (à quelle emplacement) devons nous coller le code que vous nous fournissez dans le fichier functions.php svp ?

  5. Je vous remercie pour votre réponse mais en fait j’ai essayé de coller le code entre 2 fonctions du fichier fonctions.php mais ça n’a pas fonctionne (page blanche)… d’où ma question :-p
    Je suis dsl mais comme vous le comprenez : je débute !
    En tout cas merci pour votre blog et vos rapidité de réponse !!!

  6. @Wa: Il se place à n’importe quel endroit du moment que vous le placez dans le fichier functions.php.

  7. @Wa : si vous avez une page blanche, c’est que vous avez copié le code au mauvais endroit ^^

    Pour être certain de ne pas avoir de problème, copiez le code juste en dessous de la balises <?php

  8. merci Jonathan pour vos indications, malgré tout cela ne fonctionne pas sur mon blog, en effet, lorsque je modifie le fichier “functions.php” en y collant les lignes de code de votre tuto dedans, j’obtiens une page blanche, même quand je colle le code sous la balise <?php
    Pour être bien sûr que je ne fais pas une erreur, le fichier "functions.php" est bien celui qui se situe dans le répertoire "wp-includes" ??
    Par avance merci pour votre aide ;-) !

  9. @Wa : Oula non malheureux, il ne s’agit pas du dossier “wp-includes”, mais du fichier functions.php de votre thème, c’est à dire “wp-content/themes/nom-du-theme/functions.php”.

  10. Salut,
    ça ne fonctionne pas pour moi.

    J’ai bien mis le code dans functions.php de mon theme. Puis j’ai mis le shortcode du slideshow dans black studio TinyMCE pour qu’il s’affiche dans la sidebar. Et ma page affiche le shortcode ?? screugneugneu…
    Merci de votre aide.

  11. @Jonathan : c’est un widget WYSIWYG éditeur de texte et html. Merci tout de même, j’ai trouvé une solution en PHP.
    @+

  12. @Pierro : “black studio TinyMCE”, ça correspond à quoi ? C’est un widget ça ?

    Si ce n’est pas le cas, c’est normal que ça ne fonctionne pas ;)

  13. Bonjour,

    Ce code ne fonctionne pas sur un widget que j’ai développé moi même, j’imagine que dans le “add filter” il faut remplacer le “widget_text” par quelque chose d’autre mais je ne vois pas quoi, auriez-vous une idée ?

    Cordialement,

  14. @Jinx: Ce code fonctionne uniquement pour le widget texte de WordPress. Si vous voulez faire la même chose avec votre widget, vous allez devoir gérer la sortie HTML avec un apply_filters et faire un add_filter( ‘nom_de_votre_filtre’, ‘do_shortcode’ );

  15. Bonjour,
    J’arrive très longtemps après la bataille, et pourtant votre article est pile ce que je cherchais.
    Mais après avoir placé votre bout de code dans le fichier functions.php (testé via l’éditeur de l’admin, et également directement sur le fichier via ftp), le shortcode n’apparaît que en commentaire.
    Ce que j’écrit dans mon widget text :
    Ce qui apparaît dans le code source de ma page en ligne, via l’inspecteur de Chrome :
    Et sur la page, rien n’apparaît.
    Merci d’avance pour votre aide.