我正在尝试我的技能在一个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
任何解决方法都会有所帮助!由于
我终于可以绕开这个问题了。我做了一些测试,看看核心是什么。跟踪链接似乎是正在发生的事情。该选项经过的进程有:
- 正在更新,但还没有任何东西存在,请在尝试 之前使用sanitize_callback
- 添加,因为第一次尝试返回false并且再次应用sanitize_callback
绕过它
- 我删除了register_setting 中的sanitize_callback
- 使用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 );
这个调用负责在添加或更新被保存的选项的值之前修改值。奇怪的是,这个钩子执行与之前相同的进程,但没有在进程的各个步骤上应用回调函数。
对这个问题的任何改进都是欢迎的。