有没有办法“组合”画廊或将多个画廊显示为一个画廊?

时间:2011-05-30 作者:Chris

比如说我开了一个电视节目博客。有一天,该节目向公众发布了一组10个即将播出的剧集的截屏。我将其发布在我的博客上,可以是一篇包含多幅图像的文章,也可以是一篇“图库”文章——无论哪种方式,读者都可以将该文章附带的所有图像作为图库进行查看。

然后,几天之后,在几篇帖子中,他们又发布了10个即将播出的同一集的截图。我想写一篇单独的文章,而不是重复旧文章,但我也希望能够在一个图库中显示该特定插曲的所有截屏(20)。或者至少看起来像一个画廊。

可能的(最好没有NextGEN或其他插件……在堆叠插件之前,尽量使用WordPress的本机功能。)

1 个回复
最合适的回答,由SO网友:Jan Fabry 整理而成

具有the default [gallery] shortcode 要将不同的画廊合并为一个画廊,没有简单的方法。您可以指定两个不同的库:一个是当前帖子,另一个是由帖子ID指定的帖子:

[gallery]
[gallery id=42]
也可以通过显式指定所有附件ID来创建库:

[gallery include="23,39,45"]
指定多个post ID将不起作用,因为gallery_shortcode() 使用get_children() 要获取附件,请使用get_posts(), 使用标准WP_Query 班级,还有这个only allows a numeric post_parent value.

However, 我们可以利用以下事实:在gallery_shortcode(), 这允许插件覆盖默认的库布局。以下示例检查id 具有多个ID(或特殊关键字)的参数this), 获取这些帖子的所有附件,并将其放入显式include 属性,用于再次调用gallery函数。这允许您像这样组合不同的库:[gallery id=this,8]. 您可以扩展此想法以支持其他属性。

add_filter( \'post_gallery\', \'wpse18689_post_gallery\', 5, 2 );
function wpse18689_post_gallery( $gallery, $attr )
{
    if ( ! is_array( $attr ) || array_key_exists( \'wpse18689_passed\', $attr ) ) {
        return \'\';
    }
    $attr[\'wpse18689_passed\'] = true;

    if ( false !== strpos( $attr[\'id\'], \',\' ) ) {
        $id_attr = shortcode_atts( array(
            \'id\' => \'this\',
            \'order\' => \'ASC\',
            \'orderby\'    => \'menu_order ID\',
        ), $attr );
        $all_attachment_ids = array();
        $post_ids = explode( \',\', $id_attr[\'id\'] );
        foreach ( $post_ids as $post_id ) {
            if ( \'this\' == $post_id ) {
                $post_id = $GLOBALS[\'post\']->ID;
            }
            $post_attachments = get_children( array(
                \'post_parent\' => $post_id,
                \'post_status\' => \'inherit\',
                \'post_type\' => \'attachment\',
                \'post_mime_type\' => \'image\',
                \'order\' => $id_attr[\'order\'],
                \'orderby\' => $id_attr[\'orderby\'],
            ), ARRAY_A );
            $all_attachment_ids = array_merge( $all_attachment_ids, array_keys( $post_attachments ) );
        }
        $attr[\'include\'] = implode( \',\', $all_attachment_ids );
        $attr[\'id\'] = null;
    }

    return gallery_shortcode( $attr );
}

结束

相关推荐

Resizing all images

我刚刚更改了博客的主题,由于页面宽度很小,它打破了布局。我之前的大多数图片(附在帖子中)的宽度都在600px左右,现在我需要按450px的比例调整它们的大小。如何一次性调整它们的大小?有这个插件吗?P、 美国:编写CSS规则是一个很好的选择,我已经做到了。但我认为调整图像大小也会减少每个页面的下载开销!