簡體   English   中英

否定自定義重寫表達式中的某些單詞?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM