WP_Query具有多个post_type

时间:2020-05-05 14:55:39

标签: php wordpress

我正在尝试查询多个帖子类型。实际上,我可以轻松地查询多个帖子类型并进行分页,但后来我意识到我只需要从一种帖子类型中获取特定信息,而现在却难以实现。

在两个post_type im中,使用一个是常规post,另一个是event

我正在将此插件用于事件:https://wordpress.org/plugins/event-organiser/

这是我用来查询两个以上帖子类型的代码。

$args = array(
                'post_type' => array('post','event'),
                'posts_per_page' =>$posts_per_page,
                'paged' => $paged
            );
    $post = new WP_Query($args);

在我尝试去查询event是今天的>=的地方之前,上​​述代码才能正常工作(意味着仅显示当前或将来发生的活动事件)

请给我一些建议或帮助

谢谢

更新

这是新的$args

$args = array(
                'post_type' => array('post','event'),
                'posts_per_page' =>$posts_per_page,
                'paged' => $paged,
//                'meta_key' => '_eventorganiser_schedule_start_finish',
                'meta_query' => array(
                    'relation' => 'OR',
                    array(
                        'key' => '_eventorganiser_schedule_start_finish',
                        'value' => date('Y-m-d'),
//                        'value' => date('Y-m-d h:i:s', time()),
                        'type' => 'NUMERIC',
                        'compare' => '>='
                    ),
                    array(
                        'key' => '_edit_lock',
                        'compare'  => 'EXISTS'
                    )
                )
            );

新的$args生成以下查询:

SELECT SQL_CALC_FOUND_ROWS multi_posts.ID FROM multi_posts INNER JOIN multi_postmeta ON ( multi_posts.ID = multi_postmeta.post_id ) INNER JOIN multi_postmeta AS mt1 ON ( multi_posts.ID = mt1.post_id ) WHERE 1=1 AND ( ( multi_postmeta.meta_key = '_eventorganiser_schedule_start_finish' AND CAST(multi_postmeta.meta_value AS SIGNED) >= '2020-05-05' ) OR mt1.meta_key = '_edit_lock' ) AND multi_posts.post_type IN ('post', 'event') AND (multi_posts.post_status = 'publish' OR multi_posts.post_status = 'acf-disabled') GROUP BY multi_posts.ID ORDER BY multi_posts.menu_order, multi_posts.post_date DESC LIMIT 0, 9

它仍然不过滤过期的事件。

2 个答案:

答案 0 :(得分:0)

我认为您的插件也使用带有元数据字段的开始和结束日期。 您应该检查数据库并使用元查询。这将帮助您获得在今天之前开始的活动。

答案 1 :(得分:0)

这就是我用来获取结果的方式。

$args = array(
                'post_type' => array('post','event'),
                'posts_per_page' =>$posts_per_page,
                'paged' => $paged,
                'suppress_filters'=>false,
                'meta_query' => array(
                    'relation' => 'OR',
                    array(
                        'key' => '_eventorganiser_schedule_start_finish',
                        'value' => date('Y-m-d h:i:s', time()),
                        'type' => 'DATETIME',
                        'compare' => '>=',
                    ),
                    array(
                        'key' => '_eventorganiser_schedule_start_finish',
                        'compare'  => 'NOT EXISTS'
                    )
                )
            );

我认为,既然post确实拥有_eventorganiser_schedule_start_finish,它就可以正常工作。

相关问题