Développer et utiliser les « shortcodes » WordPress

Qu'est-ce qu'un « shortcode » ?

Un « shortcode » WordPress, c'est un petit bout de code (non, sans blague ;-)) qui est exécuté lorsqu'une série de caractères donnée est rencontrée. La série de caractères sera toujours entourée de crochets carrés (ex : [gallery]). Dans les faits, c'est cette série de caractères entourée de crochets carrés qu'on appelle shortcode.

▼Publicité

Un de mes étudiants a proposé une définition intéressante (merci Seydou !) :

Les shortcodes sont comme des variables qui contiennent du code exécutable.

Lorsqu'on entre le shortcode dans une page, un article, un pied de page, etc., l'API WordPress remplace les caractères du shortcode par l'information générée par le code qui lui est associé.

Le shortcode peut afficher un simple texte. Il peut également effectuer un traitement plus ou moins complexe à partir d'informations pouvant être tirées de la BD.

Par exemple, si vous entrez le shortcode [gallery] dans le texte d'un article ou d'une page, WordPress affichera les images associées à l'article ou à la page.

Il est parfois possible de personnaliser le shortcode en lui indiquant certaines valeurs, comme par exemple : [gallery columns="2" size="medium"]. La possibilité de personnaliser un shortcode dépend de la façon dont il a été programmé.

Création d'un shortcode personnalisé

La création d'un shortcode nécessite trois étapes. J'ai ajouté des couleurs qui sont reprises dans les exemples plus bas. Ceci permet de voir quelles lignes de code correspondent à chacune des étapes.

  • La déclaration de la fonction qui devra être exécutée par le shortcode. On appellera cette fonction « fonction de rappel » ou, en anglais, « callback function »;
  • L'appel à la méthode add_shortcode() qui indiquera à WordPress qu'il doit faire le lien entre une chaîne de caractères donnée et la fonction de rappel;
  • L'ajout du shortcode à un endroit donné du site Web : dans une page, dans un article, dans le pied de page, etc.

Ex :

fichier functions.php d'un thème enfant WordPress (PHP)

/**

 * Définit un shortcode qui affiche un texte bidon pour fins de démonstration.

 *

 * Utilisation : [monprefixemonshortcode]

 * Suppositions critiques : le style .textespecial doit définir l'apparence du texte

 *

 * @author Annie Gagnon <anniegagnon@gmail.com>

 * @return String Code html généré par le shortcode

 *

 */

function monprefixe_monshortcode( ) {

    $code_html = "<span class='textespecial'>Voici le texte qui sera affiché à la place du shortcode</span>";

    return $code_html;

}

 

add_shortcode( 'monprefixemonshortcode', 'monprefixe_monshortcode' );

texte entré dans une page WordPress 

Lorem ipsum 

[monprefixemonshortcode]

dolor sit amet.

Où coder les shortcodes ?

La déclaration de la fonction de rappel ainsi que l'appel à add_shortcode() seront généralement faits dans le fichier functions.php de votre thème enfant ou mieux, dans une extension.

Attention : si vous développez un thème que vous souhaitez distribuer, les bonnes pratiques veulent que vous n'utilisiez pas les shortcodes dans le functions.php du thème.

Malheureusement, cette règle est souvent escamotée par les concepteurs de thèmes. Elle a pourtant une raison d'être simple : puisqu'un site WordPress peut changer de thème facilement et que les shortcodes sont, la plupart du temps, écrits directement dans la BD (ex : dans le texte d'une page ou d'un article), le fait de changer de thème empêcherait le bon fonctionnement des pages ou articles utilisant les shortcodes de l'ancien thème. Si, par contre, le shortcode est écrit dans une extension, le changement de thème n'affectera pas son bon fonctionnement.

Nomenclature

Le nom du shortcode ainsi que le nom de sa fonction de rappel seront tous deux écrits en lettres minuscules. Ils seront également préfixés pour éviter tout conflit de nom avec les shortcodes et fonctions du thème ou des extensions utilisées.

