web-dev-qa-db-fra.com

Wordpress réécrit mon URL lorsque j'utilise la pagination

Je viens de créer une règle de réécriture pour intégrer la pagination à la musique de ma page (affichant un "post_type personnalisé" musique) afin: 1. d'afficher une page spécifique à partir d'une longue liste de lecture musicale. 2. dans cette page, la lecture d'une piste spécifiée

Voici la règle pour la pagination:

add_rewrite_rule('music/page/([0-9])+/([^/]+)/?', 'index.php?pagename=music&paged=$matches[1]&trackid=$matches[2]', "top");

Mais maintenant, quand j'entre: http://carbonpaper-dev.imperatorium.org/music/page/2/track-2442

Wordpress réécrit mon lien avec une répétition de/page/2 /: http://carbonpaper-dev.imperatorium.org/music/page/2/track-2442/page/2/

Je recherche une solution pour conserver la première URL. J'essaie la fonction get_rewrite_permalink () mais ça ne va pas ..

Aucune suggestion ?

avant

Le blog est en phase de test, donc désolé pour les inconvénients.

2
beR-

Je pense que ce problème est moins lié à la règle de réécriture, qui semble devoir fonctionner à première vue, qu’à la redirection canonique de WordPress.

Fondamentalement, lorsque WordPress reçoit une URL, il l’interprète comme une requête. Il regarde ensuite à nouveau l'URL pour vérifier que celle-ci est "correcte" (ou canonique). Par exemple, il peut avoir des barres obliques superflues et ainsi de suite.

Si l'URL est jugée "incorrecte", vous êtes redirigé vers l'URL "correcte". L'idée est que vous ne disposez pas de plusieurs URL pointant sur le même contenu (elles sont toutes redirigées vers une seule URL canonique ).

Le fichier qui en est responsable est /wp-includes/canonical.php . En particulier, la fonction redirect_canonical() est liée à l'action template_redirect. La fonction redirect_canonical() possède son propre filtre:

add_filter('redirect_canonical', 'wpse50912_redirect_canonical',10,2)
function wpse50912_redirect_canonical($redirect_url, $requested_url){

     //Check the requested url is an url for your (paginated) music archive
     //Return the url you want in the address bar.

     return $redirect_url;
}

Vous pouvez désactiver la canonisation - en décrochant la fonction redirect_canonical à partir du hook template_redirect. Ou peut modifier son comportement en utilisant le redirect_canonical. Quoi qu'il en soit, je vous recommanderais de désactiver temporairement afin de vérifier que c'est bien la cause.

1
Stephen Harris

difficile à dire sans regarder de plus près votre code, mais j'ai un soupçon sournois qu'il pourrait en quelque sorte être lié au fait que vous utilisez le mot clé page . Peut-être que quelque part ailleurs il y a une règle qui le cherche.

Quelques tests rapides peuvent être utiles:

  1. remplacez 'music/page/([0-9])... par 'music/pg/([0-9])... (ou tout autre élément que Word page)
  2. Essayez peut-être d’utiliser bottom au lieu de top pour que votre règle soit traitée après le traitement wordpress.
0
Yoav Aner

J'ai fait beaucoup de recherches sur la modification de la variable page ou essayé de la supprimer. J'ai appris que Wordpress ne fonctionne qu'avec la notation de page à la fin de l'URL. Vous pouvez modifier ce comportement, mais il est nécessaire de modifier le code dans les fichiers principaux de Wordpress. Votre question n’est pas exactement la même chose que ce que j’ai essayé, mais c’est à peu près le même "problème". Je suis désolé, mais vous devez utiliser l'URL créée par Wordpress.

BTW. pourquoi avez-vous besoin d'une structure d'URL différente?

0
Olaf