API настроек: Два уведомления об обновлении после сохранения настроек?
Я использовал API настроек для создания очень простой страницы настроек плагина. Это мой первый раз, когда я использую API, и благодаря различным учебным пособиям в Интернете и ответам здесь, я думаю, что понял это. Это подтверждается тем фактом, что страница даже работает!!
Однако происходит что-то странное:
Как вы можете видеть выше, на экране отображаются два сообщения об обновлении div. Я проверил, и есть только один звонок на функция settings_errors()
так и эта функция не вызывается в цикле или чем-то еще, что я могу найти, но я все еще получаю два уведомления.
Вот код:
public function __construct() {
/* more stuff */
add_action("admin_menu", array($this, "plugin_settings_menu_add");
if($pagenow == "options.php" || $pagenow == "options-general.php") {
add_action("admin_init", array($this, "plugin_settings_initialize");
}
}
public function plugin_settings_menu_add() {
add_options_page("Gallery Settings", "Galleries", "manage_options", "galleries-settings-page", array($this, "plugin_settings_menu_display"));
}
public function plugin_settings_menu_display() {
require(plugin_dir_path(__FILE__) . "views/plugin-settings.php");
}
public function plugin_settings_permissions_to_use_default() {
return apply_filters(
"plugin_settings_permissions_to_use_default",
array(
"galleries-settings-permission-to-use-url" => ""
)
);
}
public function plugin_settings_initialize() {
if(get_option("galleries-settings-permission-to-use") == false) {
add_option("galleries-settings-permission-to-use", $this->plugin_settings_permissions_to_use_default());
}
add_settings_section(
"galleries-settings-permission-to-use-section", // DOM ID for the section
"Permission to Use Gallery Items", // on-screen title for it
array($this, "plugin_settings_permissions_to_use_header_display"), // callback to display its header
"galleries-settings-page" // the menu page on which to show it
);
add_settings_field(
"galleries-settings-permission-to-use-url",
'<label for="galleries-settings-permission-to-use-url">Webtools Form (required)</label>',
array($this, "plugin_settings_permissions_to_use_url_display"),
"galleries-settings-page",
"galleries-settings-permission-to-use-section"
);
register_setting(
"galleries-settings-page",
"galleries-settings-permission-to-use",
array($this, "plugin_settings_permissions_to_use_sanitize")
);
}
public function plugin_settings_permissions_to_use_header_display() {
echo "<p>......</p>";
}
public function plugin_settings_permissions_to_use_url_display() {
$settings = get_option("galleries-settings-permission-to-use");
$value = isset($settings["galleries-settings-permission-to-use-url"])
? $settings["galleries-settings-permission-to-use-url"]
: ""; ?>
<input type="url" id="galleries-settings-permission-to-use-url"
name="galleries-settings-permission-to-use[galleries-settings-permission-to-use-url]"
value="<?=esc_url($value)?>" class="regular-text" required aria-required="true"><br>
<em>Enter the full URL but without any query string parameters.</em>
<? }
public function plugin_settings_permissions_to_use_sanitize($input) {
$output = array();
foreach($input as $key => $value) {
// even though we have only one field here at the moment, we'll use a loop and a switch
// to santize. that way we're ready to go with respect to additional data that might one
// day be sent here.
switch($key) {
case "galleries-settings-permission-to-use-url":
if(empty($value) || !filter_var($value, FILTER_VALIDATE_URL)) {
add_setting_error("galleries-settings-permission-to-use-url",
"galleries-settings-permission-to-use-url-invalid",
"You must enter a valid web address."
);
} elseif(($qloc = strpos($value, "?"))!==false) $value = substr($value, 0, $qloc);
break;
}
$output[$key] = $value;
}
return apply_filters("galleries_plugin_settings_permissions_to_use_sanitize", $output, $input);
}
Ниже приводится содержимое страницы plugin-settings.php
, которая включена в приведенный выше код:
<div class="wrap">
<div id="icon-options-general" class="icon32"></div>
<h2>Gallery Settings</h2>
<? settings_errors(); ?>
<form method="post" action="options.php">
<? settings_fields("galleries-settings-page"); ?>
<? do_settings_sections("galleries-settings-page"); ?>
<? submit_button(); ?>
</form>
</div>
И, да, как вы, вероятно, можете сказать, это еще один плагин для галереи изображений. Я сделал поиск и замену, чтобы скрыть часть информации о том, для кого я делаю плагин. Надеюсь, это не привело ни к какому ошибки.
2 answers
Проблема, как определил Чип Беннетт в нашем разговоре выше, была связана со звонком settings_errors()
. Проблема заключалась в том, что я не указал параметр, для которого я хотел бы отображать либо ошибки, либо уведомления об обновлении, в основном потому, что учебник, с которым я работал, тоже этого не делал. Указав этот параметр, я вижу одно единственное уведомление и ошибки, если это необходимо.
Спасибо, Чип, за помощь!
Мы можем легко решить эту проблему, используя страницу параметров, например, settings_errors('page_slug');
Я не уверен, правильно это или неправильно, но для меня это хорошо сработало.