按两个自定义字段值排序

时间:2015-09-02 13:07:36

标签: wordpress

我有自定义的帖子类型,名为"律师"我想查询自定义字段"姓氏"然后按自定义字段" name"进行排序。我的查询如下:

query_posts( array ( 'post_type' => 'lawyer', 'posts_per_page' => -1, 'meta_query' => array(array('key' => 'surname', 'orderby' => 'meta_value', 'order' => ASC), array('key' => 'name', 'orderby' => 'meta_value', 'order' => ASC) )) );

但它没有用。我得到了结果,但它们没有按我希望的方式排序。知道这里有什么问题吗?

2 个答案:

答案 0 :(得分:1)

永远不要使用query_posts()
参考When should you use WP_Query vs query_posts() vs get_posts()?

您可以使用WP_QUERY并将过滤器添加到posts_orderby

来执行此操作
function custom_orderby($orderby) {
  global $wpdb;
    return str_replace($wpdb->prefix.'postmeta.meta_value', 'mt1.meta_value, mt2.meta_value ASC', $orderby);
}

然后准备你的论点。

$args = array(
  'post_type'=>'lawyer',
  'orderby' => 'meta_value',
  'meta_key' => 'surname',
  'meta_query' => array(
        array(
            'key' => 'surname',
            'value' => '',
        ),
        array(
            'key' => 'name',
            'value' => '',
        )
    )
);

在查询执行之前,通过过滤器添加自定义订单。

add_filter('posts_orderby','custom_orderby');
$loop = new WP_Query( $args );
remove_filter('posts_orderby','custom_orderby');

答案 1 :(得分:0)

最后使用此代码:

function double_meta_posts_orderby($orderby) {
    remove_filter('posts_orderby', 'double_meta_posts_orderby');
    global $wpdb;
    return " {$wpdb->postmeta}.meta_value, mt1.meta_value";
}

$args = array(
  'post_type'=>'lawyer',
  'post_per_page' => -1,
  'meta_query' => array(
        array(
            'key' => 'surname',
        ),
        array(
            'key' => 'name',
        )
    ),
  'orderby' => 'meta_value',
  'order' => ASC,
);

add_filter('posts_orderby', 'double_meta_posts_orderby');
$loop = new WP_Query( $args );

// the Loop
while ($loop->have_posts()) : $loop->the_post();
...