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

Wordpress Query by Custom Field with date type

我想创建一个查询,其中应显示所有 post,其中自定义字段“expiration_date”大于今天的日期。 缩写形式:如果 post 的到期日期已到,则不应再在查询中显示

我试过这个片段:

        <?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",但没有任何帮助。结果是,post 将始终显示。

如果有人能帮助我就太好了!

您可以进行两次查询排除。第一个查询找到所有要排除的 posts,然后遍历这些并将 post ID 存储在一个数组中,然后调用第二个查询排除它们使用 'post__not_in' 和 ID 数组作为参数。

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

供参考material: 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);

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

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

你可以做得更简单,如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' => '>'               
);