web-dev-qa-db-fra.com

Utiliser preg_replace pour séparer la galerie du contenu?

Dans un thème Wordpress, je dois séparer une galerie du reste de the_content.. Je pense qu'on pourrait le faire avec get_the_content et preg_replace, mais la manière de mettre en œuvre la solution dépasse un peu mon niveau de compétence.

Voici les détails. Il y a une galerie qui ressemble à ceci:

 <div class="gallery">
      <section class="clearfix">
            <div class="gallery-row">
         some <figures>
             </div>
      </section>
 </div>
  the rest of the content

Existe-t-il un moyen de récupérer cette galerie dans une variable et de placer le reste du contenu dans une autre variable?.

Ensuite, je pourrais simplement faire écho aux variables où je voulais, non?

6
Josh M

Le moyen le plus simple de le faire est de pirater le shortcode de la galerie (sans regex supplémentaire), de le stocker quelque part et de l'ajouter à la fin.

Prototype

<?php # -*- coding: utf-8 -*-
/**
 * Plugin Name: T5 Move Galleries To End Of Content
 */
add_action( 'after_setup_theme', array ( 'T5_Move_Galleries', 'init' ) );

class T5_Move_Galleries
{
    public static $galleries = array();

    /**
     * Re-order gallery shortcodes and register the content filter.
     */
    public static function init()
    {
        remove_shortcode( 'gallery', 'gallery_shortcode' );
        add_shortcode( 'gallery', array ( __CLASS__, 'catch_gallery' ) );
        // Note the priority: This must run after the shortcode parser.
        add_filter( 'the_content', array ( __CLASS__, 'print_galleries' ), 100 );
    }

    /**
     * Collect the gallery output. Stored in self::$galleries.
     *
     * @param array $attr
     */
    public static function catch_gallery( $attr )
    {
        self::$galleries[] = gallery_shortcode( $attr );
    }

    /**
     * Append the collected galleries to the content.
     *
     * @param  string $content
     * @return string
     */
    public static function print_galleries( $content )
    {
        return $content . implode( '', self::$galleries );
    }
}
6
fuxia