Usando preg_replace para separar a galeria do the_content?

6

Em um tema Wordpress, eu preciso separar uma galeria do resto de the_content. . Eu acho que alguém poderia fazer isso com get_the_content e preg_replace, mas é um pouco além do meu nível de habilidade como realmente implementar a solução.

Aqui estão os detalhes. Há uma galeria que se parece com isso:

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

Existe alguma maneira de colocar essa galeria em uma variável e colocar todo o resto do conteúdo em outra variável?

Então eu poderia apenas fazer eco das variáveis onde eu quisesse, certo?

    
por Josh M 29.05.2012 / 23:30

1 resposta

6

A maneira mais fácil de fazer isso é seqüestrar o shortcode da galeria (sem regex extra necessário), armazená-lo em algum lugar e adicioná-lo ao final.

Protótipo

<?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 );
    }
}
    
por fuxia 30.05.2012 / 00:18