Как я могу изменить разметку [галерея]?

8

Я хотел бы изменить разметку, созданную [gallery], с того, что она является стандартной (dl), на неупорядоченный список с разницей. Ниже желаемая разметка:

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

Мне нужен основной источник изображения для ссылки & img, так как я хочу запустить img src через скрипт php cropper.

Это возможно? Я уверен, что мы можем взломать это!

PaulAdamDavis
источник

Ответы:

3

Спасибо за ваши ответы, Ян и Рарст. Они указали мне в правильном направлении. Вот чем я закончил.

Это отключает шорткоды в контенте. Идеально подходит для этого сайта и функция получает прикрепленные изображения и выкладывает их в виде списка. (Я где-то нашел функцию и немного ее уменьшил)

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

Это вызов в single.php

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

Это выкладывает список точно, как я хотел.

Еще раз спасибо, ребята!

PaulAdamDavis
источник
3

Вывод элементов в gallery_shortcode()функцию не фильтруется, поэтому нет возможности изменить его там. Разметку можно заменить только полностью, используя post_galleryфильтр, который запускается при ее запуске. Это немного нетрадиционно по сравнению с обычным конечным результатом фильтрации и, вероятно, по соображениям производительности (создание галереи может быть значительно вычислительно тяжелым).

Но он использует wp_get_attachment_link()для генерации ссылок и его вывод фильтруется через wp_get_attachment_linkкрючок с большим количеством деталей:

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

Вам нужно выполнить действительно сложную обрезку, которую вы хотите, чтобы отдельный скрипт обрабатывал? Почему бы не позволить WP справиться с этим add_image_size()?

Rarst
источник
1

Если вы хотите изменений dlсписков в ulсписки на все галереи, а не только на тех , которые затребовать это с помощью дополнительных атрибутов, вы можете подключить в post_galleryфильтр, запускаемый в начале в gallery_shortcodeфункции . Там вы можете переопределить и установить значения по умолчанию для атрибутов.

Окончательный вывод не фильтруется, но я думаю, что должна быть возможность удалить обработчик шорткода по умолчанию galleryи добавить свою собственную функцию, которая упаковывает, gallery_shortcode()но добавляет окончательную обработку в конце. Или попробуйте подключиться wp_get_attachment_link, как предполагает Рарст .

Ян Фабри
источник
-2

Я так и делаю прямо сейчас. У меня есть 2 кода, один для отображения шорткода галереи, а другой для отображения остального содержимого:

Первый код:

$ gallery = '';
$ match = '/(\[)(gallery).*?(ids).*?(\])/';
$ match = '';
preg_match ($ match, get_the_content (), $ match, PREG_OFFSET_CAPTURE);
if ($ соответствует):
    $ match = $ match [0];
    $ gallery = $ match [0];
    эхо '';
    do_shortcode ($ галерея);
    эхо '';
ENDIF;

И второй:

$ match = '/(\[)(gallery).*?(ids).*?(\])/';
$ content = preg_replace ($ match, '', get_the_content ());
if (! empty ($ content)):
    $ content = ''. $ контент. wp_link_pages (array ('before' => ''. __ ('Pages:', 'veento'), 'after' => '')). '';
    печатать $ content;
ENDIF;
Мариано Мигель
источник
1
do_shortcode($gallery);ничего не печатает. И в чем смысл echo '';?
fuxia