你不需要因爲你使用Wordpress的.htaccess與mod_rewrite的或做任何事情。 WordPress的內置系統來處理重寫規則。您也可以在功能中正確設置您的URL參數。該函數是add_rewrite_rule()
,代碼中的示例非常好。不過,我可以引導你通過它,所以你可以看到究竟發生了什麼。
採取以下重寫規則從例如:
add_rewrite_rule('^nutrition/([^/]*)/([^/]*)/?','index.php?page_id=12&food=$matches[1]&variety=$matches[2]','top');
首先,讓我們去了函數的參數。第一個參數是用於重寫的regex。如果此正則表達式在當前URL上找到匹配項,則重寫將啓動。任何URL參數都將加載到$matches
數組中,稍後在該函數的第二個參數中使用。
第二個參數是將被重寫的實際URL。請注意,page_id在這裏被使用,而不是頁面中斷。重要的是你使用這個參數的頁面ID而不是slug,因爲slug本身是一個重寫。後面的參數是您傳遞給處理程序的查詢字符串的值。
正如你可能知道,在WordPress的所有頁面都通過index.php文件傳送。如果你對MVC很熟悉,這很像前端控制器。因此,您所有的重寫應該在開頭包含index.php文件。這反映在這個函數的第二個參數中。您可以使用其他文件進行自定義重寫,但爲簡單起見,假設您使用的是標準Wordpress index.php文件。
最後一個參數是,所述重寫應放置在隊列中的位置。您可以使用「頂部」或「底部」。在WordPress重寫之前加載頂部,底部之後加載。
使用此功能,WordPress會行添加到您的htaccess的即時和基於當前頁面上更新它們。這絕對是在Wordpress中重寫的最佳方式!希望這可以幫助!
更新基於評論
你會將此代碼放在您的functions.php文件。您應該將其包裝在一個函數中,並將其掛接到在重寫規則之前觸發的操作。這是符合您確切的問題的示例:
add_action('init', 'my_custom_rewrite_function');
function my_custom_rewrite_function() {
$director_category_id = 5; // Change to correct id
$project_category_id = 6; // Change to correct id
$handler_page_id = 25 // The page ID for the handler
add_rewrite_rule('^director/([^/]*)/([^/]*)/?','index.php?page_id=$handler_page_id&category=$director_category_id&name=$matches[1]&path=$matches[2]','top');
add_rewrite_rule('^project/([^/]*)/([^/]*)/?','index.php?page_id=$handler_page_id&category=$project_category_id&name=$matches[1]&path=$matches[2]','top');
flush_rewrite_rules(); // This will make sure that the rewrite rules are added
}
然後,您可以做您的每個查詢字符串參數的get_query_var()
處理您查詢您的自定義模板。
爲什麼不使用自定義規則內置的[Permalink](http://codex.wordpress.org/Using_Permalinks#Choosing_your_permalink_structure)功能? – UIlrvnd
這不提供正確的功能。 – Andre