我有一个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不包含我通过地址栏(或单击具有相同内容的链接)调用的内容。
有人知道这是怎么回事吗?
问候/谢谢
最合适的回答,由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”在保留列表中。。。这可能就是为什么当你尝试使用它时,它会发生变化。