访问名为‘Error’的GET变量

时间:2015-04-24 作者:Ryan Lund

作为项目的一部分,我需要制作一个wordpress插件,该插件与Google集成以进行身份验证(有充分的理由开发一个新插件,而不是使用现有的插件)。如果用户决定在授权过程中取消登录,则google将重定向回我的网站,并将设置一个名为“error”的GET变量。

所以我注意到$_GET[\'error\'] 从来没有,经过一点研究,我发现get_query_var() 和相关函数-所以我尝试了这个,但仍然无法访问“error”变量。之后,我输出$wp_query->query_vars 并注意到“error”变量存在,并且是空的,无论该变量是否在URL中设置。

因此,我的问题是,如何检查“error”变量的存在(最好不必解析url,但我会将其作为备份计划)。我可能应该提到,我通常不是wordpress插件开发人员,所以,如果我是个白痴,错过了一些简单的东西,请让我知道!

/****编辑**/

这里有一点测试代码,它模拟了我正在尝试的操作。您将看到,我已将处理程序附加到“send\\u headers”操作—这是我真正需要获取变量的地方。“The\\u content”用于比较。

代码:https://gist.github.com/ryanlund/e644b10a9e50ae7b03e6 (这是要点,因为它很长)

日志:https://gist.github.com/ryanlund/e0d685545a09eff93a83

我已将日志的showAll部分裁剪为我们感兴趣的部分。我在url中使用以下查询字符串运行代码:?test=A%20Test&error=An%20error

/****************************最终解决方案*******************************/

大家好,这是基于Tom给我的想法的最终解决方案(见公认答案)

基本上,与其继续尝试使用保留的变量(不是很酷的wordpress!),我只是将其重命名为:

    add_action(\'init\',function() { 
        if(preg_match(\'/^\\/test-page\\//\',$_SERVER[\'REQUEST_URI\'])){
            if(isset($_GET[\'error\'])){
                /*call it something unlikely to be used elsewhere*/
                $_GET[\'error_mpp\']=$_GET[\'error\']; 
            }

            global $wp; 
            $wp->add_query_var(\'test\');
            $wp->add_query_var(\'error_mpp\');
        }
    });

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

你的问题是你正在使用Reserved Terms. error 是保留术语,您不能使用它。

为了避开这个问题,you could intercept the request early, 并执行重定向,在此过程中更改查询参数。例如,处理link 获取参数:

add_action( \'wp\' , \'reserved_term_intercept\' );

function reserved_term_intercept(){
    global $wp_query;
    if( $wp_query->queried_object_id == 72 && isset( $_GET["link"] ) ){

        wp_redirect( get_permalink( 72 ) . "?newlink=" . urlencode( $_GET["link"] ) . "&nonce=" . wp_create_nonce( \'nonce-name\' ) );
        exit;
    }
}
然后处理新变量:

add_action( \'wp_head\' , \'reserved_term_handling\' );

function reserved_term_handling(){
    if( wp_verify_nonce( $_GET["nonce"], \'nonce-name\' ) == TRUE && isset( $_GET["newlink" ) ){
        printf( \'<a href="%s">Hello World!</a>\', esc_url( urldecode( $_GET["newlink"] ) ) );
    }
}
wp_head 可能不是运行代码的最合适的钩子init 相反

结束

相关推荐

在加载plugins_后,get_plugins()不工作

知道为什么下面的代码function my_plugin_load() { get_plugins(); } add_action( \'plugins_loaded\', \'my_plugin_load\' ); 抛出此错误?Fatal error: 不应调用未定义的函数get\\u plugins()get_plugins() 定义在plugins_loaded 胡克开火了?如果不是,那么什么才是合适的钩子呢?(这个钩子应该启动插件的引导/加载过程)