首先,“未来”状态用于尚未发布的帖子,不应用于标记未来发生的事件。
(我建议将事件的数据存储在post meta中,然后按post meta字段进行查询/排序。请参阅this question 和this question)
其次,在代码中有以下两行:
$args = array( \'post_type\' => \'event\', \'posts_per_page\' => 50, \'post_status\' => \'future\', \'order\' => \'ASC\' );
$loop = new WP_Query( $args );
这些完全覆盖默认WordPress查询,该查询尝试从数据库中查找与分类术语匹配的“已发布”事件。(请记住,“未来”事件/帖子不被视为“已发布”。)
你的$loop
query尝试查询数据库中任何尚未发布的“事件”,由于这超过了原始查询,因此它应该为每个分类术语显示相同的内容。
但你看不到这个。。。(有时您会看到没有任何事件)。这是因为有条件:
have_posts();
这是检查原始查询是否有任何帖子(即在这个分类术语中是否有发布的事件)。它没有检查您当前的查询(是否有任何未来事件?)。检查您的
$loop
查询:
$loop->have_posts();
How to merge rather than replace the query
因此,在上面我已经说过,您超越了WordPress自动执行的查询(查找该术语的已发布事件)。要在新查询中包含分类术语请求,请使用以下技巧:
将查询的两行替换为:
$args = array( \'post_type\' => \'event\', \'posts_per_page\' => 50, \'post_status\' => \'future\', \'order\' => \'ASC\' );
//Merge with default query
global $wp_query;
$args = array_merge( $wp_query->query,$args);
$loop = new WP_Query( $args );