Par contre :

  • le nom de la fonction de rappel utilisera des barres de soulignement pour séparer les mots (c'est le standard de programmation WordPress);
  • le nom du shortcode s'écrira en un seul mot. Il ne doit pas utiliser de traits d'unions pour séparer les mots. En effet, tel que documenté dans le Shortcode API du Codex WordPress, dans certains contextes, WordPress pourrait confondre les shortcodes [tag] et [tag-a]. La documentation permet l'utilisation de barres de soulignement (ex : [tag_a]) mais on préférera généralement utiliser un seul mot (ex : [taga]).

Fonction de rappel

La fonction de rappel ne doit rien afficher (pas de commande echo). Plutôt, elle doit bâtir la chaîne de caractères HTML qui sera affichée lorsque l'API WordPress rencontrera le shortcode. C'est cette chaîne qui sera retournée par la fonction de rappel.

Fonction de rappel définie dans une classe

Lorsqu'un shortcode est codé dans une extension, sa fonction de rappel sera une méthode codée dans une classe. À ce moment, le second paramètre de add_shortcode() devra être un tableau. Le premier élément du tableau sera $this, soit l'objet sur lequel on travaille, et le second, le nom de la méthode.

WordPress (PHP)

class Monprefixe_Mon_Extension {

 

    public function __construct() {

        add_shortcode( 'monprefixefairequelquechose', array( $this, 'faire_quelque_chose' );

        ...

    }

   

    public function faire_quelque_chose() {

        ...

    }

 

}

Remarquez que dans cet exemple, le nom du shortcode débute par un préfixe pour le distinguer des autres shortcodes. La méthode de rappel, quant à elle, n'a pas besoin de débuter par un préfixe puisqu'elle est définie dans une classe, ce qui enlève le risque de conflit de nom avec d'autres fonctions.

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="http://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 reçues.

Ex :

WordPress (PHP)

/**

 * Définit un shortcode qui affiche un bouton coloré paramétrable.

 *

 * Utilisation : [monprefixeboutoncolore]

 *

 * @author Annie Gagnon

 * @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 ) {

        ...

    }

}

Pour le shortcode donné en exemple :

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

le paramètre $atts sera un tableau associatif contenant les éléments suivants :

PHP

'url'     => 'http://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.

    Ex :

    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. Notez que pour l'instant, nous ne récupérons pas la valeur de retour de la fonction. Nous le ferons à l'étape suivante.

WordPress (PHP)

shortcode_atts( array(

    'url'     => '',

    'couleur' => 'gris',

), $atts, 'monprefixeboutoncolore' )

Extraire les paramètres dans des variables

PHP met à notre disposition une fonction très utile : extract(). Cette fonction permet de prendre chaque valeur d'un tableau associatif afin d'initialiser une variable dont le nom correspond à la clé dans le tableau associatif.

Il est d'usage de placer l'appel à shortcode_atts() directement dans la fonction extract(). Ainsi, le tableau associatif retourné par shortcode_atts() devient le paramètre de extract().

Ex :

WordPress (PHP)

extract( shortcode_atts( array(

    'url'     => '',

    'couleur' => 'gris',

), $atts, 'monprefixeboutoncolore' ) );

Nous avons désormais deux variables : $url et $couleur. Leur valeur sera celle passée en paramètre 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.

Ex :

WordPress (PHP)

function monprefixe_bouton_colore( $atts ) {

    ob_start();

 

    extract( shortcode_atts( array(

        'url'     => '',

        'couleur' => 'gris',

    ), $atts, 'monprefixeboutoncolore' ) );

 

    $libelle = __( "Cliquez ici", "mon-domaine-de-localisation" );

    $code_html = "<a href='$url' class='lienbouton $couleur'>$libelle</a>";

 

    $output = ob_get_clean();

    return $code_html . $output;

}

 

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 ) {

        ob_start();

 

        extract( shortcode_atts( array(

            'url'     => '',

            'couleur' => 'gris',

        ), $atts, 'monprefixeboutoncolore' ) );

 

        $libelle = __( "Cliquez ici", "mon-domaine-de-localisation" );

        $code_html = "<a href='$url' class='lienbouton $couleur'>$libelle</a>";

 

        $output = ob_get_clean();

        return $code_html . $output;

    }

}

Feuille de style

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

Ex :

WordPress (PHP)

/**

 * Charge les scripts et feuilles de style propres au thème.

 *

 * Utilisation : add_action('wp_enqueue_scripts', 'monprefixe_charger_css_js_web');

 *

 * @author Annie Gagnon

 *

 */

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="http://christianelagace.com" couleur="bleu"]

[monprefixeboutoncolore url="http://christianelagace.com" couleur="vert"]

[monprefixeboutoncolore url="http://christianelagace.com" couleur="rouge"]

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.

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é ou « self-closing shortcode » (ex : [shortcodeferme])
  • shortcode ouvert ou shortcode avec contenu ou « 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 présent dans l'API 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 ... />

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 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 représentant le contenu sur lequel le shortcode s'applique. On pourra utiliser ce paramètre dans notre code à l'endroit approprié.

Ex :

WordPress (PHP)

function monprefixe_bouton_colore_avec_contenu( $atts, $content = null ) {

    ob_start();

 

    extract( shortcode_atts( array(

        'url'     => '',

        'couleur' => 'gris',

    ), $atts, 'monprefixeboutoncoloreaveccontenu' ) );

 

    if ( empty( $content ) ) {

         $content = __('Cliquez ici', 'mon-domaine-de-localisation');

    }

  

    $code_html = "<a href='$url' class='lienbouton $couleur'>$content</a>";

 

    $output = ob_get_clean();

    return $code_html . $output;

}

 

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 ) {

        ob_start();

 

        extract( shortcode_atts( array(

            'url'     => '',

            'couleur' => 'gris',

        ), $atts, 'monprefixeboutoncoloreaveccontenu' ) );

 

        if ( empty( $content ) ) {

             $content = __('Cliquez ici', 'mon-domaine-de-localisation');

        }

  

        $code_html = "<a href='$url' class='lienbouton $couleur'>$content</a>";

 

        $output = ob_get_clean();

        return $code_html . $output;

    }

}

