Wordpress register_setting sanitize_callback在初始保存时运行两次



我正在尝试我的技能在一个Wordpress插件。

我有一个函数来注册设置页面的设置,sanitize_callback函数只在初始的第一次保存时被调用两次。

需要加密的字段,因为它是一个密码。所以我想到用这个sanitize_callback调用函数来做这件事。

也许是错误的方法!你会怎么做?

$pswd_args = array(
"type" => "string",
"description" => "",
"sanitize_callback" => array( $this, "encryptPSWD"),
"show_in_rest" => false,
"zzz_password"
);
register_setting( self::OPTION_GROUPE_NAME, "zzz_password", $pswd_args );

我已经寻找了一些解决方案,但到目前为止还没有。我看到这篇文章是关于一个已经运行了很长一段时间的漏洞报告,但不确定这是否与我的问题100%相关。

https://core.trac.wordpress.org/ticket/21989

任何解决方法都会有所帮助!由于

我终于可以绕开这个问题了。我做了一些测试,看看核心是什么。跟踪链接似乎是正在发生的事情。该选项经过的进程有:

  1. 正在更新,但还没有任何东西存在,请在尝试
  2. 之前使用sanitize_callback
  3. 添加,因为第一次尝试返回false并且再次应用sanitize_callback

绕过它

  1. 我删除了register_setting
  2. 中的sanitize_callback
  3. 使用pre_update_option_{$option_name}钩子添加了一个过滤器
$pswd_args = array(
"type" => "string",
"description" => "",
"show_in_rest" => false,
"zzz_password"
);
register_setting( self::OPTION_GROUPE_NAME, "zzz_password", $pswd_args );

在构造函数

add_filter( "pre_update_option_my_option", array( $this, "function_name" ), 10, 2 );

这个调用负责在添加或更新被保存的选项的值之前修改值。奇怪的是,这个钩子执行与之前相同的进程,但没有在进程的各个步骤上应用回调函数。

对这个问题的任何改进都是欢迎的。

相关内容

  • 没有找到相关文章

最新更新