我有一个名为 Book (/book/) 的 WP 页面,它以各种语言显示一本书。语言和章节变量作为查询变量传递。因此 URL 结构如下所示:
/book/english/(显示英文章节列表) /book/english/foreword/(显示英文前言)
这是我想出的:
add_action('init', 'book_init');
add_filter('rewrite_rules_array', 'book_rewrite_rules_array');
add_filter('query_vars', 'book_query_vars');
function book_init() {
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
function book_rewrite_rules_array($rewrite_rules) {
global $wp_rewrite;
$custom['(book)/(.+)/(.+)$'] = 'index.php?pagename=$matches[1]&book_language=$matches[2]&book_chapter=$matches[3]';
$custom['(book)/(.+)$'] = 'index.php?pagename=$matches[1]&book_language=$matches[2]';
return $custom + $rewrite_rules;
}
function book_query_vars($query) {
array_push($query, 'book_language', 'book_chapter');
return $query;
}
一切正常,但问题是,我添加的重写规则也捕获了我不想要的 /book/feed/ 。所以我正在寻找一个表达式,它会否定来自 '(book)/(.+)/(.+)$' 和 '(book)/(.+)$' 的提要
另外我想知道,如果假设提供的查询变量无效,我应该使用哪个过滤器来检查它以及如何阻止 WP 继续,而是让它发送 404 错误并让它显示 404 页面?