具有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 );
}