簡體   English   中英

Wordpress重寫規則

[英]Wordpress Rewrite Rules

UPDATE

我已經閱讀了重寫API上的codex文檔,現在我的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');

是的,我會在調整后進入永久鏈接頁面以刷新規則。 行為是相同的,即使頁面確實存在,404規則也是如此,我可以直接在地址欄中輸入來訪問它。 但是,如果我像這樣硬編碼其中一個正則表達式匹配:

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中)不起作用:

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,則一切都按預期工作,禁用規范重定向。 我意識到有一些解決方法,但我只是想了解為什么以下不起作用? 謝謝!

顯然在頁面名查詢變量之后直接使用$ matches變量被視為Wordpress的url_to_post()函數中的特殊情況。 下面是從一個片斷代碼

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假定(錯誤地)$ matches變量應該與頁面路徑匹配。 因此,在您的示例中,如果您沒有名稱為abcd的頁面,則將完全跳過重寫規則(將繼續調用)。

我從閱讀Wordpress代碼中推斷出這一點,但我沒有測試過我的理論(我實際上從未使用過Wordpress)。 您可以通過創建名稱為abcd並再次運行代碼來測試我的理論。 如果我是正確的,這應該使你的規則有效。 我建議不要在頁面-overview后面使用-overview ,從而解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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