Bagaimana saya bisa mengubah markup [galeri]?

8

Saya ingin mengubah markup yang dibuat oleh [galeri] dari apa itu sebagai standar (dl) ke daftar tanpa daftar dengan perbedaan. Di bawah ini adalah markup yang diinginkan:

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

Saya ingin sumber gambar utama untuk tautan & img, karena saya ingin menjalankan img src melalui skrip pemangkas php.

Apakah ini mungkin? Saya yakin kita bisa memecahkannya!

PaulAdamDavis
sumber

Jawaban:

3

Terima kasih atas balasan Anda, Jan & Rarst. Mereka menunjuk saya ke arah yang benar. Inilah yang akhirnya saya dapatkan.

Ini menonaktifkan kode pendek dalam konten. Sempurna untuk situs ini & fungsinya mendapatkan gambar terlampir & memuntahkannya sebagai daftar. (Saya menemukan fungsi di suatu tempat & sedikit merampingkannya)

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

Ini adalah panggilan di single.php

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

Ini mengeluarkan daftar persis seperti yang saya inginkan.

Sekali lagi, terima kasih kawan!

PaulAdamDavis
sumber
3

Output dari item dalam gallery_shortcode()fungsi tidak difilter, jadi tidak ada kesempatan untuk mengubahnya di sana. Markup hanya dapat diganti secara penuh, menggunakan post_galleryfilter yang berjalan di awal. Ini sedikit tidak konvensional dibandingkan dengan hasil akhir penyaringan biasa dan mungkin karena alasan kinerja (menghasilkan galeri bisa sangat berat secara komputasi).

Tapi itu digunakan wp_get_attachment_link()untuk menghasilkan tautan dan hasilnya disaring melalui wp_get_attachment_linkkait dengan banyak detail:

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

Apakah Anda perlu melakukan pemangkasan yang benar-benar rumit yang Anda ingin skrip terpisah untuk menanganinya? Mengapa tidak membiarkan WP menanganinya add_image_size()?

Jarang
sumber
1

Jika Anda ingin perubahan dldaftar untuk uldaftar di semua galeri, tidak hanya pada orang-orang yang meminta ini melalui atribut ekstra, Anda dapat menghubungkan ke post_galleryfilter yang akan dijalankan pada awal yang gallery_shortcodefungsi . Di sana Anda dapat mengganti dan menetapkan nilai default untuk atribut.

Output akhir tidak difilter, tapi saya kira seharusnya dimungkinkan untuk menghapus handler kode pendek default untuk gallery, dan menambahkan fungsi Anda sendiri yang membungkus gallery_shortcode()tetapi menambahkan pemrosesan akhir di akhir. Atau coba kaitkan wp_get_attachment_link, seperti yang disarankan Rarst .

Jan Fabry
sumber
-2

Ini adalah cara saya melakukannya sekarang. Saya punya 2 kode, satu untuk menampilkan kode singkat galeri, dan satu lagi untuk menampilkan sisa konten:

Kode pertama adalah:

$ gallery = '';
$ match = '/(*[)(gallery).*?(ids).*?(#))/';
$ cocok = '';
preg_match ($ match, get_the_content (), $ cocok, PREG_OFFSET_CAPTURE);
jika ($ cocok):
    $ cocok = $ cocok [0];
    $ galeri = $ cocok [0];
    gema '';
    do_shortcode ($ gallery);
    gema '';
berakhir jika;

Dan yang kedua:

$ match = '/(*[)(gallery).*?(ids).*?(#))/';
$ content = preg_replace ($ match, '', get_the_content ());
if (! kosong ($ content)):
    $ content = ''. $ konten. wp_link_pages (array ('before' => ''. __ ('Halaman:', 'veento'), 'after' => '')). '';
    cetak $ content;
berakhir jika;
Mariano Miguel
sumber
1
do_shortcode($gallery);tidak mencetak apa pun. Dan apa artinya echo '';?
fuxia