Formation PUB020 : WordPress, 2023 Les shortcodes WordPress

29.4 Les shortcodes avec paramètres


Il est possible de rendre nos shortcodes plus flexibles en leur ajoutant des paramètres. Par exemple, le shortcode suivant :

[monprefixeboutoncolore url="https://christianelagace.com" couleur="bleu"]

permettra de générer un lien ayant l'apparence d'un bouton bleu menant vers l'URL mentionné.

Paramètres reçus par la fonction de rappel

La fonction de rappel d'un shortcode paramétrable recevra toujours un seul paramètre et ce, peu importe le nombre de valeurs passées dans le shortcode. Ce paramètre est en fait un tableau associatif contenant toutes les valeurs passées dans le shortcode.

WordPress (PHP)

/**
 * Définit un shortcode qui affiche un bouton coloré paramétrable.
 * @author Christiane Lagacé <christiane.lagace@hotmail.com>
 *
 * Utilisation : [monprefixeboutoncolore] ou [monprefixeboutoncolore url="https://christianelagace.com" couleur="bleu"]
 *
 * @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.
 *
 * @return String Code html généré par le shortcode
 */
function monprefixe_bouton_colore( $atts ) {
    ...
}
 
add_shortcode( 'monprefixeboutoncolore', 'monprefixe_bouton_colore' );

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

WordPress (PHP)

class Monprefixe_Mon_Extension {
    ...
 
    public function __construct() {
        add_shortcode( 'monprefixeboutoncolore', array( $this, 'shortcode_bouton_colore' ) );
        ...
    }
 
    public function shortcode_bouton_colore( $atts ) {
        ...
    }
}

Si on utilise le shortcode comme suit : [monprefixeboutoncolore url="https://christianelagace.com" couleur="bleu"], le paramètre $atts sera un tableau associatif contenant les éléments suivants :

PHP

'url'     => 'https://christianelagace.com'
'couleur' => 'bleu'

Valeurs par défaut des paramètres

Il faut fournir une valeur par défaut à chacun des paramètres du shortcode.

