在主题中不使用快捷码的图库图像排序

时间:2013-03-01 作者:Cyclonecode

我使用wordpress中的内置图库在自定义帖子类型中存储和排序图像。在我使用的主题中:

$attachments = get_posts(
                 array(\'post_type\' => \'attachment\',
                       \'post_parent\' => $post->ID,
                       \'orderby\' => \'menu_order\'
                 )
);
以上代码正确返回库图像,但顺序错误。当我查看包含库的帖子的内容字段时,它包含库数据:

[gallery ids="2,5,7,8"]
因此,我猜测内置库不会将排序存储在单独的字段中,如menu_order 相反,它将附件ID的排序列表存储在父帖子的内容字段中。

所以,我的问题是,要让画廊图片从主题中正确排序,最好的方法是什么?

我试过这样的方法:

$matches = array();
if(preg_match(\'/ids="(.*)"/\', $post->post_content, $matches)) {
    $ids = $matches[1];

    $query = "SELECT * FROM $wpdb->posts ".
             "WHERE post_type = \'attachment\' &&
                    post_parent = $post->ID ".
             "ORDER BY FIELD(ID, $ids)";
    $attachments = $wpdb->get_results($query);
 }
这似乎可行,但有没有更干净的方法来做到这一点。

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

你是对的。

功能表\\u顺序不再用于多媒体资料中的媒体。不确定这是出于设计还是疏忽。可以通过设计,因为您现在可以在图库中包括媒体,即使它没有“附加”到页面/帖子。在任何情况下,以下是我根据快捷码中指定的顺序获取ID和附件的方法:

// helper function to return first regex match
function get_match( $regex, $content ) {
    preg_match($regex, $content, $matches);
    return $matches[1];
} 

// Extract the shortcode arguments from the $page or $post
$shortcode_args = shortcode_parse_atts(get_match(\'/\\[gallery\\s(.*)\\]/isU\', $post->post_content));

// get the ids specified in the shortcode call
$ids = $shortcode_args["ids"];

// get the attachments specified in the "ids" shortcode argument
$attachments = get_posts(
    array(
        \'include\' => $ids, 
        \'post_status\' => \'inherit\', 
        \'post_type\' => \'attachment\', 
        \'post_mime_type\' => \'image\', 
        \'order\' => \'menu_order ID\', 
        \'orderby\' => \'post__in\', //required to order results based on order specified the "include" param
    )
);
希望有帮助!

结束

相关推荐

Gallery Inside One Post

对于图像库,我需要一个使用下一个/上一个链接的代码,将您带到下一个/上一个图像in that post 和keeps the images in the correct order you chose while inserting them into the post. (每个主要新闻网站似乎都有这一功能。)当前,如果您添加<?php next_image_link( false, \'Next Image\' ); ?> 和<?php previous_image_link( fa