it-swarm.dev

Jak mohu změnit označení [galerie]?

Chtěl bych změnit značení vytvořené pomocí [galerie] z toho, co je to standard (dl), na neuspořádaný seznam s rozdílem. Níže je požadovaný značek:

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

Chci hlavní zdroj obrazu pro odkaz & img, protože chci spustit img src skrz skript php.

Je to možné? Jsem si jistý, že to zvládneme!

8
PaulAdamDavis

Děkujeme za vaše odpovědi, Jan & Rarst. Ukázali mi správným směrem. Tady je to, s čím jsem skončil.

To zakáže zkratky v obsahu. Perfektní pro tuto stránku a funkce dostane připojené obrázky a vyplivne je jako seznam. (Nalézal jsem tuto funkci někde a trochu ji ztratil)

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

Toto je volání v souboru single.php

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

To vypíše seznam přesně tak, jak jsem to chtěl.

Ještě jednou, díky klukům!

3
PaulAdamDavis

Výstup položek v gallery_shortcode() funkci není filtrován, takže není možné ji tam měnit. Značení může být nahrazeno pouze v plném rozsahu pomocí post_gallery filtru, který běží na začátku. Je to trochu nekonvenční porovnání s obvyklým výsledkem filtrování a je pravděpodobně z důvodů výkonu (generování galerie může být značně náročné na výpočet).

Ale používá wp_get_attachment_link() pro generování odkazů a jeho výstup je filtrován přes háček wp_get_attachment_link s množstvím detailů:

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

Potřebujete provést nějaké opravdu složité oříznutí, které chcete oddělené skript zpracovat? Proč ne nechat WP zvládnout to s add_image_size() ?

3
Rarst

Pokud chcete změnit dl seznamy na ul seznamy ve všech galeriích, a to nejen na těch, které o to požádají pomocí extra atributů, můžete zavést do filtru post_gallery, který se spustí na začátku funkce gallery_shortcode . Tam můžete přepsat a nastavit výchozí hodnoty pro atributy.

Konečný výstup není filtrován, ale myslím, že by mělo být možné odstranit výchozí zkratku pro gallery a přidat vlastní funkci, která zabalí gallery_shortcode(), ale na konci přidá konečné zpracování. Nebo zkuste zaháknout do wp_get_attachment_link, jak naznačuje Rarst .

1
Jan Fabry