WordPress,使用meta_query orderby

时间:2012-08-20 17:24:02

标签: wordpress custom-fields

我尝试使用多个自定义字段显示结果,同时按第一个自定义字段(startdate)排序结果。我看到的建议让我尝试了这个:

$args = array(
    'category_name' => 'Events',
    'posts_per_page' => 6,
    'meta_key' => 'startdate',
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key' => 'startdate',
            'value' => $date,
            'compare' => '>='
        ),
        array(
            'key' => 'closedate',
            'value' => $date,
            'compare' => '>='
        )
    ),
    'orderby' => 'meta_value',
    'order' => 'desc'
);

问题是没有meta_key参数,结果过滤器默认为帖子的日期。当我添加meta_key参数来对结果进行排序时,我会使用等于startdate的meta_key获取每个帖子。似乎通过添加那些meta_key参数,该语句完全忽略了meta_query数组中的条件。如何在不拉动meta_key等于startdate的所有帖子的情况下使查询按startdate排序?

1 个答案:

答案 0 :(得分:3)

解决方案:

$args = array(
'category_name' => 'Events',
'posts_per_page' => 6,
'meta_key' => 'startdate',
'meta_compare' => '>=',
'orderby' => 'meta_value',
'meta_value' => $date,
'order' => 'DESC',
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key' => 'startdate',
            'value' => $date,
            'compare' => '>='
       ),
        array(
            'key' => 'closedate',
            'value' => $date,
            'compare' => '>='
        )
    )
);

基本上,meta_key参数在MySQL语句中创建一个连接。连接不受参数的meta_query部分中声明的条件的影响。 Codex枚举参数以过滤连接。我希望我的结果按所有日期的startdate排序> =变量$ date。添加'meta_compare'=> '> =''meta_value'=> $ date 到我的$ args数组我能够按照自己的意愿过滤结果。