按下保存更改时删除管理页面上的查询变量

时间:2016-07-28 作者:Peter Bushnell

在管理后端,我们使用一个保留在URL中的查询参数,并不断使用它,无论是否应该使用。

我们的插件有一个数组,其中的值可以通过自定义后端页面进行切换。对于应该切换的选项,有一个标题为“Activate”或“Deactivate”的链接,按下该链接将返回相同的管理页面,但会添加一个查询参数,该参数在页面初始化时会被解析。管理员页面可以按照切换链接或按标准的“保存更改”后端按钮重新加载。问题是,当按下“保存更改”时,查询参数仍保留在URL中,因此再次切换该值,而不遵循“激活”或“停用”。

按下“保存更改”时,应删除参数。是否有“保存更改”按钮的筛选器,以便我们可以添加自己的筛选器来删除自定义参数?

class Custom_Admin {
private $options;

public function __construct()
{
    $this->options = get_option( \'custom_options\' );
    add_filter(\'query_vars\', array($this, \'add_query_vars\'));
    add_action(\'init\', array($this, \'check_query_vars\') );
}

public function add_query_vars($public_query_vars) {
    $public_query_vars[] = \'code_key\';
    return $public_query_vars;
}

public function check_query_vars() {
    $code_key = isset($_GET["code_key"]) ? $_GET["code_key"] : \'\';

    $active = $this->options[$code_key][\'active\'];
    $this->options[$code_key][\'active\'] = ($active == true ? false : true);

    update_option(\'custom_options\', $this->options);
}

public function page_init()
{
    register_setting(
        \'group\', // Option group
        \'options\', // Option name
        array( $this, \'sanitize\' ) // Sanitize
    );
}

public function sanitize($input)
{
    // Parse and sanitise more stuff here like a normal person
}

}

3 个回复
SO网友:AncientRo

这可能很有用:有一个名为removable_query_args. 您可以获得一个参数名称数组,您可以将自己的参数附加到该数组中。然后WP将负责从URL中删除列表中的所有参数。

function add_removable_arg($args) {
    array_push($args, \'my-query-arg\');
    return $args;
}

add_filter(\'removable_query_args\', \'add_removable_arg\');
类似于:

\'...post.php?post=1&my-query-arg=10\'
将成为:

\'...post.php?post=1\'

SO网友:majick

如果您正在使用设置API来保存更改,那么您可能正在使用nonce字段(如果不是,那么很容易添加wp_nonce_field 无论您是否使用设置API)。。。

因此,测试nonce字段的存在是一种测试和帮助您区分应该发生什么操作的方法,以便不更新其他自定义选项。例如:。

public function check_query_vars() {
    // bug out here if nonce value is set
    if (isset($_REQUEST[\'_wpnonce\'])) {return;}

    $code_key = isset($_GET["code_key"]) ? $_GET["code_key"] : \'\';

    $active = $this->options[$code_key][\'active\'];
    $this->options[$code_key][\'active\'] = ($active == true ? false : true);

    update_option(\'custom_options\', $this->options);
}

SO网友:Krzysztof Grabania

也许JS会做你想做的事?这应该是实现你想要的最简单的方法。有关的更多信息removing query string param in JS

相关推荐

在将代码添加到函数后无法登录WordPress wp-admin。php

我在函数末尾添加以下代码。php文件,用于根据自定义帖子的帖子标题填充分类法。问题是,当我添加代码时,尝试登录wp admin时会出现以下错误。非常感谢您能帮助我们弄清楚为什么会发生这种情况。Error:错误:由于意外输出,Cookie被阻止。有关帮助,请参阅此文档或尝试支持论坛。Code: <?php function update_custom_terms($post_id) { // only update terms if