add_rewrite_tag()はいつ使用する必要がありますか?


22

書き換えルールを追加する最適な方法を学ぶために数日を費やしました。これまでのところ、単純なルールを追加する適切な方法はを使用することadd_rewrite_rules()であると理解しています。この交換についてJan Fabryに深く感謝します。

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

編集: そのコーデックスページは、それをとともに使用する「一般的」についてadd_rewrite_rules()述べていますが、詳しくは述べていません。同様に、コーデックスのページadd_rewrite_rules()参照しadd_rewrite_tags()ていますが、情報も非常にまばらです。そのような組み合わせはいつ、どのように使用されますか?私が見つけた唯一の例は私が理解していないロブ・フェルメールによるこの答えです。

回答:


21

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

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

たとえば、あなたがさまざまな国のホテルを宣伝する旅行代理店だとします。ホテルのURLを次のようにしたい場合があります

  www.example.com/hotels/UK/Balmoral

国(この例では英国)はカスタム分類用語で、Balmoralはホテル(投稿タイプ)です。このための書き換えルールを追加できますが、次のルールを生成する必要があります。

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

これらのルールの生成は複雑になる場合があります。さらに、おそらく、投稿タイプを登録するときに設定したパーマ構造から生成される、その投稿タイプに関するWordPress独自のルールと競合するでしょう。(いずれにせよ、WordPressに任せてください)。

この「パーマ構造」-パーマリンク設定で投稿に設定したものと同様-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()、(標準の書き換えルールではないものを介して)取得できます。

投稿のパーマ構造で使用するタグを作成することもできます(パーマリンク設定ページで設定します)。

タグを追加することで、パーマ構造で使用できます。WordPressはそれを知っています

  • 何を期待します
  • URLの解釈方法(一致することを確認)
  • 値の解釈方法(つまり、「UK」)

(参照として、私が書いたこの記事を参照してください: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変数を取得する方法は?


これをありがとう。あなたの答えから私が理解していることの1つは、add_rewrite_tag()プレースホルダーを使用するために使用できるということSettings->Permalinksです。分類法の使用について、それは使用するための要件add_rewrite_tag()ですか?Codexページからの私の印象はそうではないということですが、一般的に使用されているようです。コーデックスのページで提案されadd_rewrite_tag()add_rewrite_rule()いるように使用することに関して質問を拡大しました。
セロン

分類法についてはあなたは絶対に正しい(私の悪い例です)。のこの部分を参照してくださいregister_taxonomy()。より良い例は、次のようなものを使用したい場合です%country%が、国が一般的なクエリ変数であり、分類法ではない場合です。これらのケースはまれです-私は使用する必要がありませんでしたadd_rewrite_tag()
スティーブンハリス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.