Comment créer des routes URL personnalisées?
2 réponses
- votes
-
- 2011-08-19
Ajoutez ceci àfunctions.php de votrethème,ou mettez-le dans unplugin .
add_action ('init','wpse26388_rewrites_init'); function wpse26388_rewrites_init () { add_rewrite_rule ( 'propriétés/([0-9] +)/? $', 'index.php?nom depage=propriétés & amp;id_propriété=$ correspond à [1]', 'Haut' ); } add_filter ('query_vars','wpse26388_query_vars'); function wpse26388_query_vars ($ query_vars) { $ query_vars []='id_propriété'; return $ query_vars; }
Ceci ajoute une règle de réécriture qui dirige les requêtes vers
/properties/
avecn'importe quelle combinaison denombres suivant lenom depageproperties
,avec la requête varproperty_id
ensemble. Assurez-vous simplement de visiter votrepage deparamètres depermalienset de sauvegarderpour vider les règles de réécriture,cettenouvelle règle sera doncincluse.Dans votremodèle
page-properties.php
,get_query_var ('property_id')
renverra l'ID depropriété s'il a été défini,si cen'estpas le cas,alors afficher lespropriétéspar défautpage.Add this to your theme's functions.php, or put it in a plugin.
add_action( 'init', 'wpse26388_rewrites_init' ); function wpse26388_rewrites_init(){ add_rewrite_rule( 'properties/([0-9]+)/?$', 'index.php?pagename=properties&property_id=$matches[1]', 'top' ); } add_filter( 'query_vars', 'wpse26388_query_vars' ); function wpse26388_query_vars( $query_vars ){ $query_vars[] = 'property_id'; return $query_vars; }
This adds a rewrite rule which directs requests to
/properties/
with any combination of numbers following to pagenameproperties
, with the query varproperty_id
set. Just be sure to visit your permalinks settings page and save to flush rewrite rules, so this new rule will be included.In your
page-properties.php
template,get_query_var('property_id')
will return the property id if it was set, if it's not then show the default properties page.-
C'était PROCHE detravaillerpourmoimaisj'avaisbesoin d'ajouter: add_filter ('init','flushRules'); functionflushRules () { global $ wp_rewrite; $ wp_rewrite->flush_rules (); }This was CLOSE to working for me but I needed to add: add_filter('init','flushRules'); function flushRules(){ global $wp_rewrite; $wp_rewrite->flush_rules(); }
- 5
- 2012-11-13
- tooshel
-
@tooshel vousne voulez certainementpas vider les règles à chaque demande,c'est une opération coûteuseet ralentira votre site à uneexploration.vousn'avezbesoin de vider les règles qu'une seulefois,lors de l'activation duplugin,ou simplementen visitant lapage desparamètres despermaliens.@tooshel you definitely don't want to flush rules on every request, it is an expensive operation and will slow your site to a crawl. you only need to flush rules once, on plugin activation, or just by visiting the permalinks settings page.
- 23
- 2012-11-13
- Milo
-
Ouais,je comprends ça...mais quand voustestez,c'estbien que ce soit là-dedans!Yeah, I get that . . . but when you are testing it's nice that it's in there!
- 1
- 2012-11-14
- tooshel
-
Uneexpression régulière d'url de réécritureplusintelligentepourrait être `` `` ^properties/([0-9] +)/? `` ``.Sinon,cela correspondrait à quelque chose comme `` ``exemple/propriétés/1```A smarter rewrite url regexp might be ```^properties/([0-9]+)/?```. Otherwise it would match something like ```example/properties/1```
- 3
- 2014-12-12
- Ryan Taylor
-
@RyanTayloren êtes-vous sûr?ilne capturepas «exemple/propriétés/1» lorsqueje leteste.@RyanTaylor are you sure about that? it doesn't capture `example/properties/1` when I test it.
- 0
- 2014-12-12
- Milo
-
Quelest l'emplacement dufichierpage-properties.php?Je l'aimis dans le répertoire duplugin.Est-ce correct?What is location of page-properties.php file? I put it inside plugin directory. Is that right?
- 0
- 2016-06-30
- Farid Movsumov
-
Lesfichiers dethème @FeridMovsumov sonttoujours chargés àpartir du répertoire dethème actif actuel,sauf si vous [ajoutez unfiltre] (https://developer.wordpress.org/themes/basics/template-hierarchy/#filter-hierarchy)pour les charger depuis ailleurs.@FeridMovsumov theme files are always loaded from the current active theme directory, unless you [add a filter](https://developer.wordpress.org/themes/basics/template-hierarchy/#filter-hierarchy) to load them from elsewhere.
- 0
- 2016-06-30
- Milo
-
Bonjour @Milo,c'est unbeaumorceau de code.Savez-vous comment éviter que celane se heurte lorsque vous utilisez $paged=(get_query_var ('paged'))?get_query_var ('paginé'): 1;?Lafonction capture $page (et la laisse vide)et jene peuxpas continuer àpaginer.Hello @Milo, this is a beautiful piece of code. Do you know how to make this not clash when using $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; ? The function is capturing $page (and leaving it blank) and I'm not able to continue paginating.
- 0
- 2017-08-08
- Jaypee
-
- 2017-05-21
Une autrefaçon deprocéder:
add_action('init', function() { add_rewrite_rule( '^properties/([0-9]+)/?', 'index.php?pagename=properties&property_id=$matches[1]', 'top' ); }, 10, 0); add_action('init', function() { add_rewrite_tag( '%property_id%', '([^&]+)' ); }, 10, 0);
Another way to do it:
add_action('init', function() { add_rewrite_rule( '^properties/([0-9]+)/?', 'index.php?pagename=properties&property_id=$matches[1]', 'top' ); }, 10, 0); add_action('init', function() { add_rewrite_tag( '%property_id%', '([^&]+)' ); }, 10, 0);
-
La réponse acceptéefonctionne avec 4.7 (et 4.8),je ne saispaspourquoi vouspensez que cen'estpas le cas.Votre codefaitessentiellement lamême chose,`add_rewrite_tag` ajoute la requête var aumêmetableau que lefiltre` query_vars`.The accepted answer works with 4.7 (and 4.8), not sure why you think it doesn't. Your code is essentially doing the same thing, `add_rewrite_tag` adds the query var to the same array as the `query_vars` filter.
- 2
- 2017-07-07
- Milo
-
@Milo çan'aprobablementpasfonctionnépourmoi,maisje n'aiplus de 4.7 sous lamain doncje nepeuxpas vérifier.Jemodifieraima réponse.@Milo it probably didn’t work for me, but I don’t have a 4.7 handy anymore so I can’t check. I will edit my answer.
- 0
- 2017-07-08
- Christian Lescuyer
-
@Milo Bien queje préfèrepersonnellement réécrire labalise,maisj'ai quandmêmetesté la réponse acceptéeet celafonctionne.Juste quelquesgoûtspersonnels,cependant.@Milo Although I personally prefer rewrite tag, but still tested the accepted answer and it works. Just some personal tastes, though.
- 0
- 2017-07-08
- Jack Johansson
-
Lesbalises de réécriture @JackJohansson sontnécessaires lorsque vous l'utilisez [dans uneinfrastructure] (https://codex.wordpress.org/Function_Reference/add_permastruct).C'estjuste unpeuplus de données que WordPressn'utilisejamais dans ce cas.@JackJohansson rewrite tags are necessary when you're using it [in a permastruct](https://codex.wordpress.org/Function_Reference/add_permastruct). It's just an extra bit of data that WordPress never uses in this case.
- 1
- 2017-07-08
- Milo
-
les deux règlespeuvent être ajoutées à lamêmeméthode,aboutissant à unefonctionpluspropreet plus utilepour reveniret déterminer si destravaux demaintenance sonteffectuésboth rules can be added to the same method, ending up in a cleaner and more useful function to come back to and figure out if doing maintenance work
- 0
- 2018-07-14
- eballeste
J'ai uneexigencetrèsparticulière,j'espère queje peux l'expliquer sans êtretrop déroutante.J'ai créé unmodèle depage oùje liste certainespropriétés quej'obtiens àpartir d'unfichier XMLexterne,jusqu'àprésent aucunproblème,disons que l'URLest comme ceci:
Chaquepropriété a un lien qui doit rediriger l'utilisateur vers unepage "Propriété unique" qui afficheplus d'informations à son sujet.Jeme demandais s'il y avait unmoyen de créer le lien comme ceci:
Où
123
serait l'identifiant de lapropriété.Donc sij'ai l'URL commeproperties/some_id
je veuxpouvoir charger unfichier de vue (comme lesingle.php
oupage.php
fichiers)mais spécifique à cette condition d'URL.Est-cepossible?