問題描述

我花了幾天時間嘗試學習如何最好地添加重寫規則。到目前為止,我的理解是,添加簡單規則的合適方法是使用 add_rewrite_rules(),非常感謝 Jan Fabry 在這個交換中誰的闡述是非常有用的。

雖然他提到 add_rewrite_tags(),但我還沒有看到指南,它解釋了什麼時候有利於使用它,而不是添加重寫規則的其他方法,或者其使用的任何好的例子。它似乎是一個更強大的工具,但這是我所有的可能。我發現食典中的例子也是 crypticincomplete 。有人可以詳細闡述或指出一些資源嗎?我在 Google 上發現沒有用。

編輯:它的 Codex page 談論’generally’ 使用它與 add_rewrite_rules(),但沒有詳細説明。類似地,add_rewrite_rules()Codex page 是指 add_rewrite_tags(),但是對信息也是非常稀疏的。何時以及如何使用這種組合?我發現的唯一的例子是 this answer by Rob Vermeer,我不明白。

最佳解決方案

根本區別是:

  • add_rewrite_rule()添加了一個解釋的特定規則

  • add_rewrite_tag()添加了一個在 URL 結構中使用的佔位符。然後,該佔位符用於生成多個規則。

例如 – 假設你是在各個國家廣告酒店的旅行社。你可能想要一個酒店的網址

  www.example.com/hotels/UK/Balmoral

在這個國家 (在這個例子中是英國) 是一個自定義的分類術語,而巴爾莫勒是一個酒店 (郵政類型) 。我們可以為此添加重寫規則,但是我們必須生成一個規則:

  • 酒店自己

  • 酒店的附件

  • 適用於多個頁面等的酒店 (帖子) 的規則

生成這些規則可能變得複雜。此外,我們可能會與 WordPress 自己的這個帖子類型的規則進行競爭 – 從我們在註冊帖子類型時設置的 permastructure 生成。 (無論如何,讓 WordPress 做的工作) 。

這個’permastructure’ – 類似於您在固定鏈接設置中設置的帖子 – 確定 WordPress 生成的重寫規則。但是,由於我們想要一個包含一些未知 (國家) 的結構 – 我們需要解釋 – 我們需要提供一個%country% 形式的佔位符。 (幾乎與%category% 相同) 。

例如:

add_action_init('init','wpse71305_register_types');

function wpse71305_register_types(){

     //You'll need to register the country taxonomy here too.

     //Add 'country' tag.
     add_rewrite_tag('%country%', '([^&/]+)'));

     //Register hotel post type with %country$ tag
    $args = array(
        ...
        'has_archive'=>true,
        'rewrite' => array(
            'slug'=>'hotels/%country%',
            'with_front'=> false,
            'feed'=> true,
            'pages'=> true
        )
        ...
    );
    register_post_type('hotel',$args);
}

注意:WordPress 不知道如何從%country% 標籤生成 url – 您需要告訴它。 (我在下面鏈接的文章中介紹) 。

最後 WordPress 還將存儲匹配的值,以便您可以通過 get_query_var()(不符合標準重寫規則的東西) 來檢索它。

您還可以創建要在帖子的永久性結構中使用的標籤 (在固定鏈接設置頁面中設置) 。

通過添加標籤,我們可以在 permastructures 中使用它。 WordPress 然後知道

  • 期待什麼

  • 如何解釋 url(檢查它匹配)

  • 如何解釋該值 (即’UK’)

(作為參考看到這篇文章我寫道:http://wp.tutsplus.com/tutorials/creative-coding/the-rewrite-api-the-basics/) 。

Edit

如上所述,上面的例子是比較差的,因為 register_taxonomy()其實是調用 add_rewrite_tag()

關於使用它們的食典文件’in combination’:這可能是誤導的,因為它們都可以獨立使用。但是,如上所述,add_rewrite_tag()將標籤名稱添加到 WordPress-understand ‘query variables’ 。實際上,您可以使用 get_query_var()檢索該值。因此,當 add_rewrite_rule()add_rewrite_tag()一起使用時,該變量將由 WordPress 存儲。但是還有其他的方法可以做到這一點 (參見 this answer – 還有 Rob Vermeer 的評論) 。

也相關:How to retrieve $_GET variables from rewritten URLs?

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。