我很难通过此wp_query
获得有效的解决方案。我目前有一些分配给帖子的自定义设置,一个是帖子是否为“精选”,第二个是帖子结束的日期和时间(不再显示在结果中)。我有查询使用该功能,但只需要将此结束日期纳入其中,这是查询工作查找与'特色':
WP_Query('meta_key=skyali_feature&showposts=4&orderby=post_date');
结束日期在wp_postmeta
表中设置,其中meta_key
是'the_date'而meta_values
看起来像'05 / 16/2013 05:24'。我想编辑上面的查询,如果'the_date'已经设置,那么仅当'the_date'大于今天的日期和时间时才包含帖子。
这是我失败的尝试:
WP_Query(
'meta_key=skyali_feature&meta_key=the_date&meta_compare=>=&meta_value='
.date('d/m/Y H:i')
.'&showposts=4&orderby=post_date&orderby=the_date'
);
答案 0 :(得分:15)
我最近必须做一些非常相似的事情,最后需要使用meta_query
属性。你会想做这样的事情:
$today = date('Ymd');
$args = array(
'post_type' => 'post',
'posts_per_page' => '4',
'meta_key' => 'the_date',
'meta_query' => array(
array(
'key' => 'skyali_feature'
),
array(
'key' => 'the_date',
'value' => $today,
'compare' => '>='
)
),
'orderby' => 'meta_value_num',
'order' => 'ASC'
);
$your_custom_query = new WP_Query($args);
一些笔记......
我只需要在我的示例中按日期过滤,但看起来你需要在你的日期/时间做。 (您可以使用您希望的格式调整$today
变量的第一行。)
使用posts_per_page
代替showposts
。不推荐使用showposts
。
请注意,我已将meta_key
包括两次(一次位于数组的顶层,一次作为meta_query
数组中的一个元素。有一个已知的错误,你不能如果你没有以这种方式包括它,你可以通过密钥对结果进行排序。我也争吵了一段时间了!
希望这有帮助,玩得开心!
[edit] 忘记将skyali_feature
密钥添加回数组。
答案 1 :(得分:3)
对于使用具有日期数据类型的高级自定义字段插件的人来说,这是大于或等于今天的日期所需要的:
$today = date('Ymd');
$args = array(
'post_type' => 'post',
'meta_key' => 'end-date',
'meta_query' => array(
array(
'key' => 'end-date'
),
array(
'key' => 'end-date',
'value' => $today,
'compare' => '>='
)
),
'orderby' => 'meta_value',
'order' => 'ASC'
);
$your_custom_query = new WP_Query($args);
答案 2 :(得分:1)
对于使用Custom metadata manager的用户,您会发现datepicker
字段存储为时间戳。
所以在类似的情况下,上面的例子不起作用,你可能有PHP整理你需要比较的值。并且在23:59:59之前的一天的时间戳它将完成这项工作:
$yesterday = strtotime('yesterday 23:59:59');
$args = array(
'post_type' => 'post',
'meta_key' => 'end-date',
'meta_query' => array(
array(
'key' => 'end-date'
),
array(
'key' => 'end-date',
'value' => $yesterday,
'compare' => '>='
)
),
'orderby' => 'meta_value',
'order' => 'ASC'
);
$your_custom_query = new WP_Query($args);
如果您还想考虑博客的时区设置,请使用current_time(),如下例所示:
$now = current_time('timestamp');
$yesterday = mktime(23, 59, 59, date('n',$now), date('j',$now)-1);