在管理后端,我们使用一个保留在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
}
}
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);
}