问题描述
Professional WordPress Plugin Development 书籍详细介绍了如何正确使用 Settings API,并且还演示了如何添加菜单和子菜单,但不幸的是,它不提供任何 joined-up 的示例。虽然我已经设法使大部分工作正常,但我无法弄清楚如何在自定义菜单页面上正确实施 add_settings_error 。这是我的代码:
function settings_main_validate( $input ) {
$valid['text_string'] = preg_replace( '/[^a-zA-Z]/', '', $input['text_string'] );
if ( $valid['text_string'] != $input['text_string'] ) {
//add_setting_error: $title, $id, $error_message, $class
add_settings_error( 'fields_main_input', 'texterror', 'Incorrect value entered!', 'error' );
}
return $valid;
}
上面的验证将很好地使用 add_options_page
设置渲染,但不会显示使用 add_menu_page
呈现的页面上的设置错误。
最佳解决方案
错误/通知创建和显示过程有几个组件:
-
add_settings_error()
调用将项目添加到堆栈 (全局$wp_settings_errors
变量) 。 -
settings_errors
瞬态保持错误,使他们生存下来从一页到另一页。 -
settings_errors()
功能get_settings_errors()
从内存或瞬态中检索错误,然后显示它们。
这些工作类似于 「设置」API 的魅力,但不幸的是,它们不能设置为通用。另一方面,这是微不足道的。
将 settings_errors()
钩到 admin_notices
插件的页面上,将错误代码传递给它,以便它只显示您的东西。
手动将错误保存到 settings_errors
瞬态 (将全局变量填入其中) 。
由于 get_settings_errors()
希望提供 GET 参数 ($_GET['settings-updated']
),它应该检查瞬态而不是内存,您可以自己提供或从瞬态中获取错误,并在 settings_errors()
调用之前将其保存回全局变量。
更新
你正在把它变成一个混乱的多个问题,所以我会尝试在这里解决你的疑虑。
设置 API 与管理页面配合使用,不会将 「设置」 部分用作基础。你真正的问题是,在这种情况下,错误/通知报告不起作用。
首先,当您发布表单时,使用 Settings API 设置会发生什么:
-
数据发布到特殊的
options.php
页面。 -
有数据使用回调进行消毒/验证。
-
在清理/验证过程中出现的任何错误/通知都将被收集并保存在瞬时状态。
-
你被重定向到你来的地方。
现在当您加载管理页面时,它会检查此页面是否属于 「设置」 部分,如果该情况包含微小的 options-head.php
文件,则会处理检索和显示错误通知。
所以”not working” 在其他页面上唯一的事情是后一个步骤,这对你自己来说很简单,上面介绍了相关的功能 (我可能会介绍过多的细节,你不需要这个基本的情况) 。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。