我最终找到了一个解决方案:
首先pre_get_posts 我最初的操作并不好,因为事件和帖子都使用相同的模板显示(taxonomy event category.php)。我在pre\\u get\\u posts中编写的代码强制wordpress只显示该模板中的事件,因此我将其删除。
我将其替换为以下代码,该代码根据post\\u type query var过滤查询:
if (is_tax(\'event-category\')) {
$query->set(\'post_type\', get_query_var(\'post_type\', \'event\'));
}
(如果没有post\\u类型的查询变量,则默认为事件)。
然后我添加了以下重写规则,这使Wordpress能够识别articles/event-category-slug URL
add_rewrite_rule(\'^articles/(?!page)(.+?)(?:/page/([0-9]*))*/?$\', \'index.php?post_type=post&event-category=$matches[1]&paged=$matches[2]\', \'top\');
需要regex的(?!page)部分,以便该规则不会在分页URL上触发,如文章/页/2,但仍会在文章/事件类别slug/页/2上触发
我不是regex的专家,所以也许有更好的方法来编写这个规则,但它似乎是有效的。