web-dev-qa-db-fra.com

Les paramètres de requête dans $ _GET ne correspondent pas à l'URL appelée

J'ai un plug-in WP qui utilise le paramètre de requête "type" pour déterminer le fichier de code à charger pour effectuer certains traitements. Le code qui gère cela est comme suit:

add_shortcode ('myplugin_frontend_main', 'MyPlugin_user_dispatcher');

function MyPlugin_user_dispatcher ($args=array())
{
    $type = $_GET['type'];
    $func = $_GET['func'];

    $typefile = ucwords($type). '.php';
    require_once(dirname(__FILE__) . "/$typefile");
    $class  = 'MyPlugin_Controller_' . ucfirst($type);
    $object = new $class();
    echo $object->$func($args);
}

La chose étrange est la suivante, si j'appelle

http://localhost/wordpress/?page_id=4&type=userform&func=edit&noheader=true&ot=product_add&id=14&store=1

et ajouter

var_dump ($_GET);
exit ();

dans le code, mon var_dump () affiche les éléments suivants:

array
  'page_id' => string '4' (length=1)
  'type' => string 'user' (length=4)
  'func' => string 'main' (length=4)
  'store' => string '1' (length=1)

Donc, d’une manière ou d’une autre, $ _GET ne contient pas ce que j’appelle via la barre d’adresse (ou en cliquant sur un lien ayant le même contenu).

Est-ce que quelqu'un a une idée de ce qui se passe ici?

Salutations/Merci R

1
user13955

WordPress filtrera généralement les arguments de requête à moins que vous ne lui en parliez et que vous lui demandiez de ne pas le faire.

Depuis cet ancien tutoriel , vous pouvez voir comment ajouter une nouvelle variable de requête à WordPress (afin qu'elle ne soit pas supprimée):

add_filter('query_vars', 'parameter_queryvars' );
function parameter_queryvars( $qvars )
{
    $qvars[] = 'myvar';
    return $qvars;
}

Il y a une suggestion alternative dans la première réponse de cette question :

//add author_more to query vars
function add_author_more_query_var() {
    global $wp;
    $wp->add_query_var('author_more');
}

add_filter('init', 'add_author_more_query_var');

Une fois que vous avez fait cela, vous devez également connaître certains termes réservés au sein de WordPress. Il existe certains termes que vous ne pouvez pas utiliser pour les données personnalisées car elles sont déjà utilisées ailleurs. La liste complète des termes réservés est dans le Codex .

Un rapide coup d'œil montre que "type" est dans la liste réservée ... ce qui pourrait expliquer pourquoi il change lorsque vous essayez de l'utiliser.

1
EAMann