如果设置保存成功,如何显示管理员错误通知?

时间:2011-02-21 作者:Rarst

标题听起来有悖常理,但请宽容我。:)

我有选项页,用设置API制作。当用户输入无效数据时,我想显示错误通知add_settings_error() 呼叫

但是要确定数据无效,我需要进行远程API调用。该调用依赖于保存的数据。所以我无法在清理回调中执行此操作(建议在该位置抛出此类通知),因为我的数据尚未保存。

相反,我试图把我的支票挂到admin_notices. 除一种(也是最重要的)情况外,它在大多数情况下都可以正常工作——保存设置时,设置后面总是跟着native Settings saved. notice and my custom notices are completely ignored 出于某种原因。

那么,即使WP认为一切正常,我如何抛出错误通知呢?

Edit

更集中的问题-为什么要保存设置胜过任何其他通知?

PS我可以尝试让API调用有选择地将数据作为参数,而不是从保存的选项中读取数据,但到目前为止,我认为这会使参数过于庞大。

2 个回复
最合适的回答,由SO网友:Rarst 整理而成

好吧,我想我知道发生了什么事。

要显示的通知列表由get_settings_errors() ( source ).

此函数用于读取全局通知$wp_settings_errors unlesssettings_errors 瞬态集合,胜过全局var。

保存设置时,检查是否没有设置错误,如果有,则检查是否保存设置生成通知。之后(在任何一种情况下)将错误保存到settings_errors 瞬态(我假设在重定向时保留它们)(source ) .

基本上,无论您在代码中生成什么通知,当设置瞬态时,它们都会被忽略,并且总是在保存设置后进行设置。

对我来说,将transient与全局变量连接起来,而不是使其成为异或选择,这是有意义的。

我想,要在设置transient时显示自定义通知,我需要处理该transient,这可能不值得这么麻烦。

SO网友:wyrfel

我想你可以做一件事:

在验证回调中,读取当前设置(无论如何都可以这样做?)然后将它们存储在变量中,首先检查所有其他值,如果这些值无效,则返回错误,不检查临界值,如果有效,则将其存储在db中(在验证函数内)

  • 执行远程API调用验证棘手的值,如果有效,则返回整组值,如果无效,则返回所有良好值,将开始时获得的旧设置存储回db,通过add_settings_error()当然,这在某种程度上会破坏/滥用设置API,但这可能是一种方式
  • 编辑:保存的设置消息不会胜过其他通知,它只会显示,因为您的其他通知已从内部Settings\\u错误存储中删除(出于某种原因)。我不知道为什么会出现这种情况,但保存的设置消息仅在其为空时才会添加到错误存储中。导致您进退两难的原因是,每当读取设置错误存储时(通过get_settings_errors()) 它也会被擦掉。

    结束

    相关推荐

    Displaying oEmbed errors?

    有时,通过oEmbed嵌入项目是不可能的,例如,当YouTube视频已禁用嵌入时。The oEmbed service will return a 401 Unauthorized, 并且不会转换代码。有没有办法通知用户这一点?当前的工作流是非直观的(至少对我来说),我更喜欢在WordPress页面上,或者更好的是,在编辑器中显示一条消息,说明对象无法嵌入。