如何比较wordpress中的自定义字段日期?

时间:2015-04-09 20:12:10

标签: wordpress wordpress-plugin wordpress-theming custom-fields

我正在为事件管理执行任务,我编写了一个小部件来在侧边栏中显示即将发生或过去的事件,但我无法将自定义字段作为日期处理。以下是我的代码,而日期则存储为" 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 );

2 个答案:

答案 0 :(得分:2)

日期必须采用YYYY-MM-DD格式才能使meta_query比较正常工作

$today = date("Y-m-d");

答案 1 :(得分:0)

虽然我同意之前的回答(你应该以{{1​​}}格式存储日期),但我认为我可以找到一个使用Wordpress过滤器的解决方法,所以你走了。

这应该进入您的YYYY-MM-DD文件:

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 ); 参数:如果您不添加,则过滤器将无法应用。

这可以与其他日期格式一起使用,您只需要更改与STR_TO_DATE MySQL function参数格式一致的date_format参数。