Formation PUB020 : WordPress, 2023 Les shortcodes WordPress

29.5 Les shortcodes avec contenu (Enclosing shortcodes)


On sait qu'en HTML, il existe deux types de balises :

  • Les balises fermées. Il s'agit de balises uniques ou auto-fermantes.
    Ex : <img ... />
  • Les balises ouvertes, pour lesquelles on peut placer du texte entre la balise ouvrante et la balise fermante.
    Ex : <p>Contenu du paragraphe</p>

Ces mêmes possibilités sont offertes avec les shortcodes :

  • shortcode fermé (en anglais : self-closing shortcode).
    Ex : [shortcodeferme]
  • shortcode ouvert ou shortcode avec contenu (en anglais : enclosing shortcode).
    Ex : [shortcodeouvert]Texte à inclure dans le shortcode[/shortcodeouvert]

Un shortcode avec contenu peut être intéressant lorsqu'on doit effectuer une opération sur du texte plus ou moins long.

C'est le cas du shortcode [caption] présent dans le noyau WordPress, qui a pour but d'ajouter une légende stylisée sous une image.

Pour y parvenir, ce shortcode englobe l'image et sa légende dans une division. Il faut donc trouver moyen de passer au shortcode la balise complète de l'image pour qu'elle puisse l'insérer entre le <div> et le </div>.

L'utilisation d'un paramètre serait problématique puisque la balise <img> est complexe. Les développeurs WordPress ont donc choisi d'utiliser un shortcode avec contenu.

Par exemple, si vous entrez le texte suivant dans votre page WordPress :

Texte entré dans une page WordPress

[caption ... caption="Légende à afficher"]<img ... />[/caption]

Le shortcode générera le code HTML suivant :

HTML

<div class="...">
    <img ... />
    <p class="wp-caption-text">Légende à afficher</p>
</div>

On voit donc que le contenu du shortcode (ici : <img ... />) est repris tel quel dans le bloc de code HTML généré.

Programmation d'un shortcode avec contenu

La fonction de rappel d'un shortcode avec contenu recevra un second paramètre qui représente le contenu du shortcode. On pourra utiliser ce paramètre dans notre code à l'endroit approprié.

WordPress (PHP)

/**
 * Définit un shortcode qui affiche un bouton coloré paramétrable avec contenu.
 * @author Christiane Lagacé <christiane.lagace@hotmail.com>
 *
 * Utilisation : [monprefixeboutoncolore] ou [monprefixeboutoncoloreaveccontenu url="https://christianelagace.com" couleur="vert"]<img src="..." alt="Logo de Christiane" />Site de Christiane[/monprefixeboutoncoloreaveccontenu]
 *
 * @param array $atts Tableau des attributs du shortcode :

 *                    url : url auquel le bouton mène.
 *                    couleur : couleur de fond du bouton. Doit correspondre à une classe CSS existante.
 *        string $content Contenu du shortcode
 *
 * @return String Code html généré par le shortcode
 */
function monprefixe_bouton_colore_avec_contenu( $atts, $content = null ) {
 
    $args = shortcode_atts( array(
        'url'     => '',
        'couleur' => 'gris',
    ), $atts, 'monprefixeboutoncoloreaveccontenu' );
 
    $url = $args['url'];
    $couleur = $args['couleur'];
 
    if ( empty( $content ) ) {
         $content = __('Cliquez ici', 'mon-domaine-de-localisation');
    }
  
    $code_html = "<a href='$url' class='lienbouton $couleur'>$content</a>";
 
    return $code_html;
}
 
add_shortcode( 'monprefixeboutoncoloreaveccontenu', 'monprefixe_bouton_colore_avec_contenu' );

ou, si le shortcode est défini dans la classe d'une extension :

WordPress (PHP)

class Monprefixe_Mon_Extension {
    ...
 
    public function __construct() {
        add_shortcode( 'monprefixeboutoncoloreaveccontenu', array( $this, 'shortcode_bouton_colore_avec_contenu' ) );
        ...
    }
 
    public function shortcode_bouton_colore_avec_contenu( $atts, $content = null ) {
 
        $args = shortcode_atts( array(
            'url'     => '',
            'couleur' => 'gris',
        ), $atts, 'monprefixeboutoncoloreaveccontenu' );
 
        $url = $args['url'];
        $couleur = $args['couleur'];
 
        if ( empty( $content ) ) {
             $content = __('Cliquez ici', 'mon-domaine-de-localisation');
        }
  
        $code_html = "<a href='$url' class='lienbouton $couleur'>$content</a>";
 
        return $code_html;
    }
}

Cette fois, notre shortcode peut générer un bouton avec le texte de notre choix, que ce soit un seul mot ou une série de caractères plus ou moins longue.

On pourrait même ajouter une image sur le bouton si tel était notre désir, comme dans cet exemple :

texte entré dans une page WordPress

[monprefixeboutoncoloreaveccontenu url="https://christianelagace.com" couleur="vert"]<img src="..." alt="Logo de Christiane" />Site de Christiane[/monprefixeboutoncoloreaveccontenu]

Cette image représente ce que vous verriez à l'écran :

Lien sous forme de bouton avec image

Pour plus d'information

« Shortcode API - Enclosing vs self-closing shortcodes ». Codex WordPress. http://codex.wordpress.org/Shortcode_API#Enclosing_vs_self-closing_shortcodes

▼Publicité

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre