问题描述

标题声音 counter-intuitive 但忍受我。 🙂

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

但!为了确定数据无效,我需要进行远程 API 调用。该呼叫依赖于保存的数据。所以我无法在清理回调 (这是推荐的地方抛出这样的通知),因为我的数据尚未保存。

相反,我试图将我的支票挂在 admin_notices 中。除了一个 (最重要的) 情况之外,大多数时间工作正常。当保存设置时,它们总是跟随着本地设置保存。通知和我的习惯通知由于某种原因被完全忽略。

那么即使 WP 认为一切都很好,我该如何抛出这个错误提示呢?

编辑

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

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

最佳解决方案

好的,我想我有一个想法发生了什么。

  1. 要显示的通知列表由 get_settings_errors()(source) 检索。

  2. 此功能从全局 $wp_settings_errors 读取通知,除非有 settings_errors 瞬态集,其优于全局变量。

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

基本上无论你在代码中生成什么注意事项 – 当设置瞬态时,它们将被忽略,并且在保存设置后总是被设置。

对于我来说,连接瞬态与全局变量是有意义的,而不是使其独占或选择。

我想在短暂设置时显示自定义通知,我将需要混淆这种瞬态,这可能不值得。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。