Quando deve essere utilizzato add_rewrite_tag ()?


22

Ho trascorso alcuni giorni cercando di imparare come aggiungere al meglio le regole di riscrittura. Finora la mia comprensione è che un modo adatto per aggiungere regole semplici è quello di utilizzare add_rewrite_rules(), con un grande ringraziamento a Jan Fabry per questo scambio che le elaborazioni sono state di grande utilità.

Anche se menziona add_rewrite_tags()che non ho visto una guida che spieghi quando è utile usarlo, al contrario di altri modi per aggiungere regole di riscrittura o qualsiasi buon esempio sul suo utilizzo. Sembra essere uno strumento più potente, ma è tutto ciò che riesco a capire. Trovo che gli esempi nel Codice siano troppo enigmatici o incompleti . Qualcuno potrebbe approfondirlo o indicare qualche risorsa? Non ho trovato nulla di utile su Google.

modifica: la sua pagina Codex parla di "generalmente" usarlo insieme aadd_rewrite_rules(), ma non elabora. Allo stesso modo la pagina Codex per siadd_rewrite_rules()riferisce aadd_rewrite_tags()ma è anche molto scarsa di informazioni. Quando e come verrebbe utilizzata una tale combinazione? L'unico esempio che ho trovato è questa risposta di Rob Vermeer che non capisco.

Risposte:


21

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?


Grazie per questo. Una cosa che capisco dalla tua risposta è che add_rewrite_tag()può essere usata per creare segnaposto Settings->Permalinks. Informazioni sull'uso di una tassonomia, è un requisito per l'utilizzo add_rewrite_tag()? La mia impressione dalla pagina del Codex è che non lo è, ma sembra comunemente usata. Ho ampliato la mia domanda in merito all'uso add_rewrite_tag()insieme a add_rewrite_rule()come suggerito nella pagina del Codex .
seron

Hai assolutamente ragione sulle tassonomie (un cattivo esempio da parte mia). Vedi questa parte di register_taxonomy(). Un esempio migliore potrebbe essere quando si desidera utilizzare qualcosa di simile %country%ma quando il paese è solo una variabile di query comune e non una tassonomia. Questi casi sono rari - non ho mai dovuto usare add_rewrite_tag().
Stephen Harris,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.