基本的な違いは次のとおりです。
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変数を取得する方法は?
add_rewrite_tag()
プレースホルダーを使用するために使用できるということSettings->Permalinks
です。分類法の使用について、それは使用するための要件add_rewrite_tag()
ですか?Codexページからの私の印象はそうではないということですが、一般的に使用されているようです。コーデックスのページで提案されadd_rewrite_tag()
てadd_rewrite_rule()
いるように使用することに関して質問を拡大しました。