【如何在WordPress中比较自定义字段的日期()】我正在执行事件管理任务, 我已经编码了一个小部件以在边栏中显示即将发生的事件或过去的事件, 但是我无法将自定义字段作为日期进行处理。以下是我的代码, 而日期存储为”
m / d / Y”
。请帮助我解决此问题。预先感谢
$today = date('m/d/Y');
$args = array(
'post_type' =>
'event', 'post_status' =>
'publish', 'meta_key' =>
'event_date', 'posts_per_page' =>
'5', 'meta_query' =>
array(
array(
'key' =>
'event_date', 'value' =>
$today, 'compare' =>
'<
=', 'type' =>
'date'
)
), 'orderby' =>
'meta_value_num', 'order' =>
'ASC'
);
$the_query = new WP_Query( $args );
#1日期必须采用YYYY-MM-DD格式, meta_query比较才能正常工作
$today = date("Y-m-d");
#2尽管我同意上一个答案(你应该以YYYY-MM-DD格式存储日期), 但我认为我可以使用Wordpress过滤器找到解决方法, 因此你可以使用。
这应该进入你的functions.php文件:
add_filter('posts_where', 'my_callback', 10, 2);
function my_callback( $where, $wp_query_obj ) {
if( isset( $wp_query_obj->
query['date_format'] ) ) {
$where = preg_replace('~CAST\((.+?)\)~', "STR_TO_DATE(CAST($1), '{$wp_query_obj->
query['date_format']}')", $where);
}
return $where;
}
这是你的查询:
$today = date('m/d/Y');
$args = array(
'post_type'=>
'event', 'posts_per_page' =>
'5', 'meta_key'=>
'event_date', 'meta_value'=>
$today, 'meta_compare'=>
'<
=', 'date_format'=>
'%m/%d/%Y'
'orderby'=>
'meta_value_num', 'order'=>
'ASC'
);
$the_query = new WP_Query( $args );
这里的关键是我添加到查询中的date_format参数:如果不添加它, 则将不应用过滤器。
这可以与其他日期格式一起使用, 你只需要更改与STR_TO_DATE MySQL函数参数格式一致的date_format参数即可。
推荐阅读
- Hamilton cycle
- 如何通过相对URL引用WordPress主题内的文件夹而没有PHP函数()
- 保存/重置主题选项页面时,如何获取备用样式表加载到wp_head中()
- 通过插件劫持get_template_part
- 隐藏”发布的帖子”。在WordPress中查看”发布”管理员通知
- 在WordPress中隐藏/删除自定义帖子类型选项
- 仅使用get_terms获得类别名称
- 获取并显示附带的视频wordpress
- esc_url()和WordPress安全性()