我一直在为所有帖子附件分配数字作为标题。我试图根据标题设置这些附件的顺序,这是一个数值然后我试图使用一个简单的参数,如下所示。
$images =& get_children( array (
'post_parent' => $post->ID,
'post_type' => 'attachment',
'post_mime_type' => 'image',
'orderby' => 'title',
'order' => 'ASC'
));
但是这只是按照这个顺序给出了一些东西10,1,21,29,2 ......这更像是一个字母排序,而不是我寻求的数字排序,例如1,2,10,21,29。 ..我知道meta_value_num函数,但我不在这里处理自定义字段。另外FYI这不是页面上唯一的循环,因为我的single.php上还有另外两个循环。灵感来自here和there我已经将下面的代码组合在一起,但似乎没有用。你能帮我纠正一下吗?
function orderby_post_title_int( $orderby ) {
global $wpdb;
if(!is_admin && is_single()){
$orderby = '(wp_posts.post_title+0) ASC';
return $orderby;
}
}
add_filter('posts_orderby', 'orderby_post_title_int' );
$images =& get_children( array (
'post_parent' => $post->ID,
'post_type' => 'attachment',
'post_mime_type' => 'image',
'orderby' => 'title',
'order' => 'ASC'
));
}
remove_filter('posts_orderby', 'orderby_post_title_int' );
以下是<pre>print_r($images)</pre>
看起来的结果(仅限第一篇文章)
Array
(
[306] => WP_Post Object
(
[ID] => 306
[post_author] => 1
[post_date] => 2014-06-09 17:01:29
[post_date_gmt] => 2014-06-09 17:01:29
[post_content] =>
[post_title] => 120
[post_excerpt] =>
[post_status] => inherit
[comment_status] => open
[ping_status] => open
[post_password] =>
[post_name] => some_file_name
[to_ping] =>
[pinged] =>
[post_modified] => 2014-06-09 17:01:29
[post_modified_gmt] => 2014-06-09 17:01:29
[post_content_filtered] =>
[post_parent] => 305
[guid] => http://xxxxxxx/wp-content/uploads/2014/06/xxxxxxxxxx.jpg
[menu_order] => 0
[post_type] => attachment
[post_mime_type] => image/jpeg
[comment_count] => 0
[filter] => raw
)
similar question here的赞成证明人们一直在寻找答案,遗憾的是,线程中的答案没有解决任何问题。
答案 0 :(得分:2)
您尝试获取的订单称为“natural sort”。 Wordpress不支持它,因此您需要在查询后对结果进行排序。
此代码适用于get_posts', which should be similar to the result of
get_children`。在上面的第一个代码段后立即尝试:
function natural_sort($a, $b) {
return strnatcmp($a->post_title, $b->post_title);
};
usort($images->posts, 'natural_sort' );