Ok, j'ai lu à peu près toutes les réponses à cette question, mais ma situation doit être unique.
Ce que je tente de faire est simple en théorie.
Lorsque j'enregistre le CPT, j'ai défini ce qui suit:
'rewrite' => array(
'slug' => 'resources/%resource_type%',
'with_front' => false
),
'with_front' => false
car la publication standard utilise une base.
J'ai aussi une page de example.com/resources
avec un modèle de page-resources.php
.
Lors de l'enregistrement de Tax1, j'ai défini les éléments suivants:
'rewrite' => array(
'slug' => 'resources',
'with_front' => false
)
J'ai un terme resource_type
nommé white-papers
.
Cela produit mon premier résultat souhaité d'un lien permanent qui ressemble à example.com/resources/white-papers/
pour une page d'archive de taxonomie utilisant taxonomy-resource_type.php
.
C'est là que les choses se compliquent. Ce que je tente de faire est d’ajouter une deuxième taxonomie (Tax2) et de créer une autre page d’archive avec un permalien de:
example.com/resources/white-papers/enterprise
Cette archive est une archive filtrée de toutes sortes dans la mesure où elle ne doit afficher que les publications de resource_type = white-papers
AND industry = enterprise
.
Au lieu de cela, je reçois 404
.
Mais si j'essaye une URL avec une requête de example.com/index.php?post_type=resource&resource_type=white-papers&industry=enterprise
, j'obtiens ma page d'archive filtrée souhaitée.
Aussi, et je ne suis pas sûr que cela soit pertinent ou non, mais cette fonction est en cours d'exécution:
function resources_cpt_generating_rule($wp_rewrite) {
$rules = array();
$terms = get_terms( array(
'taxonomy' => 'resource_type',
'hide_empty' => false,
) );
$post_type = 'resource';
foreach ($terms as $term) {
$rules['resources/' . $term->slug . '/([^/]*)$'] = 'index.php?post_type=' . $post_type. '&resource_type=$matches[1]&name=$matches[1]';
}
// merge with global rules
$wp_rewrite->rules = $rules + $wp_rewrite->rules;
}
add_filter('generate_rewrite_rules', 'resources_cpt_generating_rule');
Ce dont j'ai besoin d'aide, ce sont les règles de réécriture pour y parvenir.
Toute aide est grandement appréciée à l'avance!
ok, alors j'ai pensé revenir et répondre à ma propre question au cas où cela serait utile à quelqu'un d'autre.
Pour commencer, le CPT:
'query_var' => true,
'has_archive' => false,
'rewrite' => array(
'slug' => 'resources',
'with_front' => false
),
Tax1:
'query_vars' => true,
'rewrite' => array(
'slug' => 'resources/type',
'with_front' => false
)
Tax2:
'query_vars' => true,
'rewrite' => array(
'with_front' => false
)
Les réécritures:
add_rewrite_rule( '^resources/type/([^/]*)/industry/([^/]*)/?$', 'index.php?post_type=resources&resource_type=$matches[1]&industry=$matches[2]', 'top' );
Cela produit une structure d'URL légèrement différente de celle que j'avais initialement prévue, et bien que ce soit un peu plus détaillé, je pense que cela fonctionne aussi bien.
example.com/resources
= page-resources.php
example.com/resources/type/white-papers
= taxonomy-resource_type.php
pour le terme Tax1 white-papers
.
example.com/resources/type/white-papers/industry/enterprise
= le même modèle d'archive taxonomy-resource_type.php
, mais ne fournit que les résultats CPT de Tax1 AND Tax2.
C’est exactement la fonctionnalité que j’espérais obtenir.