pauladamdavis
  • 0
Новичок

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

  • 0

Я хотел бы изменить разметку, созданную [галереей], со стандартной (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.

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

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

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

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

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

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

    • 0
  2. Вывод элементов в 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() ?

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

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

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

    Первый код:

    $ галерея = '';
    $match = '/(\[)(галерея).*?(id).*?(\])/';
    $ соответствует = '';
    preg_match($match, get_the_content(), $matches, PREG_OFFSET_CAPTURE);
    если ($ соответствует) :
        $matches = $matches[0];
        $галерея = $матчи[0];
        эхо '';
        do_shortcode ($ галерея);
        эхо '';
    конец;
    

    И второй:

    $match = '/(\[)(галерея).*?(id).*?(\])/';
    $content = preg_replace($match, '', get_the_content());
    если (!пусто($контент)) :
        $контент = ''. $контент. wp_link_pages(array('before' => ''. __('Pages:', 'veento'), 'after' => '') ). '';
        напечатать $контент;
    конец;
    
    • 0

Оставить ответ

You must login to add an answer.