按标题顺序排序帖子附件(数字) - wordpress

时间:2014-06-10 18:57:29

标签: php wordpress sorting

我一直在为所有帖子附件分配数字作为标题。我试图根据标题设置这些附件的顺序,这是一个数值然后我试图使用一个简单的参数,如下所示。

$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上还有另外两个循环。灵感来自herethere我已经将下面的代码组合在一起,但似乎没有用。你能帮我纠正一下吗?

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的赞成证明人们一直在寻找答案,遗憾的是,线程中的答案没有解决任何问题。

1 个答案:

答案 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' );