Taxonomies multiples dans l'URL
Comment ajouter plusieurs taxonomies à l'URL présentant les éléments suivants:
- Type de message: produits
- Taxonomie: product_type
- Taxonomie: product_brand
Ajout d'un nouveau produit et sélection du type et de la marque pour ce produit:
Lors de l'ajout d'un nouveau produit , il existe deux cases de taxonomie (product_type et product_brand). Appelons ce nouveau post test produit 1 . La première chose que nous voulons faire est de cocher le type de produit avec lequel je traite, disons les téléphones portables . Ensuite, je veux cocher la marque à laquelle le produit appartient, disons samsung.
Désormais, " Test Product 1 " est associé au type "cell-phones" et à la marque "samsung" .
Le résultat final souhaité est:
/ produits
»Voir tous les articles personnalisés/ produits / téléphones portables
»Voir tous les articles personnalisés avec la taxonomie des téléphones portables/ produit / téléphones portables / samsung /
»Voir tous les articles personnalisés où la taxonomie est téléphones portables ET samsung/ produits / téléphones portables / samsung / test-product-1
»Voir le produit (poste personnalisé unique)
La question
Comment rendre cela possible? Ma pensée initiale utilisait une taxonomie, ayant "téléphones portables" comme terme parent de "samsung" . En fait, l'ajout de la taxonomie et de ses termes n'était pas si difficile. Mais cela a conduit à beaucoup d'autres problèmes, certains bien connus, d'autres moins. Quoi qu'il en soit, cela ne fonctionne pas comme ça car cela donne 404 problèmes et WP ne permettra pas certaines choses.
WP.org »taxonomie-archive-modèle
Cela m'a conduit à avoir repensé la structure, à devoir quitter les taxonomies et ses termes et j'ai pensé; pourquoi ne pas créer une 2ème taxonomie, et y associer le type de poste et l'ajouter à l'url?
Bonne question en effet, mais comment?
Réponses:
Ceci est certainement possible en utilisant certaines de vos règles de réécriture dans une certaine mesure. L' API WP_Rewrite expose des fonctions qui vous permettent d'ajouter des règles de réécriture (ou «cartes») pour convertir une demande en requête.
Il existe des conditions préalables à l'écriture de bonnes règles de réécriture, et la plus importante est la compréhension de base des expressions régulières. Le moteur de réécriture WordPress utilise des expressions régulières pour traduire des parties d'une URL en requêtes pour obtenir des publications.
Ceci est un court et bon tutoriel sur PHP PCRE (expressions régulières compatibles Perl).
Donc, vous avez ajouté deux taxonomies, supposons que leurs noms sont:
Nous pouvons les utiliser dans des requêtes comme ceci:
La requête serait
?product_type=cell-phones&product_brand=samsung
. Si vous saisissez cela comme votre requête, vous obtiendrez une liste de téléphones Samsung. Pour réécrire/cell-phones/samsung
dans cette requête, une règle de réécriture doit être ajoutée.add_rewrite_rule()
fera cela pour vous. Voici un exemple de ce à quoi pourrait ressembler votre règle de réécriture dans le cas ci-dessus:Vous devrez le faire
flush_rewrite_rules()
dès que vous aurez ajouté la règle de réécriture pour l'enregistrer dans la base de données. Cela n'est fait qu'une seule fois, il n'est pas nécessaire de le faire à chaque demande, une fois qu'une règle est supprimée. Pour le supprimer, rincez simplement sans la règle de réécriture ajoutée.Si vous souhaitez ajouter une pagination, vous pouvez le faire en faisant quelque chose comme:
la source
Le résultat final
Voici ce que j'ai trouvé en utilisant partiellement des morceaux de toutes les réponses que j'ai:
Quelques idées:
Cela fonctionne. Bien que vous soyez «obligé» d'attribuer les deux taxonomies à chaque publication, l'URL aura une fin
'/'
»'/products/taxonomy//postname'
. Puisque je vais affecter les deux taxonomies à tous mes procuts, ayant un type et une marque, ce code semble fonctionner pour mes besoins. Si quelqu'un a des suggestions ou des améliorations, n'hésitez pas à répondre!la source
flush_rewrite_rules()
surinit
? ne le fais pas. Fondamentalement, vous réinitialisez vos règles de réécriture à chaque chargement de page.Vérifiez de cette façon, il y a encore quelques bugs avec les archives de marque
http://pastebin.com/t8SxbDJy
}
la source
Bien que ce ne soit pas la structure d'URL souhaitée, vous pouvez obtenir:
sans avoir à spécifier de règles de réécriture personnalisées.
Cela nécessite cependant que vous enregistriez vos taxonomies et types de publication personnalisés dans un ordre particulier. L'astuce consiste à enregistrer toute taxonomie où le slug commence par le slug de votre type de publication avant d'enregistrer ce type de publication personnalisé. Par exemple, supposons les limaces suivantes:
Ensuite, vous pouvez les enregistrer dans cet ordre:
Si vous devez absolument avoir une URL comme:
Ensuite, vous auriez besoin d'une règle de réécriture quelque chose comme ceci:
MISE À JOUR /programming/3861291/multiple-custom-permalink-structures-in-wordpress
Voici comment vous redéfinissez correctement l'URL de publication unique.
Définissez la réécriture sur false pour le type de publication personnalisé. (Laissez l'archive telle quelle), puis après avoir enregistré les taxonomies et les publications, enregistrez également les règles de réécriture suivantes.
Ensuite, filtrez post_type_link pour créer la structure d'URL souhaitée - en tenant compte des valeurs de taxonomie non définies. En modifiant le code de la publication liée, vous auriez:
Maintenant, je dois juste comprendre comment réécrire l'URL de taxonomie de la marque sans la balise de marque principale, et je dois correspondre exactement à l'URL souhaitée.
la source