loop – Contenido dividido y galería

Pregunta:

¿Hay alguna manera de dividir el contenido de la publicación y el código corto de la galería? Quiero mostrar la galería fuera de mi contenido normal sin importar cómo o dónde se coloque. Puedo usar esto para obtener el shortcode en sí:

if(has_shortcode(get_the_content(), 'gallery')){
    $pattern = get_shortcode_regex(); 
    preg_match("/$pattern/s", get_the_content(), $matches);
    echo do_shortcode($matches[0]);
}

Pero esto no funciona si el código corto de la galería no es la primera instancia. ¿Hay alguna forma de dividir mi contenido y mi galería por completo?


Editar: tengo una semi-solución, pero parece una forma larga de hacerlo. Primero toma el primer código corto en la publicación (que debe arreglarse ya que solo quiero el código corto "Galería") y luego elimina todos los códigos cortos del contenido (de nuevo, no es realmente lo que quiero hacer.

<?php if(has_shortcode(get_the_content(), 'gallery')) : ?>
    <?php 
        $pattern = get_shortcode_regex(); 
        preg_match("/$pattern/s", get_the_content(), $matches);
    ?>
    <div id="content">
        <?php echo strip_shortcodes(get_the_content()); ?>
    </div>
    <div id="gallery">
        <?php echo do_shortcode($matches[0]); ?>
    </div>
<?php endif; ?>

Edición n. ° 2 : Ok, solo he podido obtener códigos cortos de galería en la publicación. También agregué un filtro para eliminar el código corto de la galería de the_content() ; el problema es que no necesariamente está eliminando el código corto ya que lo publica, pero no me permite ejecutar "do_shortcode ()"

Functions.php

function remove_gallery($content) {
    global $post;

    if($post->post_type == 'artcpt')
        remove_shortcode('gallery', $content);

    return $content;
}
add_filter( 'the_content', 'remove_gallery', 6); 

El lazo

<?php preg_match('/\]+\]/', get_the_content(), $matches); ?>
<div id="content">
    <?php the_content(); ?>
</div>
<div id="gallery">
    <?php echo do_shortcode($matches[0]); ?>
</div>

en The Loop devolverá mi código corto dos veces (estoy en una sola página, debería repetirse dos veces, por lo que no se está ejecutando do_shortcode ()). No estoy seguro de por qué.

Respuesta:

Abierto a cualquiera que pueda simplificar esto, pero esto es lo que se me ocurrió y que funcionó para mí.

Lo primero es lo primero: obtenga la galería, usando get_post_gallery() , tan pronto como comience el ciclo:

<?php if( have_posts() ) : ?>

    <?php while( have_posts() ) :
            the_post();
            $gallery = get_post_gallery();
            $content = strip_shortcode_gallery( get_the_content() );
    ?>

        <div id="content">
            <?php echo $content; ?>
        </div> <!-- id="content" -->

        <div id="gallery">
            <?php echo $gallery; ?>
        </div> <!-- id="gallery" -->

    <?php endwhile; ?>

<?php endif; ?>

Función strip_shortcode_gallery() – functions.php

function strip_shortcode_gallery( $content ) {
    preg_match_all( '/' . get_shortcode_regex() . '/s', $content, $matches, PREG_SET_ORDER );

    if ( ! empty( $matches ) ) {
        foreach ( $matches as $shortcode ) {
            if ( 'gallery' === $shortcode[2] ) {
                $pos = strpos( $content, $shortcode[0] );
                if( false !== $pos ) {
                    return substr_replace( $content, '', $pos, strlen( $shortcode[0] ) );
                }
            }
        }
    }

    return $content;
}

Recursos:

Desbordamiento de pila:

De lo que me estaba yendo originalmente, que no funcionó como se esperaba:

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım