问题描述
这是我用来获取日期元数据比今天更新的事件帖子的代码片段:
<?php
query_posts( array(
'post_type' => 'concerts',
'meta_key' => 'numericdate',
'posts_per_page' => -1,
'orderby' => 'meta_value',
'order' => 'ASC',
'meta_query' => array(
array(
'key' => 'numericdate',
'value' => date('dmY'),
'compare' => '>=',
'type' => 'date'
)
)
) );
if (have_posts()) : ?>
这没有返回结果。 “numericdate” 字段包含一个”ddmmyyyy” 字符串,所以我预计与”dmY” 今天日期值的比较将会起作用。我错了。或者上面的代码有一些错误。谢谢你的帮助 !
最佳解决方案
我有完全相同的问题,除了我使用 std 。帖子类型 (帖子) 和我的查询中的一个类别。除了排序顺序,一切都起作用。
$d = date("Y-m-d");
$args = array(
'post_type' => 'post',
'category_name' => 'events',
'post_status' => 'publish,draft,pending,future,private', // just for me
'meta_key' => 'event_start',
'orderby' => 'meta_value_num',
'order' => 'ASC',
'posts_per_page' => -1,
'meta_query' => array(
array(
'key' => 'event_start',
'value' => $d,
'type' => 'date',
'compare' => '>'
)
)
);
但是我的帖子由 String-Comparison 排序。我做错了什么?
经过一点点的试验和错误,我发现,而不是’meta_value_num’ 我应该使用’meta_value’:
$d = date("Y-m-d");
$args = array(
'post_type' => 'post',
'category_name' => 'events',
'post_status' => 'publish,draft,pending,future,private',
'meta_key' => 'event_start',
'orderby' => 'meta_value',
'order' => 'ASC',
'posts_per_page' => -1,
'meta_query' => array(
array(
'key' => 'event_start',
'value' => $d,
'type' => 'date',
'compare' => '>'
)
)
);
次佳解决方案
对于什么是它的价值,使用 wordpress current_time()这种查询。
current_time('mysql')
根据 MySQL 可接受的管理员设置提供服务器时间
第三种解决方案
我相信 MySQL 日期格式应该是 YYYY-MM-DD 。另外我认为 orderby 应该是 meta_value_num,否则这些值被视为字符串。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。