1

我正在尝试使用多个自定义字段显示结果,同时按第一个自定义字段(开始日期)对结果进行排序。我看到的建议使我尝试这样做:

$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 参数对结果进行排序时,我会得到每个帖子的 meta_key 等于 startdate。似乎通过添加这些 meta_key 参数,语句完全忽略了 meta_query 数组中的条件。如何在不拉出所有 meta_key 等于 startdate 的帖子的情况下让查询按 startdate 排序?

4

1 回答 1

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 数组中,我能够根据需要过滤结果。

于 2012-08-21T19:07:37.873 回答