Wordpress WP_Query,从元术语中排除日期

Posted

技术标签:

【中文标题】Wordpress WP_Query,从元术语中排除日期【英文标题】:Wordpress WP_Query, exclude date from meta term 【发布时间】:2021-07-16 10:04:12 【问题描述】:

我正在为客户端使用 WP-JSON 制作 API,他们正在使用管理事件的插件,并且 API 应该返回下一个事件,而不是过去。

function app_get_newer_posts($data) 
    $args = array(
        'post_type' => 'event',
        'post_status' => 'publish',
        'posts_per_page' => 99,
        'paged' => $data['page'],
        'meta_key'   => 'ovaem_date_start_time',
        'orderby'    => 'meta_value_num',
        'order' => 'asc'
    );
    $query = new WP_Query( $args );

    if ($query->have_posts()) 
        $ret = [];

        while ( $query->have_posts() ) 
            $term = get_term(get_the_ID,'');
            $query->the_post();
            setlocale(LC_TIME, 'it_IT.UTF8', 'it.UTF8', 'it_IT.UTF-8', 'it.UTF-8');
            if(get_post_meta(get_the_ID(), 'ovaem_date_start_time')[0] < date("Y-m-d")) 
                $ret['schedule'][] = [
                    'date' => strftime('%e %B %Y',get_post_meta(get_the_ID(), 'ovaem_date_start_time')[0]),
                    'category' => [ get_the_terms( get_the_ID(), 'categorie' )[0]->name ],
                    'premium' => false,
                    'url' => get_the_permalink(),
                    'groups' => [[
                        'time' => utf8_encode( strftime("%d %b %Y", get_post_meta(get_the_ID(), 'ovaem_date_start_time')[0]) ),
                        'sessions' => [[
                            'id' => get_the_ID(),
                            'name' => html_entity_decode(the_title('','',false), ENT_QUOTES),
                            'location' => get_the_terms( get_the_ID(), 'location')[0]->name,
                            'description' => get_the_content(),
                            'timeStart' => date('d M Y h:i',get_post_meta(get_the_ID(), 'ovaem_date_start_time')[0]),
                            'timeEnd' => date('d M Y h:i',get_post_meta(get_the_ID(), 'ovaem_date_end_time')[0]),
                            'categories' => [ get_the_terms( get_the_ID(), 'categorie' )[0]->name ],
                            'pic' => get_the_post_thumbnail_url(),
                            'position' => [
                                'lat' => get_post_meta(get_the_ID(), 'ovaem_event_map_lat')[0], 
                                'lng' => get_post_meta(get_the_ID(), 'ovaem_event_map_lng')[0]],
                            'slug' => get_post_field( 'post_name', get_post() ),
                        ]]
                    ]]
                ];
            

        
     else 
        $ret = "-1";
    

    return $ret;

目前,它通过meta_key“ovaem_date_start_time”获取所有事件类型和顺序的帖子,但它应该排除所有过去的事件。 我应该将什么参数传递给args 数组来比较当前的 meta_key 值和今天的日期?

【问题讨论】:

【参考方案1】:
                    'meta_query' => array(
                        array(
                            'key' => 'ovaem_date_start_time',
                            'value' => time(),
                            'compare' => '>=',
                        )
                    )

像这样的工作,获取开始日期大于当前日期的所有事件,您可能需要更改值,因为它取决于 ovaem_date_start_time 实际保存为时间还是日期时间

【讨论】:

感谢您的回复,尝试了您的解决方案,但它仍然返回过去的事件。 PS:meta_key "ovaem_date_start_time" 是一个时间戳 ovaem_date_start_time保存为什么类型的字段 时间戳"time": "1619827200", 也许尝试编辑的答案(我没有测试过) 试过了,还在。

以上是关于Wordpress WP_Query,从元术语中排除日期的主要内容,如果未能解决你的问题,请参考以下文章

优化 Wordpress 查询

WordPress 中自定义 wp_query 的分页需要 404 错误页面

WP_Query($args) 在 Wordpress 中不起作用

WordPress:如何使用 $wp_query 按类别过滤帖子?

WordPress 自定义查询 WP_Query 所有参数

未捕获的错误:在 url 中找不到类 'WP_Query' - Wordpress