web-dev-qa-db-ja.com

Add_rewrite_tag()をいつ使うべきか?

私は数日かけて書き換えルールを追加する方法を学びました。これまでのところ、私の理解しているとおり、単純なルールを追加するのに適した方法はadd_rewrite_rules()を使用することです。この交換の Jan Fabry に感謝します。

彼はadd_rewrite_tags()に言及していますが、書き換え規則を追加する他の方法やその使用法に関する良い例とは対照的に、それを使用することが有益な場合を説明するガイドについては見ていません。それはより強力なツールのように思えますが、それが私が推測できることのすべてです。 Codexの例では、 cryptic または incomplete であることがわかります。誰かがそれについて詳しく説明したり、何らかのリソースを示したりできますか?グーグルには何も役に立たなかった。

edit:その Codex page は、それをadd_rewrite_rules()と組み合わせて「一般的に」使うことについて話していますが、詳しくは述べていません。同様に、add_rewrite_rules()Codexページadd_rewrite_tags()を参照しますが、情報についても非常にまばらです。いつ、どのようにしてそのような組み合わせが使用されますか?私が見つけた唯一の例は Rob Vermeer によるこの答えで、私は理解できません。

21
seron

基本的な違いは次のとおりです。

  • add_rewrite_rule()は解釈される特定の規則を追加します
  • add_rewrite_tag()は、URL構造で使用するためのプレースホルダーを追加します。このプレースホルダーは複数のルールを生成するために使用されます。

たとえば、あなたが旅行代理店でさまざまな国のホテルを宣伝しているとします。あなたはホテルのURLのようになりたいかもしれません

  www.example.com/hotels/UK/Balmoral

国(この例ではイギリス)が慣習的な分類用語で、Balmoralがホテル(郵便タイプ)の場合。これに書き換え規則を追加することもできますが、その場合は次の規則を生成する必要があります。

  • ホテル自体
  • ホテルの添付ファイル
  • それが数ページにまたがるホテル(投稿)のための規則など。

これらの規則を生成することは複雑になる可能性があります。さらに、ポストタイプを登録するときに設定したpermastructureから生成された、そのポストタイプに対するWordPress独自のルールと競合することになります。 (いずれにせよ、WordPressに任せましょう)。

この「パーマストラクチャ」 - パーマリンク設定で投稿に設定したものと同様に - は、WordPressが生成する書き換え規則を決定します。しかし、いくつかのunknown(国)を含む構造体が必要なので(解釈したい)、%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を解釈する方法(一致することを確認する)
  • 値の解釈方法(例:イギリス)

(参考として、この記事を参照してください: http://wp.tutsplus.com/tutorials/creative-coding/the-rewrite-api-the-basics/

編集する

コメントで述べたように、register_taxonomy()は実際にadd_rewrite_tag()を呼び出すので、上の例は貧弱です。

それらを「組み合わせて」使用することに関するコーデックスのドキュメンテーションに関して:それらは両方とも独立して使用されることができるのでこれはおそらく誤解を招くでしょう。しかし、上記のように、add_rewrite_tag()はタグ名をWordPressが理解できる 'クエリ変数'に追加します。実際にはこれはget_query_var()で値を取得することを可能にします。したがって、add_rewrite_rule()add_rewrite_tag()と一緒に使用すると、変数はWordPressによって格納されます。しかし、これを行うには他の方法があります( この回答を参照してください - Rob Vermeerのコメントも参照してください)。

関連記事: 書き換えられたURLから$ _GET変数を取得する方法

19
Stephen Harris