2012-12-03 101 views
3

UPDATEWordPress的重寫規則

我已經通過在改寫API食品文檔不見了,現在在我的functions.php如下:

function my_rewrite_rules() { 
    add_rewrite_rule('(a|b|c|d)/?$', 'index.php?pagename=$matches[1]-overview&myVar=var', 'top'); 
} 
add_action('init', 'my_rewrite_rules'); 

是的,我要去永久鏈接頁面在調整後刷新規則。行爲是一樣的,即使頁面確實存在,404s以上的規則也是如此,我可以通過直接在地址欄中輸入來訪問它。不過,如果我硬編碼,像這樣的正則表達式的比賽之一:

function my_rewrite_rules() { 
    add_rewrite_rule('(a|b|c|d)/?$', 'index.php?pagename=a-overview&myVar=var', 'top'); 
} 
add_action('init', 'my_rewrite_rules'); 

那麼所有的作品如預期,具有查詢乏正確設置。想法?


原來的問題

我一直試圖讓WordPress的重寫規則到現在相當一段時間工作,我絕對難倒,爲什麼下面的代碼(在functions.php中)沒有按」 t工作:

function my_rewrite_rules($rules) { 
    $my_rules = array('(a|b|c|d)/?$' => 'index.php?pagename=$matches[1]-overview&my_var=somevar'); 

    return array_merge($my_rules, $rules); 
} 
add_filter('page_rewrite_rules', 'my_rewrite_rules'); 

我有禁用標準重定向和重寫只是404s。如果啓用重定向,它會轉到正確的頁面,但我的查詢變量將被刪除。如果我刪除'$ matches [1]'並將其替換爲a,b,c或d,則禁用規範重定向時,所有內容都按預期工作。我意識到有幾個解決方法,但我只是想了解爲什麼以下不起作用?謝謝!

+2

你的問題不幸對我沒有任何意義.. –

+1

我認爲你應該使用'Rewrite_API'和'$ wp_rewrite'對象,而不是試圖直接訪問或設置屬性。 –

回答

0

在pagename查詢變量後面直接顯示$ matches變量被視爲WordPress的url_to_post()函數中的特例。下面是從code一個片段:

if ($wp_rewrite->use_verbose_page_rules && preg_match('/pagename=\$matches\[([0-9]+)\]/', $query, $varmatch)) { 
    // this is a verbose page match, lets check to be sure about it 
    if (! get_page_by_path($matches[ $varmatch[1] ])) 
     continue; 
} 

如果我讀這正確似乎WordPress的(誤)的匹配$變量應匹配的頁面路徑。因此,在您的示例中,如果您沒有名稱爲abcd的頁面,則您的重寫規則將完全跳過(將繼續調用)。

我從閱讀WordPress的代碼推斷出這一點,但我沒有測試過我的理論(我實際上從來沒有使用過Wordpress)。您可以通過製作名稱爲a,b,cd的頁面並再次運行您的代碼來測試我的理論。如果我是正確的,這應該使你的規則工作。我建議不要在頁面名稱後面使用-overview,這樣可以解決問題。