6

我有一个自定义帖子类型“事件”,其中包含 start_date 和 end_date 的自定义字段。我正在尝试列出即将发生的事件的简单列表。如果我只查询 start_date >= today 的事件,它工作正常。如果我添加一个 meta_query 来说“AND”所有带有 end_date <= today 的事件 - 它不会返回任何内容。

我的自定义字段(start_date、end_date)存储为 unix 时间戳,这就是我使用“NUMERIC”和“meta_value_num”的原因。$today 是当前日期的时间戳。以下是我正在尝试做的事情的例子......把我的头发拉出来 - 任何帮助将不胜感激!

这有效:

$args = array(  
    'post_type' => 'events',
    'posts_per_page' => -1,
    'meta_key' => 'start_date',
    'orderby' => 'meta_value_num',
    'order' => 'ASC',
    'meta_query' => array(
        array(
            'key' => 'start_date',
            'value' => $today,
            'compare' => '>=',
            'type' => 'NUMERIC',
        ),

    )
);

当我为 meta_query 添加第二个数组时 - 不起作用:

$args = array(  
    'post_type' => 'events',
    'posts_per_page' => -1,
    'meta_key' => 'start_date',
    'orderby' => 'meta_value_num',
    'order' => 'ASC',
    'meta_query' => array(
        'relation' => 'AND',
        array(
            'key' => 'start_date',
            'value' => $today,
            'compare' => '>=',
            'type' => 'NUMERIC',
        ),
        array(
            'key' => 'end_date',
            'value' => $today,
            'compare' => '<=',
            'type' => 'NUMERIC',
        ),

    )
);

当我在主查询中使用 meta_compare 时,单个 meta_query - 不起作用:

$args = array(  
    'post_type' => 'events',
    'posts_per_page' => -1,
    'meta_key' => 'start_date',
    'meta_value_num' => $today,
    'meta_compare' => '>=',
    'orderby' => 'meta_value_num',
    'order' => 'ASC',
    'meta_query' => array(
        'relation' => 'AND',
        array(
            'key' => 'end_date',
            'value' => $today,
            'compare' => '<=',
            'type' => 'date',
        ),

    )
);

当我在主查询中使用 meta_compare 和多个 meta_queries - 不起作用:

$args = array(  
    'post_type' => 'events',
    'posts_per_page' => -1,
    'meta_key' => 'start_date',
    'meta_value_num' => $today,
    'meta_compare' => '>=',
    'orderby' => 'meta_value_num',
    'order' => 'ASC',
    'meta_query' => array(
        'relation' => 'AND',
        array(
            'key' => 'start_date',
            'value' => $today,
            'compare' => '>=',
            'type' => 'NUMERIC',
        ),
        array(
            'key' => 'end_date',
            'value' => $today,
            'compare' => '<=',
            'type' => 'NUMERIC',
        ),

    )
);
4

4 回答 4

7

这就是我使用它的方式,它对我来说工作正常。

$the_query = new WP_Query(array(
    'post_type' => 'job',
    'posts_per_page'   => 25,
    'meta_query' => array(
        array(
            'key' => 'published_date',
            'value' => array('20140401','20140405'),
            'compare' => 'BETWEEN',
            'type' => 'DATE'
        )
    )
));


if ($the_query->have_posts()) {

    echo '<ul>';
    while ($the_query->have_posts()) {
        $the_query->the_post();
        echo '<li>' . get_the_title() . '</li>';
    }
    echo '</ul>';

} else {
    echo 'Sorry! No Posts';
}

wp_reset_postdata();

法典上最重要的注释。

仅当日期以 YYYYMMDD 格式存储并使用此格式进行测试时,“类型”DATE 才与“比较”值 BETWEEN一起使用。

于 2014-05-01T05:35:10.427 回答
3

这就是我最终做的事情:

$args = array(  
    'post_type' => 'events',
    'posts_per_page' => -1,
    'meta_key' => 'start_date',
    'meta_value_num' => $yesterday,
    'meta_compare' => '<=',
    'orderby' => 'meta_value_num',
    'order' => 'ASC',
    'meta_query' => array(
        'relation' => 'AND',
        array(
            'key' => 'start_date',
            'value' => array($first_minute,$last_minute),
            'compare' => 'BETWEEN',
            'type' => 'NUMERIC',
        ),
        array(
            'key' => 'end_date',
            'value' => $yesterday,
            'compare' => '>=',
            'type' => 'NUMERIC',
        ),
        array(
            'key' => 'start_date',
            'value' => $yesterday,
            'compare' => '>=',
            'type' => 'NUMERIC',
        ),


    )
)

这将获取当前月份的事件。我输入了一个月的第一分钟、一个月的最后一分钟和昨天 11:59:59 的“昨天”的变量。

于 2013-11-25T15:15:06.033 回答
1

不确定您在尝试什么,但在选择今天或将来开始的事件(start_date >= $today)并在今天或过去结束(end_date <= $today)时不返回任何内容似乎是合乎逻辑的......

于 2013-08-25T10:08:39.167 回答
1

Alexandru-Florentin Popescu 是对的!使用您的代码另外以下:

$args = array(  
'post_type' => 'events',
'posts_per_page' => -1,
'meta_key' => 'start_date',
'orderby' => 'meta_value_num',
'order' => 'ASC',
'meta_query' => array(
    'relation' => 'AND',
    array(
        'key' => 'start_date',
        'value' => $today,
        'compare' => '<=',
        'type' => 'NUMERIC',
    ),
    array(
        'key' => 'end_date',
        'value' => $today,
        'compare' => '>=',
        'type' => 'NUMERIC',
    ),

));

您只需要在两个数组中更改键“比较”

于 2018-09-15T15:26:11.980 回答