web-dev-qa-db-fra.com

comment obtenir des URL d'archives avec la même origine pour des types et des termes personnalisés?

C'est peut-être une question étrange et peut-être pas de réponses, mais je vais essayer.

  • type de poste personnalisé: produit
  • taxonomie personnalisée 1: catégorie_produit
  • terme personnalisé: type1
  • taxonomie personnalisée 2: product_feature
  • terme personnalisé: feature1

Ce que je voudrais:

  • www.mondomaine.com/produits> page d'archive des produits
  • www.mondomaine.com/produits/type1> page d'archive des termes
  • www.mydomain.com/products/feature1> page d'archive des termes
  • www.mydomain.com/products/type1/feature1> page d'archive des termes

Les principaux problèmes ici, je suppose, sont 2:

  1. Je contourne la partie du chemin de taxonomie ('add_rewrite_rule')
  2. Les archives de produits et les archives de termes partagent la même base ('produits')

C'est possible? Je pense à plusieurs choses (reste api, add_rewrite_rule/tag, etc.) mais je ne sais pas si ce sont des moyens bons/viables ..

2
Luca Reghellin

Donc, une première solution peut utiliser add_rewrite_rules(). Une première logique brute devrait être quelque chose comme:

1- Obtenez les slugs à terme dont vous avez besoin, sauvegardez dans une var, disons $terms_string; $ terms_string devrait être une liste de slugs séparés par des tubes, convenant à l'expression rationnelle, comme 'type1 | type2' etc. contenant uniquement des valeurs valides (autorisées). Prononcez get_terms () pour récupérer toutes les limaces.

2- ajoutez une règle de réécriture personnalisée, semblable à ceci:

function add_rewrite_rules() {
  add_rewrite_rule(
    '^products/(' . $terms_string . ')/?$', //matches things like /products/type1
    'index.php?product_category=$matches[1]', //the real query that will be executed upon matching requests
    'top'
  );
}

add_action( 'init', 'add_rewrite_rules');

Ça marche. Il montrera correctement une archive de taxonomie. Dans le monde réel, la construction d'un ensemble de règles cohérent impliquera en réalité beaucoup plus, mais c'est la voie. Trop de code à coller ici, mais je viens de créer un ensemble complexe de règles ressemblant à une API, incluant également la gestion de la langue avec polylang. Donc, si quelqu'un a les mêmes tâches, réécrivez les règles.

1
Luca Reghellin