自定义字段的Wordpress查询与日期类型

时间:2015-02-02 19:58:36

标签: php mysql wordpress date custom-fields

我想创建一个查询,其中应显示所有帖子,其中自定义字段“expiration_date”大于今天的日期。 简短形式:如果到达帖子的到期日期,它将不再显示在查询中

我尝试使用此代码段:

        <?php
            $today = date("Y-m-d");
            $args= array(
                'tag' => 'Pinnwand',
                'meta_query' => array(
                    'key' => 'expiration_date',
                    'type' => 'DATE',
                    'value' => $today,
                    'compare' => '>'            
                )
            );
        $my_query = new WP_Query($args); ?>

到期日期的格式为(2014-10-04)。 但我也尝试了双方的格式“Ymd”,更改比较类型,或将类型设置为“NUMERIC”,没有任何帮助。结果是,将始终显示帖子。

如果有人可以帮助我会很棒!

3 个答案:

答案 0 :(得分:1)

好的,我发现了错误! 正确的查询需要一个array()。我不确切知道为什么,但在其他情况下,查询无法使用它。所以这是代码

        $args= array(
             'tag' => 'Pinnwand',
            'meta_query' => array(
            array(
                'key' => 'expiration',
                'type' => 'DATE',
                'value' => $today,
                'compare' => '>'            
            ),
            ),         
        );          
$my_query = new WP_Query($args); ?>

答案 1 :(得分:0)

您可以执行双查询排除。第一个查询找到您要排除的所有帖子,然后遍历这些帖子并将帖子ID存储在一个数组中,然后使用&#39; post__not_in&#39;调用第二个查询来排除它们。以ID数组作为参数。

我会使用$ wpdb对象,因为它非常有效。

参考资料: http://codex.wordpress.org/Class_Reference/WP_Queryhttp://codex.wordpress.org/Class_Reference/wpdb

这段代码应该做你正在尝试做的事情或让你接近它,我也把你的标签作为查询的一部分。

// first query to find exclusions
$today = date("Y-m-d");
$exclusions = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE expiration_date < ".$today);
if ( $exclusions ) {
foreach ( $exclusions as $exclusion ) {
    $excludeIDs[] = $exclusion->ID;
}
}

// second query using exclusion array
$args= array(
    'tag' => 'Pinnwand',
    'post__not_in' => $excludeIDs,           
);
$my_query = new WP_Query($args);

答案 2 :(得分:0)

你可以更简单,如http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters所述:

$args= array(
    'tag' => 'Pinnwand',
    'meta_key' => 'expiration',
    'meta_type' => 'DATE',
    'meta_value' => $today,
    'meta_compare' => '>'               
);