web-dev-qa-db-fra.com

Afficher la galerie en bas après le contenu

Comment exécuter le shortcode de la galerie après tout autre contenu, peu importe où se trouve le shortcode dans le post HTML?

Merci.

1
Vincent

Ce n'est pas pare-balles, mais devrait parfaitement fonctionner dans la plupart des cas:

class WPSE_105676_Gallery_First {
    private static $_gallery = '',
                   $_handler;

    public static function gallery( $attr ) {
        self::$_gallery .= is_callable( self::$_handler ) ? call_user_func( self::$_handler, $attr ) : '';
        return '';
    }

    public static function content( $text ) {
        $text .= self::$_gallery;
        self::$_gallery = '';
        return $text;
    }

    public static function startup() {
        if ( ! isset( self::$_handler ) ) {
            if ( empty( $GLOBALS['shortcode_tags']['gallery'] ) || ! self::$_handler = $GLOBALS['shortcode_tags']['gallery'] )
                self::$_handler = 'gallery_shortcode';

            add_shortcode( 'gallery', array( __class__, 'gallery' ) );
        }

        add_filter( 'the_content', array( __class__, 'content' ), 1000 );
    }
}

add_action( 'init', array( 'WPSE_105676_Gallery_First', 'startup' ), 100 );

En termes simples, dans startup(), nous sauvegardons le gestionnaire de shortcode actuel pour gallery (donc cela devrait également fonctionner avec les plugins et les thèmes qui remplacent la valeur par défaut), puis le remplaçons par notre propre méthode gallery(). C'est là que nous "capturons" la galerie et renvoyons une chaîne vide, de sorte qu'elle n'apparaisse plus là où existait le shortcode.

La méthode Out content() est reliée à the_content sur un filtre de priorité basse pour s’assurer qu’elle s’exécute après l’analyse de tous les codes courts, ainsi que de tout autre filtre susceptible d’ajouter son propre contenu. Cela ajoute la galerie capturée, réinitialise la propriété et renvoie le contenu de la publication.

0
TheDeadMedic