web-dev-qa-db-fra.com

Problème avec add_rewrite_rule et la pagination (paginé et page query_vars)

J'ai une taxonomie personnalisée nommée location et je souhaite ajouter des sections telles que "actualités" et "marché" pour chaque terme, mon URL ressemble donc à /location/montreal/news/

Cela fonctionne parfaitement jusqu'à ce que j'essaye d'ajouter une pagination. Voici mon code:

add_action( 'init', 'region_rewrite' );
function region_rewrite()
{
    global $wp;
    $wp->add_query_var( 'section' );

    add_rewrite_rule(
      '^location/([^/]*)/([^/]*)/page/([0-9]+)/?',
      'index.php?location=$matches[1]&section=$matches[2]&paged=$matches[3]',
      'top'
    );
    add_rewrite_rule(
      '^location/([^/]*)/([^/]*)/?',
      'index.php?location=$matches[1]&section=$matches[2]',
      'top'
    );
}

J'utilise le plugin Rewrite analyzer et il semble que l'emplacement, la section et le paginé de query_vars reçoivent la bonne valeur. Cependant, je reçois une erreur 404 lorsque j'essaie d'accéder à une URL telle que /location/montreal/news/page/2. J'ai aussi remarqué que la variable page a la valeur /2. Est-il possible que ce soit la raison pour laquelle je reçois un 404 non trouvé?

Toute aide serait grandement appréciée!

7

Je crois que vous pouvez simplement appeler le add_rewrite_url paginé last pour qu’il soit vérifié en premier. Sinon, la version paginée n'aura jamais de correspondance, car la version non paginée sera toujours la première. Cela devrait également fonctionner si vous supprimez "top" de vos arguments.

Consultez également cette page pour trouver une façon agréable de déboguer ces 404 lors de l’utilisation de la réécriture personnalisée: http://www.dev4press.com/2012/tutorials/wordpress/practical/debug-wordpress-rewrite-rules-matching/

1
Olivier

Merci à Olivier. Mon propre problème était que mon add_rewrite_url fonctionnait bien pour les pages mais pas pour tous les posts.

Cela fonctionnait pour les publications si vous utilisiez uniquement %postname%/ dans la configuration de permalien. Je continuais à perdre le bit après l'URL de publication si je utilisais /%category%/%postname%/ c'est-à-dire que http://me.com/test/post/my-next-bit-that-url-rewrite-should-act-on conservait 301 redirections vers http://me.com/test/post/my-next-bit-that-url-rewrite-should-act-on en raison du comportement canonique de wordpress.

La ligne ci-dessous a arrêté ce problème.

remove_filter('template_redirect', 'redirect_canonical');

Je pense que cela devrait être suggéré dans le codex.

0
GordoF