如何在自定义菜单页面上实现add_settings_error?


8

专业WordPress插件开发》一书详细说明了如何正确使用Settings API,还演示了如何添加菜单和子菜单,但不幸的是,它没有提供任何此类示例。尽管我设法使其中的大部分工作正常进行,但我仍无法弄清楚如何在自定义菜单页面上正确实现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

Answers:


8

错误/通知创建和显示过程包含以下几部分:

  1. add_settings_error()调用以将项目添加到堆栈(全局$wp_settings_errors变量)。
  2. settings_errors 暂时保留错误,使错误得以幸存,在页面之间移动。
  3. settings_errors()函数get_settings_errors()从内存或瞬态中检索错误,然后显示它们。

这些功能对于Settings API来说就像是一种魅力,但是不幸的是,它们并未针对通用设置。另一方面,解决该问题很简单。

settings_errors()admin_notices你的插件的网页上,通过错误代码到它,所以它只能说明你的东西。

手动将错误保存为settings_errors瞬态(只需将全局变量填充到其中)。

由于get_settings_errors()期望在GET参数($_GET['settings-updated'])中提示它应该检查瞬态而不是内存,因此您可以提供该信息,也可以从瞬态中获取错误,然后在settings_errors()调用之前将其保存回全局变量。

更新资料

您正在将这个问题弄得一团糟,有多个问题,因此我将在这里尝试解决您的问题。

设置API 确实适用于管理页面,这些页面不使用“设置”部分作为基础。您的真正问题是在这种情况下错误/通知报告不起作用。

首先,这是您发布表单并使用Settings API进行设置时发生的情况:

  1. 数据被发布到特殊options.php页面。
  2. 使用回调对数据进行清理/验证。
  3. 收集在消毒/验证过程中出现的任何错误/通知,并暂时保存。
  4. 您将被重定向回原籍

现在,当您加载管理页面时,它将检查该页面是否属于“设置”部分,以及该案例是否包含微小options-head.php文件,该文件负责检索和显示错误通知。

因此,在其他页面上唯一“不起作用”的是后面的步骤,这对于上面的相关功能概述是微不足道的(我可能在瞬态上有过多的详细介绍,对于基本情况而言,您不需要这样做)。


您是说Settings API并非真正为管理员菜单和屏幕设计的吗?
jnthnclrk 2011年

@trnsfrmr好吧,这不是我要说的是设计还是未设计的地方,但是它当然不是为此而设置的
罗斯特(Rarst)2011年

该死,那我完全错了。那么,Settings API仅适用于“设置”菜单项下的屏幕吗?事后看来,这解释了为什么在自定义菜单上使用它是如此棘手。
jnthnclrk 2011年

遗憾的是,使用自定义菜单的插件无法使用Settings API的所有出色功能。
jnthnclrk 2011年

@trnsfrmr好,您仍然可以尝试并使用它,只需花费额外的精力即可
Rarst 2011年

0

有点晚了,但是我刚刚经历了这个。根据OP的代码,我发现的最佳解决方案是插入以下代码:

function your_admin_notices_action() {
    settings_errors( 'fields_main_input' );
}
add_action( 'admin_notices', 'your_admin_notices_action' );

这会将管理员通知显示添加到使用add_menu_page呈现的管理员页面中


-1

只需添加

include_once 'options-head.php'; 

我的自定义菜单页面的$ function似乎可以在自定义菜单页面上显示错误消息。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.