我想创建一个查询,其中应显示所有帖子,其中自定义字段“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”,没有任何帮助。结果是,将始终显示帖子。
如果有人可以帮助我会很棒!
答案 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_Query和 http://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' => '>'
);