如何比较 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 参数格式一致即可。