web-dev-qa-db-fra.com

get_query_var ne fonctionne pas

Je voudrais $ _GET un paramètre dans l'URL, pour ce que j'ai lu, je dois utiliser query_vars. J'ai d'abord ajouté les lignes suivantes à functions.php:

function add_query_vars_filter( $vars ){
  $vars[] = "getvar";
  return $vars;
}
add_filter( 'query_vars', 'add_query_vars_filter' );

après ça:

if(get_query_var('getvar')) {
    die('DIE');
}

Si je tape domain.com/?getvar=1, rien ne se passe. Où est le problème?

1
Tina88

Votre filtre:

function add_query_vars_filter( $vars ){
  $vars[] = "getvar";
  return $vars;
}
add_filter( 'query_vars', 'add_query_vars_filter' );

Est correct. Lorsque WordPress commence à assembler la liste des variables de requête, cette fonction ajoute "getvar" à la liste.

Mais ensuite, vous vérifiez immédiatement si la variable est définie avant d’atteindre ce point. Le filtre query_vars n'a pas encore eu lieu. Cela suggère que votre compréhension des événements/filtres est incomplète. Lorsque vous ajoutez le filtre, il n'exécute pas ce qu'il contient, de la même manière que si je vous dis de manger de la nourriture une fois que vous avez payé, vous attendez d'avoir payé pour le manger, vous ne le mangez pas immédiatement. .

Alors:

  1. Vous dites à WordPress d'exécuter une fonction lorsque le filtre 'query_vars' se produit
  2. Vous vérifiez si la requête illégale var 'getvar' est présente
  3. Plus tard, le filtre 'query_vars' se produit et cette fonction'getvar 'devient une variable de requête sûre et légale
  4. Rien n'est fait avec cette variable de requête

Donc, vous devez vérifier la requête var après la fonction est exécutée, le fait d’être plus loin dans le fichier ne le fait pas. vous devez vous accrocher à une action telle que init et y effectuer votre vérification.

1
Tom J Nowell