[英]Negating certain words from a custom rewrite expression?
我有一个名为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页面?
您应该可以使用否定的超前查询从路线中排除“提要”,例如: (book)/(?!feed$)(.+)$
。
至于问题的第二部分,您可以连接到request
过滤器中,检查查询变量,然后向变量数组添加“错误”值,以使Wordpress引发404错误。
add_filter('request', 'book_request');
function book_request($vars) {
if (!in_array($vars['book_language'], array('english', 'spanish'))) {
$vars['error'] = '404';
}
return $vars;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.