我尝试使用多个自定义字段显示结果,同时按第一个自定义字段(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排序?
答案 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数组我能够按照自己的意愿过滤结果。