J'ai une structure de site assez compliquée et n'arrive pas à faire en sorte que la structure d'URL fonctionne correctement, y compris la pagination. Il s’agit principalement de charger des articles assignés à un type de publication personnalisé spécifique, qui peuvent tous être imbriqués.
Mes types de postes de registre (découpés):
register_post_type('continent',
array(
'rewrite' => array('slug' => 'moving-to'),
)
);
register_post_type('country',
array(
'rewrite' => array('slug' => 'moving-to/%continent%'),
)
);
J'ai donc une catégorie moving-to
, un type de message personnalisé continent
et un type de message personnalisé country
.
/moving-to/
/moving-to/continent
/moving-to/continent/country
Ces trois premières affichent les postes de la catégorie, les postes attribués au continent et les postes attribués au pays. Je ne parviens pas à utiliser la pagination car je pense que le /continent/country
interfère avec la pagination /page/n
.
/moving-to/page/2
- Fonctionne bien
/moving-to/continent/page/2
- Essaie de charger la "page" d'un pays inconnu
/moving-to/continent/country/page/2
- Enlève la page/2 de l'URL
Je suppose que je dois exclure tout pays de "page" de la réécriture, ou tout simplement ne pas avoir de continent imbriqué dans l'URL.
La deuxième partie consiste à avoir une catégorie après chaque continent ou pays
/moving-to/continent/category-name
/moving-to/continent/country/category-name
À nouveau avec la pagination
/moving-to/continent/category-name/page/2
/moving-to/continent/country/category-name/page/2
/moving-to/continent/country
Je réalise que tout cela semble un peu spécifique (limite hors sujet). Je demande fondamentalement comment activer les structures d'URL suivantes:
/moving-to/
/moving-to/continent/
/moving-to/continent/country
/moving-to/page/2
/moving-to/continent/page/2
/moving-to/continent/country/page/2
/moving-to/continent/category
/moving-to/continent/country/category
/moving-to/continent/category/page/2
/moving-to/continent/country/category/page/2
Le principal problème de la façon dont Wordpress utilise les expressions rationnelles pour l'analyse/le routage/la "réécriture" des URL est l'absence de contexte dans regexp. Toutes les URL des pays dont vous aurez besoin doivent être dans le contexte spécifique d'un continent. S'il existe deux pays portant le même nom best country
, l'un sur continent big
et l'autre sur continent small
, vous souhaiterez une URL telle que /big/best-country
et /small/best-country
.
Wordpress a besoin de/essaie de comprendre quelle page charger directement en fonction de l'URL sans accès supplémentaire à la base de données, en localisant son slug dans l'URL, mais il ne peut pas le faire dans cette structure. Il peut trouver la limace du continent, mais la limace du pays est problématique car il y a deux résultats possibles. En fait, Wordpress ne vous laissera jamais entrer dans une telle situation à moins que vous ne le forciez, et ajoutera un suffixe -nnn
lorsqu’un second message est créé avec un slug déjà existant.
Le seul moyen de contourner ce problème consiste à implémenter votre propre analyse avant que Wordpress ne s'en mêle.
Mais… peut-être que vous complexifiez votre vie sans raison du tout, car heureusement sur Terre, il n’existe pas deux pays portant le même nom; vous pouvez donc utiliser des slugs comme continent-country
et utiliser .htaccess. règle pour convertir continent/country
en continent-country
. Pour que cela fonctionne correctement, vous devrez également vous préoccuper de la façon dont les permaliens sont calculés, mais le problème est beaucoup plus facile à résoudre.