我正在尝试我的技能在一个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
任何工作都会有帮助!谢谢
3条答案
按热度按时间r1wp621o1#
你可以在你的类上创建一个boolean属性,并将它设置为false,在
sanitize_callback
上你可以检查:如果它是false,你可以运行密码加密,如果它是true,你可以跳过加密,在返回值之前,你将属性设置为true。字符串
r6hnlfcb2#
最后,我能够绕过这个问题。我做了一些测试,什么是在core.track链接接缝是什么正在发生的事情。该过程中,该选项通过是:
1.正在更新,但还不存在,请在尝试之前使用sanitize_callback
1.添加,因为第一次尝试返回false并再次应用sanitize_callback
为了绕过它
1.我删除了register_setting中的sanitize_callback
1.使用pre_update_option_{ $option_name }钩子添加了一个筛选器
字符串
在冰箱里
型
这个调用负责在添加或更新保存的选项的值之前修改值。奇怪的是,这个钩子执行与以前相同的过程,但没有在过程的各个步骤上应用回调函数。
在这个问题上的任何改进都是值得欢迎的。
cwdobuhd3#
我最近遇到了完全相同的问题。通过在尝试注册它之前添加not existing yet选项解决了它。当我试图在sanitize回调函数中执行此操作时,我得到了一个500服务器错误,所以请避免这种情况。
字符串