Como posso alterar a marcação [galeria]?

8

Gostaria de mudar a marcação criada por [gallery] do que é padrão (dl) para uma lista não ordenada com uma diferença. Abaixo está a marcação desejada:

<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> 

Quero a fonte principal da imagem para o link & img, pois quero executar o img src através de um script php cropper.

Isso é possível? Tenho certeza que podemos decifrá-lo!

PaulAdamDavis
fonte

Respostas:

3

Obrigado por suas respostas, Jan & Rarst. Eles me apontaram na direção certa. Aqui está o que eu acabei com.

Isso desativa códigos de acesso no conteúdo. Perfeito para este site e a função obtém imagens anexadas e as cospe como uma lista. (Encontrei a função em algum lugar e a reduzi um pouco)

// 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 é a chamada em single.php

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

Isso cospe uma lista exatamente como eu queria.

Mais uma vez, obrigado pessoal!

PaulAdamDavis
fonte
3

A saída de itens na gallery_shortcode()função não é filtrada, portanto, não há oportunidade de alterá-la lá. A marcação só pode ser substituída na íntegra, usando o post_galleryfiltro que é executado no início. É um pouco pouco convencional em comparação com o resultado final da filtragem usual e provavelmente é por razões de desempenho (a geração de galeria pode ser consideravelmente computacionalmente pesada).

Mas ele usa wp_get_attachment_link()para gerar links e sua saída é filtrada através de wp_get_attachment_linkgancho com muitos detalhes:

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

Você precisa executar um corte realmente complexo com o qual deseja um script separado? Por que não deixar o WP lidar com isso add_image_size()?

Rarst
fonte
1

Se você quiser alterar dlas listas de ullistas em todas as galerias, não apenas sobre aqueles que solicitar essa via atributos extras, você pode ligar para o post_galleryfiltro que é executado no início da gallery_shortcodefunção . Lá, você pode substituir e definir valores padrão para os atributos.

A saída final não é filtrada, mas acho que deve ser possível remover o manipulador de código curto padrão para gallerye adicionar sua própria função que envolve, gallery_shortcode()mas adiciona o processamento final no final. Ou tente se conectar wp_get_attachment_link, como Rarst sugere .

Jan Fabry
fonte
-2

É assim que estou fazendo agora. Eu tenho 2 códigos, um para exibir o código curto da galeria e outro para exibir o restante do conteúdo:

O primeiro código é:

$ galeria = '';
$ match = '/(\\)(gallery).*?(ids).*?(\))/';
$ correspondências = '';
preg_match ($ match, get_the_content (), $ match, PREG_OFFSET_CAPTURE);
if ($ corresponde):
    $ partidas = $ partidas [0];
    $ galeria = $ correspondências [0];
    eco '';
    do_shortcode ($ galeria);
    eco '';
fim se;

E o segundo:

$ match = '/(\\)(gallery).*?(ids).*?(\))/';
$ content = preg_replace ($ match, '', get_the_content ());
if (! vazio ($ content)):
    $ content = ''. $ content. wp_link_pages (matriz ('antes' => ''. __ ('Páginas:', 'veento'), 'depois' => '')). '';
    imprime $ content;
fim se;
Mariano Miguel
fonte
11
do_shortcode($gallery);não imprime nada. E qual é o significado de echo '';?
fuxia