获取参数会影响我的插件设置

时间:2011-06-17 作者:Scott

我的插件都是使用设置API设置的,可以正常工作,但我的插件中有两个手动功能,管理员用户可以通过访问以下URL来运行

<?php echo admin_url(); ?>options-general.php?page=wordpress-file-monitor-plus&sc_wpfmp_action=1&sc_wpfmp_scan=1
<?php echo admin_url(); ?>options-general.php?page=wordpress-file-monitor-plus&sc_wpfmp_action=1&sc_wpfmp_reset_settings=1
我正在使用admin_init 钩子查找这些GET参数并执行这些函数。

函数运行正常,用户返回到我的插件设置页面,但GET参数仍在URL中。这不是什么大问题,但如果用户继续保存设置,则会再次发送这些GET参数,从而再次运行这些功能。

为什么在提交设置表单时,设置API会发送这些参数?表单的操作是提交给options.php.

我能想到的唯一解决问题的方法是,在这些手动函数运行完代码之后admin_init 是在没有GET参数的情况下重定向到设置页面,但如果这样做,我将丢失我试图向用户显示的管理通知。

不管怎样,我有什么建议可以绕过这个问题。也许你认为有更好的方法来运行这些手动功能?

编辑:完整设置代码:http://pastebin.com/Gk5RF5Lc

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

为什么在提交设置表单时,设置API会发送这些参数?

坦白地说,事实并非如此。正如你已经提到的,你的表格只是张贴到options.php, 它依次处理请求、更新数据库,然后redirects back to the referer.

如何获取referer取决于函数wp_get_referer();

function wp_get_referer() {
    $ref = \'\';
    if ( ! empty( $_REQUEST[\'_wp_http_referer\'] ) )
        $ref = $_REQUEST[\'_wp_http_referer\'];
    else if ( ! empty( $_SERVER[\'HTTP_REFERER\'] ) )
        $ref = $_SERVER[\'HTTP_REFERER\'];

    if ( $ref !== $_SERVER[\'REQUEST_URI\'] )
        return $ref;
    return false;
}
这就是为什么您会被发送回选项页面,而操作参数仍然存在的原因,因为它们存在于$_SERVER[\'HTTP_REFERER\'].

但您也会看到,您可以通过在表单中放置隐藏的输入来覆盖这种行为,就像这样;

<input type="hidden" name="_wp_http_referer" value="<?php echo admin_url( \'options-general.php?page=wordpress-file-monitor-plus\' ); ?>" />
现在options.php 将始终重定向回。。。

http://example.com/wp-admin/options-general.php?page=wordpress-file-monitor-plus

...不管之前查询字符串中有什么内容。

结束

相关推荐