如何比较 wordpress 中的自定义字段日期?
How compare custom fields date in 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 );
日期必须采用 YYYY-MM-DD 格式才能使 meta_query 比较生效
$today = date("Y-m-d");
虽然我同意之前的回答(您应该以 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(), '{$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
参数:如果您不添加它,则不会应用过滤器。
这可以与其他日期格式一起使用,您只需将 date_format
参数更改为与 STR_TO_DATE
MySQL function 参数格式一致即可。
我正在执行事件管理任务,我编写了一个小部件以在侧边栏中显示即将发生或过去的事件,但我无法将自定义字段处理为日期。以下是我的代码,而日期存储为 "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 );
日期必须采用 YYYY-MM-DD 格式才能使 meta_query 比较生效
$today = date("Y-m-d");
虽然我同意之前的回答(您应该以 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(), '{$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
参数:如果您不添加它,则不会应用过滤器。
这可以与其他日期格式一起使用,您只需将 date_format
参数更改为与 STR_TO_DATE
MySQL function 参数格式一致即可。