我正在尝试查询多个帖子类型。实际上,我可以轻松地查询多个帖子类型并进行分页,但后来我意识到我只需要从一种帖子类型中获取特定信息,而现在却难以实现。
在两个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
它仍然不过滤过期的事件。
答案 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
,它就可以正常工作。