清理元查询中的自定义字段值

时间:2015-04-09 作者:la1ch3

我正在使用pre_get_posts 钩住meta_query args按日期筛选存档循环。基本上,有一个“事件”的自定义帖子类型,我的用户键入日期作为事件的自定义字段,例如,格式为“2015年4月10日”。如果用户输入的日期已过,意味着事件已经发生,那么我不希望这些帖子显示在循环中。我被告知要通过meta\\u查询来执行此操作。

这很好,但我想将输入的日期与YYYY-MM-DD格式的当前日期进行比较,这意味着我需要重新排列用户的日期输入(格式为M-D-YYYY)以进行比较。我尝试了下面的代码,但没有成功。有人有什么建议吗?

function wpd_date_meta_query( $query ) {
    if( $query->is_post_type_archive( \'event\' ) && $query->is_main_query() ){

        function parseDate($date){
            $dateAr = explode("/", $date);
            if( strlen($dateAr[0]) < 2 ){
                $dateAr[0] = "0" . $dateAr[0];
            }
            if( strlen($dateAr[1]) < 2 ){
                $dateAr[1] = "0" . $dateAr[1];
            }
            $newDate = $dateAr[2] . $dateAr[0] . $dateAr[1];
            return $newDate;
        }

        $meta_query = array(
            array(
                \'key\' => parseDate(\'Date\'),
                \'value\' => date(\'Ymd\'),
                \'compare\' => \'>=\',
                \'type\' => \'NUMERIC\'
            )
        );

        $query->set( \'meta_query\', $meta_query );
        $query->set( \'meta_key\', parseDate(\'Date\') );
        $query->set( \'orderby\', \'meta_value_num\' );
        $query->set( \'order\', \'ASC\' );
    }
}
add_action( \'pre_get_posts\', \'wpd_date_meta_query\' );

1 个回复
SO网友:redelschaap

这个strtotime() 功能是您在此所需的:

$date = date( \'Y-m-d\', strtotime( $date ) ); //2015-04-10 with your example
请注意,保存这些值时需要执行此操作,而不是在运行查询时。运行查询时,不能动态转换数据库中已有的数据。

Edit:我注意到您的元查询中有一个错误。这应该可以:

function wpd_date_meta_query( $query ) {
    if( $query->is_post_type_archive( \'event\' ) && $query->is_main_query() ){
        $meta_query = array(
            array(
                \'key\' => \'<your custom field name>\',
                \'value\' => date( \'Y-m-d\' ),
                \'compare\' => \'>=\',
                \'type\' => \'date\'
            )
        );

        $query->set( \'meta_query\', $meta_query );
        $query->set( \'meta_key\', \'<your custom field name>\' );
        $query->set( \'orderby\', \'meta_value\' );
        $query->set( \'order\', \'ASC\' );
    }
}
add_action( \'pre_get_posts\', \'wpd_date_meta_query\' );

结束

相关推荐

Iterate through ID's in loop

我已经基于category创建了一个自定义循环,现在我想运行一个函数,将当前帖子的特定ID作为参数进行迭代。我有。。$secondary_loop = new WP_Query(array( \'category_name\' => get_the_title(), \'posts_per_page\' => 5 )); while ( $secondary_loop->have_posts() ) : $secondary_loop->the_post();&#x