Pour y parvenir, on utilisera la fonction WordPress shortcode_atts(). Cette fonction reçoit deux paramètres obligatoires et un optionnel :

  • Le premier paramètre obligatoire est un tableau associatif contenant la liste des paramètres supportés et leur valeur par défaut. Chaque paramètre sera donné sous la forme cle => valeur, où cle correspond au nom du paramètre.
    PHP

    array(
        'url'     => '',
        'couleur' => 'gris',
    )

    Notez la présence de la virgule après le dernier élément. Cette virgule est optionnelle. PHP la permet pour simplifier le travail des programmeur lorsqu'on place une paire de valeurs par ligne (avez-vous déjà oublié d'effacer la virgule après le dernier élément lors d'un copier-coller ???).

  • Le deuxième paramètre obligatoire est un tableau contenant toutes les valeurs reçues (c'est le paramètre de la fonction de rappel).
  • Le troisième paramètre est optionnel. Il existe depuis WordPress 3.6. Il contient le nom du shortcode (attention : pas le nom de la fonction de rappel). La présence de ce paramètre permettra la création d'un nouveau hook, ce qui facilitera le travail des gens qui souhaiteraient apporter des ajustements au shortcode sans devoir tout copier-coller. Le nom du nouveau hook sera toujours shortcode_atts_ suivi du nom du shortcode (ex : shortcode_atts_monprefixeboutoncolore).

La fonction shortcode_atts() s'occupera de remplacer, pour chaque paramètre, la valeur par défaut par la valeur reçue, s'il y a lieu. On obtiendra un nouveau tableau associatif donnant la valeur à utiliser pour chaque paramètre.

L'appel à la fonction shortcode_atts() ressemblera à ceci.

WordPress (PHP)

$args = shortcode_atts( array(
    'url'     => '',
    'couleur' => 'gris',
), $atts, 'monprefixeboutoncolore' );

Extraire les paramètres dans des variables

Dans l'extrait de code précédent, nous obtenons un tableau associatif nommé $args.

Pour faciliter notre travail avec les valeurs de ce tableau, il est intéressant - mais non obligatoire - d'initialiser une variable pour chacun des éléments.

WordPress (PHP)
$url = $args['url'];
$couleur = $args['couleur'];

Nous avons désormais deux variables : $url et $couleur qui ont été initialisées à partir des paramètres dans le shortcode. Dans le cas où aucune valeur n'est passée pour un des paramètres, sa valeur par défaut sera utilisée.

Utilisation des paramètres

Voilà, nous pouvons maintenant utiliser nos variables dans le code afin de générer le HTML.

WordPress (PHP)

/**
 * Définit un shortcode qui affiche un bouton coloré paramétrable.
 * @author Christiane Lagacé <christiane.lagace@hotmail.com>
 *
 * Utilisation : [monprefixeboutoncolore] ou [monprefixeboutoncolore url="https://christianelagace.com" couleur="bleu"]
 *
 * @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.
 *
 * @return String Code html généré par le shortcode
 */

function monprefixe_bouton_colore( $atts ) {
 
    $args = shortcode_atts( array(
        'url'     => '',
        'couleur' => 'gris',
    ), $atts, 'monprefixeboutoncolore' );
 
    $url = $args['url'];
    $couleur = $args['couleur'];
 
    $libelle = __( "Cliquez ici", "mon-domaine-de-localisation" );
    $code_html = "<a href='$url' class='lienbouton $couleur'>$libelle</a>";
 
    return $code_html;
}
 
add_shortcode( 'monprefixeboutoncolore', 'monprefixe_bouton_colore' );

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

WordPress (PHP)

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

Feuille de style

Pour que ce shortcode fonctionne, vous devrez lui associer une feuille de style.

WordPress (PHP)

/**
 * Charge les scripts et feuilles de style propres au thème.
 * @author Christiane Lagacé <christiane.lagace@hotmail.com>
 *
 * Utilisation : add_action('wp_enqueue_scripts', 'monprefixe_charger_css_js_web');
 */
function monprefixe_charger_css_js_web() {
    wp_enqueue_style( 'monprefixeboutoncolore', get_stylesheet_directory_uri() . '/css/monprefixe-bouton-colore.css' );
}
 
add_action('wp_enqueue_scripts', 'monprefixe_charger_css_js_web');

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

WordPress (PHP)

wp_enqueue_style( 'monprefixemonextension', plugins_url( 'css/mon-extension.css', __FILE__ ) );

Et voici le contenu de monprefixe-bouton-colore.css (ou mon-extension.css) qui permettra de styliser les liens transformés en boutons :

CSS

/*
Theme Name: montheme
Description: styles pour le shortcode monprefixeboutoncolore
*/
 
a.lienbouton {
    color: #444;
    border: 1px solid #BBBBBB;
    border-radius: 8px;
    padding: 5px 10px;
    text-decoration: none;
}
 
a.lienbouton.gris {
    background-color: #E3E3E3;
}
 
a.lienbouton.bleu {
    background-color: #4679BD;
    color: white;
}
 
a.lienbouton.vert {
    background-color: #9EDA46;
}

Résultats obtenus

Ainsi, si vous entrez le texte suivant dans une page ou un article WordPress :

texte entré dans une page WordPress 

[monprefixeboutoncolore]
[monprefixeboutoncolore url="https://christianelagace.com" couleur="bleu"]
[monprefixeboutoncolore url="https://christianelagace.com" couleur="vert"]
[monprefixeboutoncolore url="https://christianelagace.com" couleur="jenesaispas"]

Vous obtiendrez le résultat suivant (en réalité, les boutons seront cliquables mais il s'agit ici d'une image) :

Exemple de lien sous forme de bouton

On voit que le premier bouton, qui n'a pas reçu de paramètre, utilise les valeurs par défaut.

Remarquez que puisque la dernière couleur n'est pas définie dans le CSS, aucune couleur de fond n'est utilisée, ce qui donne un bouton blanc.

▼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