J'essaie de add_rewrite_rule
travailler pour extraire un paramètre de l'URL et le transmettre à la demande. Vu un certain nombre de messages à ce sujet, mais ne semble pas le faire fonctionner.
Si une URL commence par une certaine chaîne, je voudrais la supprimer de l'URL et la passer en tant que paramètres de requête.
Exemple d'URL de demande:
http://domain.com/foo/my_page
Cela se transformerait en
http://domain.com/my_page?param=foo
Si 'foo' n'est pas présent, il devrait simplement être traité comme une demande normale. Cette logique devrait s'appliquer à toute URL de page ou URL de type de message personnalisé sur mon site (essentiellement foo / *). Penser que cela agirait comme un passage, si l'url a `` foo '', supprimez-le, puis passez simplement à Wordpress pour qu'il soit normal.
J'ai déjà 'param' en tant que query_vars autorisé.
Au total, il faudrait travailler pour les éléments suivants:
- / foo / ma_page (Page)
- / foo / my_folder / my_page (sous-page)
- / foo / example_type (Archive de publication personnalisée)
- / foo / example_type / example_post (Single Post personnalisé)
la source
page
type de publication ou n'importe quelle page? qu'en est-il des pages parent / enfant dans la hiérarchie?Réponses:
Une règle de base qui fonctionnerait pour votre exemple:
Cela prend tout ce qui vient après
foo/
et définit cela commepagename
pour la requête, puisparam
obtient la valeur statiquefoo
. Si vous avez besoin de différents modèles d'URL, vous aurez besoin de règles supplémentaires pour chaque modèle unique. Reportez-vous à laWP_Query
documentation pour les différentes variables de requête qui peuvent être définies dans les règles de réécriture. N'oubliez pas de vider les règles de réécriture après en avoir ajouté de nouvelles. Cela peut être fait en visitant la page Paramètres de Permaliens.Maintenant, visitez votre exemple d'URL:
chargera la bonne page, mais cela ne se comportera pas exactement comme la visite:
car lors de l'utilisation de réécritures internes, il
param
est défini dans l'$wp_query
objet de requête, pas dans le$_GET
superglobal. Si vous devez travailler avec du code qui recherche une valeur$_GET
, vous aurez besoin d'une étape supplémentaire pour définir cette valeur:Une autre méthode à considérer consiste à utiliser des points de terminaison, ce
/foo/
serait donc à la fin des URL plutôt que comme préfixe. L'avantage est que les APIadd_rewrite_endpoint
simplifient l'ajout de toutes les règles dont vous avez besoin, y compris l'activation de la pagination.la source
Ok, j'ai des exemples de travail pour les 3 types de demandes. Il a fallu une tonne d'expérimentation et de déconner pour les faire travailler. Je suppose que Milo est bon pour pousser les gens à répondre à leurs propres questions.
Après d'innombrables modifications et rafraîchissement des permaliens, j'ai réalisé qu'il était beaucoup plus facile de comprendre les URL en dehors de add_rewrite_url et une fois qu'elles ont travaillé, définissez la réécriture. Exemple d'être
index.php?param=foo&post_type=example_type
.Une autre chose évidente, mais l'ajouter ici pour que cela puisse aider quelqu'un d'autre. Vous devez définir les règles de type de publication personnalisées add_rewrite_rule AVANT de définir vos règles génériques de page / sous-page. J'ai perdu pas mal de temps avec celui-là et je pense que c'est la principale chose qui m'a fait ne pas comprendre pourquoi les règles ne fonctionnaient pas.
Voici les 3 règles qui fonctionnent à travers tous mes besoins. La règle Page / Sous-page a été combinée en une seule.
De plus, j'ai créé une boucle pour ajouter plusieurs règles de type de publication personnalisées. N'oubliez pas que vous devez définir les règles de type de publication personnalisées add_rewrite_rule AVANT de définir vos règles génériques de page / sous-page.
L' analyseur de réécriture que Milo a transmis a été très utile pour mieux comprendre comment Wordpress interroge les pages / publications.
la source