Cette fois, notre shortcode peut générer un bouton présentant 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="http://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

Utiliser un shortcode dans un fichier modèle

Le but d'un shortcode, c'est de remplacer une chaîne de caractère dans une page ou un article par du texte obtenu par une programmation plus ou moins élaborée. Mais que faire si on désire utiliser un shortcode par programmation, comme par exemple dans un fichier modèle (ex : footer.php) ?

La fonction do_shortcode() nous permettra d'utiliser le shortcode sans devoir tout reprogrammer.

fichier modèle WordPress (PHP)

$libelle = __( "Site de Christiane", "mon-domaine-de-localisation" );

<?php echo ( do_shortcode( '[monprefixeboutoncoloreaveccontenu url="http://christianelagace.com"]$libelle[/monprefixeboutoncoloreaveccontenu]' ) ); ?>

Grâce à do_shortcode(), le code de la fonction de rappel sera exécuté tout en traitant les paramètres (url="http://christianelagace.com"]) et le contenu (Site de Christiane), ce qui n'aurait pas été possible si on avait appelé directement la fonction de rappel.

Pour plus d'information

« fr:Shortcode ». Codex WordPress. http://codex.wordpress.org/fr:Shortcode

« Shortcodes WordPress : Le guide ultime pour emmener votre blog au niveau supérieur ». WP Thèmes Pro. http://wp-themes-pro.com/shortcode-wordpress/

« Create Custom Shortcodes for WordPress in Two Minutes ». Design festival. http://designfestival.com/create-custom-shortcodes-for-wordpress-in-two-minutes

« WordPress Shortcodes: A Complete Guide ». Smashing magazine. http://wp.smashingmagazine.com/2012/05/01/wordpress-shortcodes-complete-guide/

« WordPress Shortcodes: A Complete Guide ». Smashing magazine. http://wp.smashingmagazine.com/2012/05/01/wordpress-shortcodes-complete-guide/

« Shortcodes Should Never Be Included With Themes. Period. ». ThemeLab. http://www.themelab.com/put-shortcodes-in-a-plugin/

« Créer un shortcode personnalisé dans WordPress avec add_shortcode ». Pierre Saïkali. http://saika.li/creer-shortcode-personnalise-wordpress/#.UoZQkxqZaSo

« How to filter shortcodes in WordPress 3.6 ». Sumobi. http://sumobi.com/how-to-filter-shortcodes-in-wordpress-3-6/

« Add Stylesheets To WordPress Correctly ». paulund. http://www.paulund.co.uk/add-stylesheets-to-wordpress-correctly

« Shortcode API ». Codex WordPress. http://codex.wordpress.org/Shortcode_API#Enclosing_vs_self-closing_shortcodes

« Function Reference/do shortcode ». Codex WordPress. http://codex.wordpress.org/Function_Reference/do_shortcode

Merci de partager ! Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInPin on PinterestShare on StumbleUponEmail this to someone
Catégories

