我使用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);
}
这似乎可行,但有没有更干净的方法来做到这一点。
最合适的回答,由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
)
);
希望有帮助!