La differenza fondamentale è:
- Il
add_rewrite_rule()
aggiunge una particolare regola che viene interpretato
- Il
add_rewrite_tag()
aggiunge un segnaposto da utilizzare in strutture url. Questo segnaposto viene quindi utilizzato per generare più regole.
Ad esempio, supponiamo che tu sia un agente di viaggio che pubblicizza hotel in vari paesi. Potresti voler url di un hotel per essere come
www.example.com/hotels/UK/Balmoral
Dove il paese (Regno Unito in questo esempio) è un termine tassonomico personalizzato e Balmoral è un hotel (tipo di posta). Potremmo aggiungere regole di riscrittura per questo, ma quindi dovremmo generare una regola per:
- l'hotel stesso
- gli allegati dell'hotel
- Una regola per gli hotel (post) in cui si estende su più pagine ecc.
Generare queste regole può diventare complicato. Inoltre, probabilmente competeremo con le regole di WordPress per quel tipo di post - generate dalla permastruttura che impostiamo quando registriamo il tipo di post. (In ogni caso, lascia che WordPress faccia il lavoro).
Questa "permastruttura" - simile a ciò che hai impostato per i post nelle impostazioni del permalink - determina le regole di riscrittura generate da WordPress. Ma dal momento che vogliamo una struttura che contenga alcuni sconosciuti (il paese) - che vogliamo interpretare - dobbiamo fornire un segnaposto del modulo %country%
. (È quasi identico a %category%
per i post).
Per esempio:
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);
}
Nota: WordPress non sa come generare l'URL dal %country%
tag - devi dirlo. (Lo tratterò in un articolo che ho collegato di seguito).
Infine WordPress memorizzerà anche il valore corrispondente in modo da poterlo recuperare tramite get_query_var()
(cosa che non si ha con una regola di riscrittura standard).
Puoi anche creare tag da utilizzare nella permastruttura dei post (impostalo nella pagina delle impostazioni di Permalink).
Aggiungendo un tag, possiamo usarlo nelle permastrutture. WordPress quindi lo sa
- Cosa aspettarsi
- Come interpretare l'URL (verificare che corrisponda)
- Come interpretare il valore (ad es. "UK")
(Come riferimento vedi questo articolo che ho scritto: http://wp.tutsplus.com/tutorials/creative-coding/the-rewrite-api-the-basics/ ).
modificare
Come notato nei commenti, l'esempio sopra è scarso come register_taxonomy()
in effetti chiama add_rewrite_tag()
.
Per quanto riguarda la documentazione del Codex sull'uso 'in combinazione': questo è forse fuorviante in quanto entrambi possono essere utilizzati in modo indipendente. Come notato sopra, tuttavia, add_rewrite_tag()
aggiunge il nome del tag alle "variabili di query" di WordPress. In pratica, ciò consente di recuperare il valore con get_query_var()
. Pertanto, quando add_rewrite_rule()
viene utilizzato con add_rewrite_tag()
, la variabile verrà memorizzata da WordPress. Ma ci sono altri modi per farlo (vedi questa risposta - nota anche il commento di Rob Vermeer).
Correlati anche: come recuperare variabili $ _GET da URL riscritti?
add_rewrite_tag()
può essere usata per creare segnapostoSettings->Permalinks
. Informazioni sull'uso di una tassonomia, è un requisito per l'utilizzoadd_rewrite_tag()
? La mia impressione dalla pagina del Codex è che non lo è, ma sembra comunemente usata. Ho ampliato la mia domanda in merito all'usoadd_rewrite_tag()
insieme aadd_rewrite_rule()
come suggerito nella pagina del Codex .