11 commentaires

  1. Absolu

    Bonjour,

    Intéressant et clairement expliqué, par contre j’ai un petit souci :
    Voulant générer une div englobante, et souhaitant conserver la génération automatique des paragraphes puisque mes div contiendront un h2 suivi d’un p, j’obtiens au final ma div englobant bien mon h2 et mon p, mais se coltinant en plus un p vide avant mon h2 et un après mon p…
    Soit :

    titre
    paragraphe

    Un str_replace sur le content n’y change rien…

    ^^

  2. Christiane Lagacé

    Bonjour,

    Merci de nous avoir partagé cette info.

    La génération automatique de marques de paragraphes est en effet très gênante. Il faudrait que j’écrive un article sur les solutions à ce problème.

    Christiane

  3. Bonjour,

    Merci beaucoup pour toutes ces informations !
    Pourriez-vous m’aidez, si vous le savez, à résoudre l’un de mes problèmes sur WordPress? Cela reprend les shortcodes, bien entendu ! 🙂
    Je viens d’installer le plugin « WP-Pro-Quiz » qui crée des quiz. Et les seuls « liens » que je peux avoir pour chacun de mes quiz, sont shortcode.
    Et je ne sais absolument pas comment mettre ces quiz sur une page de mon site, puisqu’il n’y a aucun lien… 🙁 Seulement un shortcode.
    Comment puis-je faire pour utiliser un shortcode comme lien?
    Merci d’avance,
    Pauline

    • Christiane Lagacé

      Bonjour Pauline,

      Je ne connaise pas WP-Pro-Quiz. Cependant, le principe avec les shortcodes est toujours le même : vous devez insérer le shortcode tel quel, incluant les crochets carrés, à l’endroit où vous souhaitez que le quiz apparaisse. Lors de l’affichage d’une page contenant un shortcode, il remplacera le shortcode par le code correspondant, c’est-à-dire, dans votre cas, par le quiz en question.

      Par exemple, dans les screenshot de WP-Pro-Quiz, si vous souhaitez afficher le quiz « Demo Quiz 1 » sur une page donnée, vous devez éditer cette page et y inscrire [WpProQuiz2] (le screenshot laisse croire qu’il y a un espace mais j’en doute car ce serait assez inhabituel…).

      Bonne chance !

      Christiane

  4. Bonsoir Christiane,

    Grâce à votre article, je commence à cerner un peu mieux mon problème !
    Utilisant WordPress depuis peu, je tente de décortiquer le code pour me familiariser à cet outil et l’adapter à mes exigences de contenu et de graphisme.
    Mais je bute sur un point précis qui est la longueur d’une de mes légendes (coupée en plein milieu) dans une galerie-photo.
    Je pensais que c’était lié à la longueur d’extrait – limitée – or j’avais déjà changé ces paramètres et il s’avère que cette légende n’est incomplète que lorsque le shortcode suivant est activé :

    function kadence_gallery($attr) {
    $post = get_post();

    static $instance = 0;
    $instance++;

    if (!empty($attr[‘ids’])) {
    if (empty($attr[‘orderby’])) {
    $attr[‘orderby’] = ‘post__in’;
    }
    $attr[‘include’] = $attr[‘ids’];
    }

    $output = apply_filters(‘post_gallery’,  », $attr);

    if ($output !=  ») {
    return $output;
    }

    if (isset($attr[‘orderby’])) {
    $attr[‘orderby’] = sanitize_sql_orderby($attr[‘orderby’]);
    if (!$attr[‘orderby’]) {
    unset($attr[‘orderby’]);
    }
    }

    extract(shortcode_atts(array(
    ‘order’ => ‘ASC’,
    ‘orderby’ => ‘menu_order ID’,
    ‘id’ => $post->ID,
    ‘itemtag’ =>  »,
    ‘icontag’ =>  »,
    ‘captiontag’ =>  »,
    ‘columns’ => 3,
    ‘size’ => ‘full’,
    ‘include’ =>  »,
    ‘exclude’ =>  »
    ), $attr));

    $id = intval($id);

    if ($order === ‘RAND’) {
    $orderby = ‘none’;
    }

    if (!empty($include)) {
    $_attachments = get_posts(array(‘include’ => $include, ‘post_status’ => ‘inherit’, ‘post_type’ => ‘attachment’, ‘post_mime_type’ => ‘image’, ‘order’ => $order, ‘orderby’ => $orderby));

    $attachments = array();
    foreach ($_attachments as $key => $val) {
    $attachments[$val->ID] = $_attachments[$key];
    }
    } elseif (!empty($exclude)) {
    $attachments = get_children(array(‘post_parent’ => $id, ‘exclude’ => $exclude, ‘post_status’ => ‘inherit’, ‘post_type’ => ‘attachment’, ‘post_mime_type’ => ‘image’, ‘order’ => $order, ‘orderby’ => $orderby));
    } else {
    $attachments = get_children(array(‘post_parent’ => $id, ‘post_status’ => ‘inherit’, ‘post_type’ => ‘attachment’, ‘post_mime_type’ => ‘image’, ‘order’ => $order, ‘orderby’ => $orderby));
    }

    if (empty($attachments)) {
    return  »;
    }

    if (is_feed()) {
    $output = « \n »;
    foreach ($attachments as $att_id => $attachment) {
    $output .= wp_get_attachment_link($att_id, $size, true) . « \n »;
    }
    return $output;
    }
    $gallery_rn = (rand(10,100));

    $output .=  »;

    if ($columns == ‘2’) {$itemsize = ‘tcol-lg-6 tcol-md-6 tcol-sm-6 tcol-xs-12 tcol-ss-12’; $imgsize = 559;}
    else if ($columns == ‘3’){ $itemsize = ‘tcol-lg-4 tcol-md-4 tcol-sm-4 tcol-xs-6 tcol-ss-12’; $imgsize = 366;}
    else if ($columns == ‘6’){ $itemsize = ‘tcol-lg-2 tcol-md-2 tcol-sm-3 tcol-xs-4 tcol-ss-6’; $imgsize = 240;}
    else if ($columns == ‘8’ || $columns == ‘9’ || $columns == ‘7’){ $itemsize = ‘tcol-lg-2 tcol-md-2 tcol-sm-3 tcol-xs-4 tcol-ss-4′; $imgsize = 230;}
    else if ($columns == ’12’ || $columns == ’11’){ $itemsize = ‘tcol-lg-1 tcol-md-1 tcol-sm-2 tcol-xs-2 tcol-ss-3′; $imgsize = 100;}
    else if ($columns == ’15’ || $columns == ’12’){ $itemsize = ‘tcol-lg-1 tcol-md-1 tcol-sm-2 tcol-xs-2 tcol-ss-3’; $imgsize = 100;}
    else if ($columns == ‘5’){ $itemsize = ‘tcol-lg-25 tcol-md-25 tcol-sm-3 tcol-xs-4 tcol-ss-6’; $imgsize = 240;}
    else {$itemsize = ‘tcol-lg-3 tcol-md-3 tcol-sm-4 tcol-xs-6 tcol-ss-12’; $imgsize = 269;}

    $i = 0;
    foreach ($attachments as $id => $attachment) {
    $attachment_url = wp_get_attachment_url($id);
    $image = aq_resize($attachment_url, $imgsize, $imgsize, true);
    if(empty($image)) {$image = $attachment_url;}
    $link = isset($attr[‘link’]) && ‘post’ == $attr[‘link’] ? wp_get_attachment_link($id, $size, true, false) : wp_get_attachment_link($id, $size, false, false);

    $output .= ‘
    post_excerpt.' » class= »light-dropshaddow »/>
    ‘;
    $output .=  »;
    }
    $output .=  »;

    return $output;
    }
    global $virtue;
    if(isset($virtue[‘virtue_gallery’]) && $virtue[‘virtue_gallery’] == ‘1’) {
    remove_shortcode(‘gallery’);
    add_shortcode(‘gallery’, ‘kadence_gallery’);
    }

    Je ne comprends pas, malgré plusieurs essais, à quelle ligne de la fonction cela est dû, peut-être auriez-vous une piste à me proposer ?
    L’image concernée est tout en bas à gauche de cette page : http://oasart-images.com/?page_id=2
    Si cela pouvait marcher, ça me permettrait d’ajouter des textes un peu plus longs (poèmes) sous mes dessins, ce que je ne peux pas faire actuellement.

    Un grand merci d’avance,
    Amandine

  5. J’ai trouvé mon erreur ! Et la réponse ne se trouvait absolument pas dans les shortcodes… J’avais juste mis une légende qui contenait des guillemets, ce qui la coupait en deux de façon incompréhensible.

  6. marc

    Merci christiane pour votre réponse, très sympa d’avoir effacer ma question sans y répondre….bravo pour le partage !!!