web-dev-qa-db-fra.com

Filtrer l'URL de next_posts_link & previous_posts_link

Je travaille avec le plugin qTranslate pour créer un site Web multilingue. Le plug-in fait un excellent travail de traduction, à l'exception des balises de modèle next_posts_link et previous_posts_link.

Lorsqu'un utilisateur a sélectionné une langue différente, l'URL doit être modifiée:

http://monsite.com/test/page/2 (pour la langue par défaut)

à

http://mysite.com/fr/test/page/2 (pour la langue française)

Le plug-in fournit des fonctions de modification/traduction des URL à l'aide de la fonction qtrans_convertURL($url). Le problème que je rencontre est de trouver un hook ou un filtre approprié qui me permettra de modifier l’URL générée par les balises de modèle next_posts_link & previous_posts_link.

Les deux filtres WordPress les plus proches que j'ai trouvés sont:

add_filter('next_posts_link_attributes', 'my_next_attr');
add_filter('previous_posts_link_attributes', 'my_prev_attr');

Tous les conseils seraient les bienvenus.

2
Scott

Grâce au conseil utile de @ t31os, le problème peut être résolu avec le code suivant:

/***************************************************************
* Function qtranslate_next_previous_fix
* Ensure that the URL for next_posts_link & previous_posts_link work with qTranslate
***************************************************************/

add_filter('get_pagenum_link', 'qtranslate_next_previous_fix');

function qtranslate_next_previous_fix($url) {
    return qtrans_convertURL($url);
}

Ce correctif fonctionne également pour les types de publication personnalisés.

Mis à jour

Cette deuxième fonction garantit que les balises de modèle next_post_link et previous_post_link sont également filtrées correctement sur les types de publication personnalisés.

/***************************************************************
* Function qtranslate_single_next_previous_fix
* Ensure that the URL for next_post_link & previous_post_link work with qTranslate
***************************************************************/

add_filter('next_post_link', 'qtranslate_single_next_previous_fix');
add_filter('previous_post_link', 'qtranslate_single_next_previous_fix');

function qtranslate_single_next_previous_fix($url) {
    $just_url = preg_match("/href=\"([^\"]*)\"/", $url, $matches);
    return str_replace($matches[1], qtrans_convertURL($matches[1]), $url);
}
4
Scott

Exécutez un filtre sur get_pagenum_link et vous devriez pouvoir faire ce que vous voulez.

Les fonctions next_posts_link/previous_posts_link appellent chacune des fonctions appelant d'autres fonctions, qui sont ensuite renvoyées à la fonction get_pagenum_link qui fournit un filtre du même nom.

Il devrait vous donner le contrôle dont vous avez besoin, mais poster un commentaire si vous avez spécifiquement besoin d'un exemple.

Pour les fonctions de lien postales singulières, c'est-à-dire. next_post_link/previous_post_link (notez les autres lecteurs non pluriels), il y a un crochet de filtre avec un nom correspondant, par exemple. next_post_link et previous_post_link ..

4
t31os