web-dev-qa-db-fra.com

add_rewrite_rule - fonctionne bien mais brisé pour la pagination

Ma configuration est la suivante:

  • Taxonomie appelée 'région'
  • Les termes de cette taxonomie ressemblent à 'ecosse'
  • Différents types d'articles utilisant cette taxonomie unique

J'ai obtenu de bons permaliens du format suivant en utilisant la règle de réécriture ci-dessous:

add_rewrite_rule(
    'region/([^/]+)/([^/]+)/([^/]+)/?',
    'index.php?taxonomy=region&term=$matches[1]&post_type=$matches[3]',
    'top'
);

Cela me donne une URL fonctionnelle comme:
http://example.com/region/scotland/type/event/
qui correspond exactement à ce dont j'ai besoin (région/[Écosse] = taxonomie, type/[événement] = type de publication)

Cependant, j'ai essayé d'ajouter un add_rewrite_rule supplémentaire pour gérer la pagination dans le format d'URL suivant (je ne m'entend vraiment pas bien avec regex!) Mais je ne parviens tout simplement pas à faire en sorte que la pagination fonctionne correctement. atteindre les objectifs suivants:

http://example.com/region/scotland/type/event/page/1
http://example.com/region/scotland/type/event/page/2
http://example.com/region/scotland/type/event/page/3

Je pense que je suis presque arrivé car une règle de réécriture fonctionne correctement - mais après avoir essayé beaucoup de choses différentes, je n’ai tout simplement pas été en mesure d’atteindre la combinaison correcte de règles regex/réécriture pour réaliser la pagination. Le permalien pas si joli pour cette requête, qui fonctionne correctement est:

http://example.com/index.php?taxonomy=region&term=scotland&post_type=event&paged=1

5
Jonnyauk

As-tu essayé:

Le principal:

add_rewrite_rule( 'region/([^/]+)/type/([^/]+)/?', 'index.php?taxonomy=region&term=$matches[1]&post_type=$matches[2]', 'top' );

Pour la pagination

add_rewrite_rule( 'region/([^/]+)/type/([^/]+)/page/([0-9]{1,})/?', 'index.php?taxonomy=region&term=$matches[1]&post_type=$matches[2]&paged=$matches[3]', 'top' );

Par curiosité, j'ai remplacé l'un des ([^/]+) par le "type" littéral, car cela ne semble pas être une variable dynamique.

Si la pagination ne fonctionne pas, essayez de changer l’ordre dans lequel elle est déclarée, c’est-à-dire avant ou après vos autres règles de réécriture. Beaucoup de problèmes ont à voir avec l'ordre dans lequel ils sont déclarés, avec quels effets la règle est exécutée en premier.

En outre, le plug-in Rewrite Rules Inspector peut être très utile pour vous aider à déterminer quelles règles de réécriture sont exécutées pour des URL spécifiques.

17
Rachel Carden

La commande est importante, vous devriez écrire:

add_rewrite_rule( 'region/([^/]+)/type/([^/]+)/page/([0-9]{1,})/?', 'index.php?taxonomy=region&term=$matches[1]&post_type=$matches[2]&paged=$matches[3]', 'top' );

avant

add_rewrite_rule( 'region/([^/]+)/type/([^/]+)/?', 'index.php?taxonomy=region&term=$matches[1]&post_type=$matches[2]', 'top' );
0
user671420