- 我使用了許多WordPress重寫規則,以允許在URL路徑開頭立即注入國家代碼,確定時區偏移量。一個例子:WordPress:通過URL重寫覆蓋或繞過自定義帖子類型的重定向規則
add_rewrite_rule('^([A-Za-z]{2})/days/([0-9]+)/?$', 'index.php?geo=$matches[1]&m=$matches[2]&post_type=days','top');
這需要像www.daysoftheyear.com/days/2011/的請求(其通常將返回該請求的所有有效含量),並且允許,例如,www.daysoftheyear.com/us/days/2011 /返回相同的內容,但支持基於國家/地區代碼的時區偏移。
在幾乎所有地方都能正常工作,除了單個查詢類型 - 一個用於'天'自定義帖子類型頁面,例如http://www.daysoftheyear.com/days/waffle-day/。
我已經制定的規則是:
add_rewrite_rule('^([A-Za-z]{2})/?$', 'index.php?geo=$matches[1]','top');
add_rewrite_rule('^([A-Za-z]{2})/days/([0-9]+)/?$', 'index.php?geo=$matches[1]&m=$matches[2]&post_type=days','top');
add_rewrite_rule('^([A-Za-z]{2})/days/([0-9]+)/([0-9]+)/?$', 'index.php?geo=$matches[1]&m=$matches[2]$matches[3]&post_type=days','top');
add_rewrite_rule('^([A-Za-z]{2})/days/([0-9]+)/([0-9]+)/([0-9]+)/?$', 'index.php?geo=$matches[1]&m=$matches[2]$matches[3]$matches[4]&post_type=days','top');
add_rewrite_rule('^([A-Za-z]{2})/days/([A-Za-z\-].*)/?$', 'index.php?geo=$matches[1]&page=$matches[2]','top');
add_rewrite_rule('^([A-Za-z]{2})/([A-Za-z\-].*)/?$', 'index.php?geo=$matches[1]&pagename=$matches[2]','top');
第五規則768,16在幾乎相同的方式如上匹配http://www.daysoftheyear.com/gb/days/waffle-day/,但重定向 - 我懷疑它與嘗試重定向到內置的規則confliucting如果格式不正確(例如,如果我輸入與正確的URL相近的結構匹配,它會將我重定向到正確的資源)。
我可以確認此請求的'原始'網址有效 - 例如,http://www.daysoftheyear.com/index.php?geo=en&name=soup-month&post_type=days返回有效的和預期的結果。
我不相信這是一個正則表達式規則,而不是WP管理自定義帖子類型的具體挑戰?
編輯
更新,以便連字符 - 行爲沒有改變,雖然regexpal報道說,正則表達式的工作對例如URL。
更新禁用WP規範重定向功能後 - 現在404'而不是301'到頁面。
更新爲使用'page'而不是'pagename',根據此處的信息:http://codex.wordpress.org/Class_Reference/WP_Query#Post_.26_Page_Parameters - 行爲沒有變化。
更新的代碼,添加了一個換行符,並澄清說,實際上,我引用線5條,而不是第4行
在你的規則列表中,你有2次對第3行的'add_rewrite_rule'的調用 - 這是否意味着「第四條規則」是第三行的第二條規則或第4行的規則? – Robin
粘貼錯字,抱歉。通過將雙重規則分成兩行來澄清。我正在參考,其實,第5行。 –