【问题标题】:How compare custom fields date in wordpress?如何比较wordpress中的自定义字段日期?
【发布时间】:2015-04-09 20:12:09
【问题描述】:

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

【问题讨论】:

    标签: wordpress wordpress-theming custom-fields


    【解决方案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 参数:如果您不添加它,则不会应用过滤器。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-27
      • 1970-01-01
      • 1970-01-01
      • 2016-02-14
      • 1970-01-01
      • 1970-01-01
      • 2013-05-29
      • 2013-10-28
      相关资源
      最近更新 更多