J'ai ajouté un filtre pour ajouter un paramètre à l'URL lors de la navigation dans les catégories. Ceci est utilisé pour trier les messages en fonction de leurs votes lors de la navigation dans une catégorie uniquement si un paramètre sort
est défini.
Par exemple, lorsque vous cliquez sur Voir tous les messages avec le plus de votes, les messages avec le plus grand nombre de votes sont affichés. De là, vous pouvez afficher les messages les plus votés par catégorie en ajoutant un sort=most_voted
ou sort=doleast_voted
à l'URL avec cat=?
.
add_filter( 'category_link','append_parameter', 10, 2 );
function append_parameter( $link, $query ) {
$my_parameter = $query->query_vars['sort']; //get sort value
if ( isset($my_parameter) ) { //if browsing posts by votes
$link = add_query_arg( 'sort', $my_parameter, $link );
}
return $link;
}
Je n'arrive pas à comprendre pourquoi le paramètre de tri n'est pas ajouté à l'URL. Cela fonctionne cependant sans les instructions if et une valeur à la place du $my_parameter
dans add_query_arg.
EDIT: Nouveau code de travail
add_filter( 'category_link','append_parameter', 10, 2 );
function append_parameter( $link, $my_parameter ) {
$my_parameter = $_GET['sort']; //get sort value
if ( isset($my_parameter) ) {
$link = add_query_arg( 'sort', $my_parameter, $link );
}
return $link;
}
Si vous regardez où le hook category_link
est défini dans category-template.php , vous verrez que ce hook transmet deux variables. La deuxième variable est l'ID de la catégorie, mais votre fonction de rappel traite cette deuxième variable entrante en tant qu'objet de requête.
En termes simples, vous recherchez une propriété/clé query_vars
qui n’existe pas et ne peut pas exister, car la variable entrante n’est pas un objet de requête.