如何更改[图库]标记?


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的主图像源,因为我想通过phpropper脚本运行img src。

这可能吗?我相信我们可以破解!

Answers:


3

感谢Jan和Rarst的回复。他们向我指出了正确的方向。这就是我最后得到的。

这将禁用内容中的简码。非常适合该网站,该功能可以获取附件图像并将其作为列表发送出去。(我在某处找到了该功能并将其缩小了一点)

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

这会准确地列出我想要的清单。

再次感谢大家!


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

您是否需要执行一些非常复杂的裁剪操作,并希望使用单独的脚本来处理它add_image_size()


1

如果您希望将更改dl列表更改为ul所有图库中的列表,不仅是通过额外属性请求更改的列表,还可以连接到函数post_gallery开头运行的过滤器。您可以在那里覆盖和设置属性的默认值。gallery_shortcode

最终输出未过滤,但我想应该有可能删除默认的shortcode处理程序gallery,并添加您自己的函数,该函数可以包装gallery_shortcode()但最后添加最终处理。或者尝试挂接到wp_get_attachment_link作为Rarst建议


-2

这就是我现在正在做的方式。我有2个代码,一个用于显示库简码,另一个用于显示其余内容:

第一个代码是:

$ gallery ='';
$ match ='/(\ [)(图库)。*?(ids)。*?(\])/';
$ matches ='';
preg_match($ match,get_the_content(),$ matches,PREG_OFFSET_CAPTURE);
如果($ matches):
    $ matches = $ matches [0];
    $ gallery = $ matches [0];
    回声'';
    do_shortcode($ gallery);
    回声'';
万一;

第二个:

$ match ='/(\ [)(图库)。*?(ids)。*?(\])/';
$ content = preg_replace($ match,'',get_the_content());
如果(!empty($ content)):
    $ content =''。$ content。wp_link_pages(array('before'=>''。__('Pages:','veento'),'after'=>'')))。'';
    打印$ content;
万一;

1
do_shortcode($gallery);不打印任何内容。那是什么意思echo '';呢?
fuxia
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.