问题描述

Aa 你知道,从 WP3.0 开始,有自定义高级查询的选项,这是非常好的。因此,对于新的 meta_query 参数 (see here),不推荐使用 meta_key,meta_value 等自定义字段的某些查询参数,

我尝试使用新的语法查询一个非常简单的查询,由包含指定的 meta_key(order_in_archive) 的某个 post_type(服务) 查询帖子 – 这是按预期方式进行的。但是 – 我想通过 meta_value 的查询排序,没有成功。

这是我的查询 –

   query_posts(
    array(  'post_type' => 'services',
        'order' => 'ASC',
        'orderby' => 'meta_value',
        'meta_query' => array(
            array('key' => 'order_in_archive'))
    )
);

我也尝试了 meta_value_numeric 和 meta_value 的订单,但无论如何,结果正在发布日期被排序 (作为常规帖子) 。任何人都知道如何做到这一点?

谢谢

最佳解决方案

您可以使用旧方法 (我在 WP 3.1.1 上测试) 定义 orderby 参数的元键…

query_posts(
    array(  'post_type' => 'services',
            'order'     => 'ASC',
            'meta_key' => 'some_key',
            'orderby'   => 'meta_value', //or 'meta_value_num'
            'meta_query' => array(
                                array('key' => 'order_in_archive',
                                      'value' => 'some_value'
                                )
                            )
    )
);

次佳解决方案

WP Codex 在解决这个问题时其实很混乱。

您实际上并不需要 meta_query 参数来使用 orderby,而是使用 meta_key 参数,尽管 WP Codex 已被弃用,但已经在此建立:How do you use orderby with meta_query in WordPress 3.1?,其顺序依然需要 meta_key 。

所以应该是

query_posts( array(
  'post_type' => 'services',
  'order' => 'ASC',
  'orderby' => 'meta_value',
  'meta_key' => 'order_in_archive'
) )

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。