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

8

Eu gostaria de alterar 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> 

Eu quero a fonte principal da imagem para o link & img, como eu quero executar o img src através de um script cortador de php.

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

    
por PaulAdamDavis 30.09.2010 / 11:23

4 respostas

3

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

Isso desativa códigos de acesso no conteúdo. Perfeito para este site & a função é anexada a imagens & os cospe como uma lista. (Eu encontrei a função em algum lugar e diminuí 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 mostra uma lista exatamente como eu queria.

Mais uma vez, obrigado pessoal!

    
por PaulAdamDavis 30.09.2010 / 13:01
3

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

Mas ele usa wp_get_attachment_link() para gerar links e sua saída é filtrada por wp_get_attachment_link hook 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 uma cultura muito complexa que deseja que um script separado trate? Por que não deixar o WP lidar com ela add_image_size() ?

    
por Rarst 30.09.2010 / 11:49
1

Se você quiser alterar dl listas para ul listas em todas as galerias, não apenas naquelas que solicitarem isso por meio de atributos extras, será possível conectar-se ao filtro post_gallery que é executado no início de a função gallery_shortcode . 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ódigos de acesso padrão para gallery e adicionar sua própria função que agrupa gallery_shortcode() , mas adiciona o processamento final no final. Ou tente conectar-se a wp_get_attachment_link , conforme sugerido por Rarst .

    
por Jan Fabry 30.09.2010 / 11:56
-2

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

O primeiro código é:

$gallery = '';
$match = '/(\[)(gallery).*?(ids).*?(\])/';
$matches = '';
preg_match($match, get_the_content(), $matches, PREG_OFFSET_CAPTURE);
if ($matches) :
    $matches = $matches[0];
    $gallery = $matches[0];
    echo '';
    do_shortcode($gallery);
    echo '';
endif;

E o segundo:

$match = '/(\[)(gallery).*?(ids).*?(\])/';
$content = preg_replace($match, '', get_the_content());
if (!empty($content)) :
    $content = '' . $content . wp_link_pages(        array( 'before' => '' . __( 'Pages:', 'veento' ),   'after' => '' ) ) . '';
    print $content;
endif;
    
por Mariano Miguel 04.12.2012 / 12:30