$_GET中的请求参数与调用的URL不匹配

时间:2012-07-10 作者:user13955

我有一个WP插件,它使用请求参数“type”来确定要加载的代码文件,以便进行一些处理。处理此问题的代码如下:

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);
}
奇怪的是如果我打电话

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

var_dump ($_GET);
exit ();
对于代码,我的var\\u dump()输出以下内容:

array
  \'page_id\' => string \'4\' (length=1)
  \'type\' => string \'user\' (length=4)
  \'func\' => string \'main\' (length=4)
  \'store\' => string \'1\' (length=1)
因此,$\\u GET不包含我通过地址栏(或单击具有相同内容的链接)调用的内容。

有人知道这是怎么回事吗?

问候/谢谢

1 个回复
最合适的回答,由SO网友:EAMann 整理而成

WordPress通常会过滤掉查询参数,除非您告诉它这些参数并要求它不要这样做。

从…起this older tutorial, 您可以看到如何向WordPress添加新的查询变量(这样它就不会被剥离):

add_filter(\'query_vars\', \'parameter_queryvars\' );
function parameter_queryvars( $qvars )
{
    $qvars[] = \'myvar\';
    return $qvars;
}
在的第一个答案中有一个替代建议this 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\');
然而,一旦你做到了这一点,你还需要意识到一些reserved terms 在WordPress中。有些术语不能用于自定义数据,因为它们已经在其他地方使用过了。保留条款的完整列表为in the Codex.

快速浏览显示“type”在保留列表中。。。这可能就是为什么当你尝试使用它时,它会发生变化。

结束

相关推荐

Encoding Method for URLs?

WordPress是否有一种编码URL的方法或API,类似于在URL中使用标题时生成部分URL的方式?我正在编写一个生成URL的插件,并希望使用与其他所有插件相同的方法。例如,我在标题中键入“这是我的博客文章”,然后生成“这是我的博客文章”。