¿Cómo puedo alterar el marcado [galería]?

8

Me gustaría cambiar el marcado creado por [galería] de lo que es estándar (dl) a una lista desordenada con una diferencia. A continuación se muestra el marcado deseado:

<ul>
    <li><a href="/path/to/image.jpg"><img src="/path/to/image.jpg" /></a></li>
    <li><a href="/path/to/image2.jpg"><img src="/path/to/image2.jpg" /></a></li>
    <!-- And so on, all in one ul -->
</ul> 

Quiero la fuente de imagen principal para el enlace e img, ya que quiero ejecutar el img src a través de un script php cropper.

es posible? ¡Estoy seguro de que podemos descifrarlo!

PaulAdamDavis
fuente

Respuestas:

3

Gracias por sus respuestas, Jan y Rarst. Me señalaron en la dirección correcta. Esto es lo que terminé con.

Esto deshabilita los códigos cortos en el contenido. Perfecto para este sitio y la función obtiene imágenes adjuntas y las escupe como una lista. (Encontré la función en algún lugar y la reduje un poco)

// Removed shortcodes from the content
add_filter('the_content', 'strip_shortcodes');

// Get attached images & spits out a list of them.
function nerdy_get_images($size = 'thumbnail', $limit = '0', $offset = '0') {
    global $post;
    $images = get_children( array('post_parent' => $post->ID, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => 'ASC', 'orderby' => 'menu_order ID') );
    if ($images) {
        $num_of_images = count($images);
        if ($offset > 0) : $start = $offset--; else : $start = 0; endif;
        if ($limit > 0) : $stop = $limit+$start; else : $stop = $num_of_images; endif;
        $i = 0;
        foreach ($images as $image) {
            if ($start <= $i and $i < $stop) {
            $img_title = $image->post_title;   // title.
            $img_description = $image->post_content; // description.
            $img_caption = $image->post_excerpt; // caption.
            $img_url = wp_get_attachment_url($image->ID); // url of the full size image.
            $preview_array = image_downsize( $image->ID, $size );
            $img_preview = $preview_array[0]; // thumbnail or medium image to use for preview.
            ?>
            <li>
                <a href="<?php echo $img_url; ?>"><img src="<?php echo $img_preview; ?>" alt="<?php echo $img_caption; ?>" title="<?php echo $img_title; ?>"></a>
            </li>
            <?
            }
            $i++;
        }
    }
}

Esta es la llamada en single.php

<ul>
    <?php nerdy_get_images('medium','0','0'); ?>
</ul>

Esto escupe una lista exactamente como la quería.

Una vez más, gracias chicos!

PaulAdamDavis
fuente
3

La salida de los elementos en gallery_shortcode()función no se filtra, por lo que no hay oportunidad de cambiarla allí. El marcado solo se puede reemplazar por completo, utilizando un post_galleryfiltro que se ejecuta al inicio. Es un poco poco convencional en comparación con el resultado final de filtrado habitual y probablemente sea por razones de rendimiento (la generación de la galería puede ser considerablemente computacionalmente pesada).

Pero se usa wp_get_attachment_link()para generar enlaces y su salida se filtra a través del wp_get_attachment_linkgancho con muchos detalles:

apply_filters( 'wp_get_attachment_link', "<a href='$url' title='$post_title'>$link_text</a>", $id, $size, $permalink, $icon, $text );

¿Necesita realizar un recorte realmente complejo con el que desea que se ejecute un script separado? ¿Por qué no dejar que WP lo maneje add_image_size()?

Rarst
fuente
1

Si desea cambiar las dllistas a ullistas en todas las galerías, no solo en aquellas que lo solicitan mediante atributos adicionales, puede engancharse en el post_galleryfiltro que se ejecuta al comienzo de la gallery_shortcodefunción . Allí puede anular y establecer valores predeterminados para los atributos.

La salida final no se filtra, pero supongo que debería ser posible eliminar el controlador de código corto predeterminado galleryy agregar su propia función que envuelve gallery_shortcode()pero agrega el procesamiento final al final. O intente engancharse wp_get_attachment_link, como sugiere Rarst .

Jan Fabry
fuente
-2

Así es como lo estoy haciendo ahora. Tengo 2 códigos, uno para mostrar el shortcode de la galería y otro para mostrar el resto del contenido:

El primer código es:

$ gallery = '';
$ match = '/(\[)(gallery).*?(ids).*?(\font>)/';
$ coincidencias = '';
preg_match ($ match, get_the_content (), $ coincide, PREG_OFFSET_CAPTURE);
if ($ coincide):
    $ coincidencias = $ coincidencias [0];
    $ galería = $ coincide [0];
    eco '';
    do_shortcode ($ galería);
    eco '';
terminara si;

Y el segundo:

$ match = '/(\[)(gallery).*?(ids).*?(\font>)/';
$ content = preg_replace ($ match, '', get_the_content ());
if (! empty ($ content)):
    $ content = ''. $ contenido. wp_link_pages (array ('before' => ''. __ ('Pages:', 'veento'), 'after' => '')). '';
    imprimir $ contenido;
terminara si;
Mariano Miguel
fuente
1
do_shortcode($gallery);No imprime nada. ¿Y cuál es el significado de echo '';?
fuxia