web-dev-qa-db-fra.com

Fonction pour afficher uniquement la première instance de shortcode

Je dois ajouter une fonction à mon thème pour supprimer des instances supplémentaires d'un shortcode dans un message.

Tout d’abord, je me demande si j’ai mal abordé la question, mais j’ai un thème qui reformate radicalement la façon dont un article est présenté. Dans l'article, nous recherchons des médias et des codes courts, puis nous les affichons en haut de la page, en les supprimant du contenu et en les plaçant avant le titre.

L'instruction conditionnelle vérifie l'existence d'une image sélectionnée ou d'un shortcode de galerie, puis l'imprime. Le problème que je rencontre est que la galerie est imprimée à nouveau dans the_content (). Ce que je voudrais faire, c'est créer une fonction pour enlever le shortcode après sa première impression.

Je suis au courant de ce hook remove_shortcode (), mais cela supprimera toutes les occurrences de ce shortcode pour lesquelles je ne souhaite le supprimer qu'après avoir imprimé le premier.

1
HjalmarCarlson

Ajoutez une variable statique au gestionnaire de shortcode pour vérifier si le shortcode a déjà été appelé.

Exemple de code

add_shortcode( 'wpse62826', 'wpse_62826_shortcode' );

function wpse_62826_shortcode()
{
    static $done = FALSE;

    // Nothing to do.
    if ( $done )
    {
        return;
    }

    if ( is_singular() )
    {
        $done = TRUE;
    }

    return '<b>I run once on singular views!</b>';
}

Résultat

enter image description here

2
fuxia