Besoin d'aide avec des URL conviviales dans Wordpress
-
-
@Steven: Est-ce untype depublicationpersonnalisé avec unparamètre de réécriture?(Veuillez ajouter le code `register_post_type` si c'est le cas.) Si vous créez un article deblog régulier,quelleest son adresse?@Steven: Is this a custom post type with a `rewrite` setting? (Please add the `register_post_type` code if it is.) If you create a regular blog post, what is its address?
- 0
- 2010-11-02
- Jan Fabry
-
@Steve - Ah,je vois quetu as demandéici.Génial!@Steve - Ah, I see you did ask over here. Great!
- 0
- 2010-11-02
- MikeSchinkel
-
Cen'estpas untype depublicationpersonnalisé.C'estjuste unmodèle qui récupère les données d'unebase de donnéesen fonction desinformationstransmisespar $ _GET ().This is not a custom post type. It's just a template that retrieves data from a DB based on info passed by $_GET().
- 0
- 2010-11-02
- Steven
-
@Steven: OK,vous voulez donc savoir comment obtenir des URL comme `/designer/designer_A`,`/designer/designer_B`,...géréespar lemêmemodèle,quipeuventensuite accéderfacilement aunom du concepteur àpartir de l'URL?C'est alors une question sur [l'ajout de votrepropre règle de réécriture] (http://wordpress.stackexchange.com/questions/3206/custom-post-type-rewrite-rule-for-author-paging/3218#3218)?@Steven: OK, so you want to know how to get URL's like `/designer/designer_A`, `/designer/designer_B`, ... handled by the same template, that can then access the designer name from the URL easily? This is then a question about [adding your own rewrite rule](http://wordpress.stackexchange.com/questions/3206/custom-post-type-rewrite-rule-for-author-paging/3218#3218)?
- 0
- 2010-11-02
- Jan Fabry
-
C'est correct.Maisje n'utilisepas letype depublicationpersonnalisé.Voir lesinformations ajoutées ci-dessus.That's correct. But I'm not using Custom Post Type. See added info above.
- 0
- 2010-11-02
- Steven
-
@Steven: Mais votre URL `/designer/`,est-cejuste unepage WordPress classique liée à unmodèle quifaitfonctionner le PHPpersonnalisé?(Et si vous ajoutez @Jan à votre réponse,je reçois unenotification.)@Steven: But your `/designer/` URL, is that just a regular WordPress page linked to a template that does the custom PHP work? (And if you add @Jan to your reply, I get a notification.)
- 0
- 2010-11-02
- Jan Fabry
-
@Jan: Ah,donc @ aen fait unefonction.Bon à savoir!:) Oui, `/designer/`est unepageen wordress utilisant unmodèlepersonnalisé.@Jan: Ah, so @ actually has a function. Nice to know! :) Yes, `/designer/` is a page in wordress using a custom template.
- 0
- 2010-11-02
- Steven
-
@Steve - Je vous recommandefortement de reconsidérer lestypes depublicationpersonnalisés.Vousessayez de réinventer la roueet unjeu de roues vraiment réussiexiste déjà dans WordPress.Vous dites que vousne pouvezpas utiliser les CPT;envisagerez-vouspeut-être deposer une autre questionici sur WordPress Answers qui demande comment contourner lebarrage que vouspercevez avec les CPT?Jeparie que vous serez surpris de lafacilité avec laquelle la solution sera.Créez * à lafois * une * "Marque" * CPTet une * "Galerie" * CPTpuis associez-les (il y aplusieursfaçons defaire cela ...)@Steve - I strongly recommend you reconsider Custom Post Types. You are trying to reinvent the wheel and a really got set of wheels already exist in WordPress. You say you can't use CPTs; will you consider maybe asking another question here on WordPress Answers that asks how to get around the roadblock you perceive with CPTs? I'll bet you'll be surprised how easy the solution will be. Create *both* a *"Brand"* CPT and a *"Gallery"* CPT then link them together (there are several ways to do that...)
- 1
- 2010-11-03
- MikeSchinkel
-
2 réponses
- votes
-
- 2010-11-02
Jene saispas (oune savaispas)grand-chosemoi-même sur les règles de réécriture (maisil semble que personnene lefait ),mais sur labase d'autres réponsesici,j'ai réussi àfairefonctionner cela. Nous ajoutons unenouvelle règle de réécriture qui correspond à
designers/designer_name/
. Nous «vidons» les règles de réécriturepour qu'elles soientenregistrées dans labase de données,mais assurez-vous dene lefaire qu'une seulefois,car c'est une opération coûteuse. Maintenant,nous configurons unmodèle qui correspondra ànotrepageet enregistrons lapartie supplémentaire dans la variable de requêtedesigner_name
. Puisque WordPressne saitpas qu'il doit regarder cette variable,nousnous connectons aufiltrequery_vars
et lui disons de regarder cela aussi.Maintenant,dans lefichier dethème
page-designers.php
,nouspouvonsfaireget_query_var('designer_name')
et il vous donnera lenom du concepteur. Si vous voulez des éléments supplémentaires comme lapagination (designer/designer_name/page/2
),vous devez ajouter une règle de réécriture supplémentairepour cela (ou desflux,outout ce qui commencepardesigner/designer_name
). Mais les éléments debase devraientfonctionner.<?php /* Plugin Name: WPA 3537 Plugin URI: http://wordpress.stackexchange.com/questions/3537/need-help-with-friendly-urls-in-wordpress Description: Need help with friendly URL's in Wordpress Version: 1.0 Author: Jan Fabry */ register_activation_hook(__FILE__, 'wpa3537_flush_rules'); function wpa3537_flush_rules() { add_rewrite_rule('designers/([^/]+)', 'index.php?pagename=designers&designer_name=$matches[1]', 'top'); flush_rewrite_rules(false); } add_filter('query_vars', 'wpa3537_query_vars'); function wpa3537_query_vars($query_vars) { $query_vars[] = 'designer_name'; return $query_vars; }
I don't know (or didn't know) much about the rewrite rules myself (but it seems nobody does), but based on some other answers here, I got this to work. We add a new rewrite rule that matches
designers/designer_name/
. We "flush" the rewrite rules so they get saved to the database, but make sure to do this only once, since it is an expensive operation. Now, we set up a pattern that will match our page and save the extra part in thedesigner_name
query variable. Since WordPress does not know it must look at this variable, we hook into thequery_vars
filter and tell it to look at that too.Now, in the
page-designers.php
theme file, we can doget_query_var('designer_name')
and it will give you the designer name. If you want extra stuff like paging (designer/designer_name/page/2
), you need to add an extra rewrite rule for that (or feeds, or whatever that starts withdesigner/designer_name
). But the basic stuff should work.<?php /* Plugin Name: WPA 3537 Plugin URI: http://wordpress.stackexchange.com/questions/3537/need-help-with-friendly-urls-in-wordpress Description: Need help with friendly URL's in Wordpress Version: 1.0 Author: Jan Fabry */ register_activation_hook(__FILE__, 'wpa3537_flush_rules'); function wpa3537_flush_rules() { add_rewrite_rule('designers/([^/]+)', 'index.php?pagename=designers&designer_name=$matches[1]', 'top'); flush_rewrite_rules(false); } add_filter('query_vars', 'wpa3537_query_vars'); function wpa3537_query_vars($query_vars) { $query_vars[] = 'designer_name'; return $query_vars; }
-
Oui,la réécriture d'URL de WordPressest un artnoir.Ilfaut êtreprudent lors de lapratique depeur depasser du côté obscuret de devenirirréversiblementfou.Yes, WordPress' URL rewriting is a black art. One must be careful when practicing lest one cross over to the dark side and be driven irreversibly insane.
- 4
- 2010-11-03
- MikeSchinkel
-
@Mike: Celam'aintrigué (ça doit être l'heure d'Halloween)et j'ai écrit [un analyseur de règles de réécriture] (http://wordpress.stackexchange.com/questions/3606/a-tool-to-analyze-rewrite-rules/3608 # 3608) commetrace demes découvertesen réécriture-land.@Mike: I got intrigued by it (must be the Halloween time), and wrote [a rewrite rule analyzer](http://wordpress.stackexchange.com/questions/3606/a-tool-to-analyze-rewrite-rules/3608#3608) as a trace of my discoveries in rewrite-land.
- 1
- 2010-11-03
- Jan Fabry
-
Pour une réponse complète,consultez cefil: http://wordpress.stackexchange.com/questions/5413/need-help-with-add-rewrite-ruleFor full answer, se this thread: http://wordpress.stackexchange.com/questions/5413/need-help-with-add-rewrite-rule
- 0
- 2010-12-16
- Steven
-
- 2012-03-14
J'aifaittout ce que Jan Fabry a écrit,mais quandj'appelle:
http://www.mysite.com/customPostTypeSlug/page/id
Wordpressme redirige (301) vers:
http://www.mysite.com/customPostTypeSlug/page
Ma règleest (appeléepar une action "init"):
add_rewrite_rule( 'customPostTypeSlug/page/([^/]+)/?' , 'index.php?customPostTypeSlug=page&id=$matches[1]', 'top' );
Ensuite,je le vide.
Je change le lienpermanent de
%category%/%postname%
à%postname%
et semblefonctionner.I did all Jan Fabry wrote, but when I call:
http://www.mysite.com/customPostTypeSlug/page/id
Wordpress redirect (301) me to:
http://www.mysite.com/customPostTypeSlug/page
My rule is (called by an "init" action):
add_rewrite_rule( 'customPostTypeSlug/page/([^/]+)/?' , 'index.php?customPostTypeSlug=page&id=$matches[1]', 'top' );
Then I flush it.
I change permalink from
%category%/%postname%
to%postname%
and seems to work.
Je crée desmodèlespersonnalisés dans Wordpresset jetransmets des données dans les URL.
Actuellement,mon URL ressemble à ceci: http://www.mysite.com/designers/?id=43& ;nom=concepteur +nom
L'URL contient l'IDet lenom du concepteur.
J'aimerais vraiment utiliser ceci: http://www.mysite.com/designers/designer+name/
Ma structure de lienpermanentest définie sur
/%category%/%postname%/
Monfichier .htaccess ressemble à ceci:
J'ai consulté http://codex.wordpress.org/Using_Permalinks ,maisje ne suispas devenutoutplus sage.
J'ai deux questions:
MISE À JOUR
J'ajoute desinformations supplémentairespour clarification.
Mon URLesten cours de création comme ceci:
Url = get_permalink().'?bid='.$brand->id.'&name='.$brand->name;
J'ai utilisé uneméthode similaireici:
http://storelocator.no/search/?brandID=4673 & amp; storeID=0 & amp;brand=Moods + of + Norway
Utiliser letype depublicationpersonnalisé était une option quej'aienvisagée,maisj'avaisbesoin demapropre structure detable car les designers/marques sont liés à desgaleries (etplus de liens vers d'autrestables à venir). Donc,enregistrer les données desmarques dans latable WP POSTn'allaitpasfonctionner.
J'ai doncbesoin de savoir ceci: