Come posso modificare il markup [gallery]?


8

Vorrei cambiare il markup creato da [gallery] da quello che è come standard (dl) a un elenco non ordinato con una differenza. Di seguito è il markup desiderato:

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

Voglio la fonte di immagine principale per il link & img, poiché voglio eseguire img src tramite uno script php cropper.

È possibile? Sono sicuro che possiamo romperlo!

Risposte:


3

Grazie per le tue risposte, Jan & Rarst. Mi hanno indicato la giusta direzione. Ecco cosa ho finito.

Ciò disabilita i codici brevi nel contenuto. Perfetto per questo sito e la funzione ottiene immagini allegate e le sputa come un elenco. (Ho trovato la funzione da qualche parte e l'ho ridotta un po ')

// 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++;
        }
    }
}

Questa è la chiamata in single.php

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

Questo sputa un elenco esattamente come lo desideravo.

Ancora una volta, grazie ragazzi!


3

L'output degli elementi in gallery_shortcode()funzione non viene filtrato, quindi non è possibile modificarlo lì. Il markup può essere sostituito solo per intero, utilizzando il post_galleryfiltro che viene eseguito all'inizio di esso. È un po 'non convenzionale rispetto al solito risultato finale del filtro ed è probabilmente per motivi di prestazioni (la generazione di gallerie può essere considerevolmente pesante dal punto di vista computazionale).

Ma utilizza wp_get_attachment_link()per generare collegamenti e il suo output viene filtrato tramite wp_get_attachment_linkhook con molti dettagli:

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

Devi eseguire un ritaglio davvero complesso che desideri gestisca uno script separato? Perché non lasciare che WP lo gestisca add_image_size()?


1

Se si desidera cambiare dlle liste a ulliste in tutte le gallerie, non solo su quelli che questa richiesta tramite attributi extra, è possibile collegare al post_galleryfiltro che viene eseguito all'inizio del la gallery_shortcodefunzione di . Lì puoi sovrascrivere e impostare i valori predefiniti per gli attributi.

L'output finale non è filtrato, ma suppongo che dovrebbe essere possibile rimuovere il gestore di shortcode predefinito per gallerye aggiungere la propria funzione che avvolge gallery_shortcode()ma aggiunge l'elaborazione finale alla fine. O prova ad agganciarti wp_get_attachment_link, come suggerisce Rarst .


-2

Questo è il modo in cui lo sto facendo proprio ora. Ho 2 codici, uno per visualizzare lo shortcode della galleria e un altro per visualizzare il resto del contenuto:

Il primo codice è:

$ gallery = '';
$ match = '/(\[)(gallery).*?(ids).*?(\[)/';
$ partite = '';
preg_match ($ match, get_the_content (), $ match, PREG_OFFSET_CAPTURE);
if ($ corrispondenze):
    $ corrispondenze = $ corrispondenze [0];
    $ gallery = $ corrispondenze [0];
    eco '';
    do_shortcode ($ galleria);
    eco '';
finisci se;

E il secondo:

$ match = '/(\[)(gallery).*?(ids).*?(\[)/';
$ content = preg_replace ($ match, '', get_the_content ());
if (! empty ($ content)):
    $ content = ''. $ content. wp_link_pages (array ('before' => ''. __ ('Pages:', 'veento'), 'after' => '')). '';
    stampa $ content;
finisci se;

1
do_shortcode($gallery);non stampa nulla. E qual è il significato di echo '';?
fuxia
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.