add_query_arg non funziona
Domanda
Ho aggiunto un filtro per aggiungere un parametro sulla URL durante la navigazione in categorie. Questo è usato per i messaggi di ordinamento per i loro voti durante la navigazione di una categoria solo se un parametro è impostato sort
.
Per esempio, quando si fa clic su Visualizza tutti i messaggi con maggior numero di voti, vengono visualizzati i messaggi con alti voti. Da lì si può vedere più votato i messaggi di categoria aggiungendo un sort=most_voted
o sort=doleast_voted
all'URL con 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;
}
Non riesco a capire perché il parametro di ordinamento non viene aggiunto all'URL. Questo funziona tuttavia senza istruzioni if ??e un valore al posto del $my_parameter
nel add_query_arg.
EDIT: Nuovo codice funzionante
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;
}
Soluzione
Se si dà un'occhiata in cui il gancio category_link
è definito in categoria-template.php vedrete questo particolare gancio passa da due variabili. La seconda variabile è l'ID della categoria, ma la funzione di callback tratta che seconda variabile in entrata come un oggetto query.
In poche parole, si sta cercando un / chiave di proprietà query_vars
che non fa e non può esistere, perché la variabile in entrata non è un oggetto query.