web-dev-qa-db-fra.com

add_query_arg ne fonctionne pas

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;
    }
1
wpStudent

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.

2
t31os