add_query_arg ne fonctionne pas
Question
J'ai ajouté un filtre pour ajouter un paramètre sur l'URL lors de la navigation dans les catégories. Il est utilisé à des postes de tri par leurs votes lors de la navigation une catégorie seulement si un paramètre sort
est réglé.
Par exemple, lorsque vous cliquez sur Afficher tous les messages avec la plupart des votes, les messages avec de hauts votes sont affichés. De là, vous pouvez voir les plus votés messages 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 ne peux pas comprendre pourquoi le paramètre de tri n'est pas ajouté à l'URL. Cela fonctionne sans toutefois les déclarations et si une valeur au lieu du $my_parameter
dans le 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;
}
La solution
Si vous jetez un coup d'œil où le crochet de category_link
est défini dans catégorie template.php vous verrez ce crochet particulier passe sur deux variables. La deuxième variable est l'ID de catégorie, mais votre fonction de rappel traite que deuxième variable entrant comme un objet de la requête.
En termes simples, vous êtes à la recherche d'une propriété query_vars
/ clé qui ne fonctionne pas et ne peut pas exister, car la variable entrante n'est pas un objet de requête.