Quand doit-on utiliser add_rewrite_tag ()?

21

J'ai passé quelques jours à essayer d'apprendre le meilleur moyen d'ajouter des règles de réécriture. Si j'ai bien compris, un moyen approprié d'ajouter des règles simples consiste à utiliser add_rewrite_rules() , avec un grand grâce à Jan Fabry sur cet échange, qui les élaborations ont été d'une grande utilité.

Bien qu'il mentionne add_rewrite_tags() , je n'ai pas vu de guide expliquant quand il est avantageux de l'utiliser, contrairement à d'autres moyens d'ajouter des règles de réécriture ou à de bons exemples d'utilisation. Cela semble être un outil plus puissant, mais c'est à peu près tout ce que je peux comprendre. Je trouve que les exemples figurant dans le Codex sont trop cryptiques ou incomplet . Quelqu'un pourrait-il élaborer ou indiquer une ressource? Je n'ai rien trouvé d'utile sur Google.

modifier: Sa page du Codex parle de son utilisation "générale" avec add_rewrite_rules() , mais ne précise pas. De la même manière, la page du codex pour add_rewrite_rules() fait référence à add_rewrite_tags() mais elle est également très clairs en informations. Quand et comment une telle combinaison serait-elle utilisée? Le seul exemple que j’ai trouvé est cette réponse de Rob Vermeer que je ne comprends pas.

    
posée seron 02.11.2012 - 14:44

1 réponse

19

La différence fondamentale est la suivante:

  • Le add_rewrite_rule() ajoute une règle particulière interprétée
  • Le add_rewrite_tag() ajoute un espace réservé à utiliser dans les structures d'URL. Cet espace réservé est ensuite utilisé pour générer plusieurs règles.

Par exemple, supposons que vous soyez un agent de voyages qui annonce des hôtels dans différents pays. Vous voudrez peut-être que l'URL d'un hôtel ressemble à

  www.example.com/hotels/UK/Balmoral

Où le pays (Royaume-Uni dans cet exemple) est un terme de taxomonie personnalisé et Balmoral est un hôtel (type de message). Nous pourrions ajouter des règles de réécriture pour cela, mais nous devrions alors générer une règle pour:

  • l'hôtel lui-même
  • les pièces jointes de l'hôtel
  • Une règle pour les hôtels (posts) où elle déborde sur plusieurs pages, etc.

La génération de ces règles peut devenir compliquée. De plus, nous allons probablement rivaliser avec les propres règles de WordPress pour ce type de message, générées à partir de la permastructure définie lors de l’enregistrement du type de message. (Dans tous les cas, laissez WordPress faire le travail).

Cette "permastructure" - similaire à celle que vous définissez pour les publications dans les paramètres de permalien - détermine les règles de réécriture générées par WordPress. Mais comme nous voulons une structure contenant inconnu (le pays) - que nous voulons interpréter - nous devons fournir un espace réservé de la forme %country% . (C'est presque identique à %category% pour les posts).

Par exemple:

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);  
}

Remarque: WordPress ne sait pas comment générer l'URL à partir de la balise %country% . Vous devez le lui dire. (Je couvre cela dans un article que j'ai lié ci-dessous).

Enfin, WordPress stockera également la valeur correspondante afin que vous puissiez la récupérer via get_query_var() avec une règle de réécriture standard).

Vous pouvez également créer des tags à utiliser dans la permastructure des publications (définissez-le dans la page des paramètres de Permalink).

En ajoutant une balise, nous pouvons l’utiliser dans les permastructures. WordPress sait alors

  • À quoi s'attendre
  • Comment interpréter l'URL (cochez-la)
  • Comment interpréter la valeur (c'est-à-dire 'UK')

(Comme référence, voir cet article, j’ai écrit: enlace ).

Modifier

Comme indiqué dans les commentaires, l'exemple ci-dessus est médiocre car register_taxonomy() appelle en fait add_rewrite_tag() .

En ce qui concerne la documentation du Codex concernant leur utilisation "en combinaison": c'est peut-être trompeur, car ils peuvent tous deux être utilisés indépendamment. Comme indiqué ci-dessus, toutefois, add_rewrite_tag() ajoute le nom de la balise aux "variables de requête" de WordPress. En pratique, cela vous permet de récupérer la valeur avec get_query_var() . Ainsi, lorsque add_rewrite_rule() est utilisé avec add_rewrite_tag() , la variable sera stockée par WordPress. Mais il existe d'autres moyens de le faire (voir cette réponse - notez également le commentaire de Rob Vermeer).

Voir aussi: Comment récupérer $ _GET variables d'URL réécrites?

    
réponse donnée Stephen Harris 02.11.2012 - 16:01

Lire d'autres questions sur les étiquettes