Untermenü-Seiten löschen Einstellungen aus dem Options-Array, wenn sie gespeichert werden

Ich schreibe ein Thema und füge ein Menü mit mehreren Untermenüs hinzu. Es funktioniert gut, außer dass ich versuche, nur ein Array zu verwenden, um alle Einstellungen in der database zu speichern, und dies verursacht einige Probleme.

Das Problem besteht darin, dass beim Speichern der einzelnen Untermenüseiten nur die Werte von dieser Seite im Array gespeichert werden und alle anderen Werte von den anderen zuvor gespeicherten Seiten entfernt werden, sodass das Array nur die Werte von einer Seite bei a enthält Zeit.

Hier sind die functionen, wo ich die Seiten erstelle und die Einstellung registriere.

add_action('admin_menu', 'theme_add_admin'); add_action('admin_init', 'register_theme_settings'); function theme_add_admin() { add_menu_page( 'Theme Settings', 'Theme Settings', 'update_themes', 'themesettings', 'settings_messages_page'); add_submenu_page( 'themesettings', 'messages', 'Titles and Messages', 'update_themes', 'themesettings'); add_submenu_page( 'themesettings', 'layout', 'Layout', 'update_themes', 'settings_layout', 'settings_layout_page'); add_settings_messages(); add_settings_layout(); } function register_theme_settings() { register_setting( THEMENAME . '_settingsgroup', THEMENAME . '_settings', 'validate_options' ); } 

In add_settings_messages () und add_settings_layout füge ich die Abschnitte und Felder hinzu:

 function add_settings_layout() { add_settings_section('layout_styles', 'Archive Layout', 'settings_layout_styles_fn', __FILE__); add_settings_field('layout_index', 'Home Page Post Style', 'layout_home_fn', __FILE__, 'layout_styles'); add_settings_field('layout_paged', 'Paged Archives Post Style', 'layout_paged_fn', __FILE__, 'layout_styles'); } 

Und hier ist die Seitenanzeigefunktion:

 function settings_layout_page() { ?> 

Layout

<input name="Submit" type="submit" class="button-primary" value="" />

<?php }

Vermutlich vermisse ich hier etwas Offensichtliches, jede Hilfe wäre willkommen.

Solutions Collecting From Web of "Untermenü-Seiten löschen Einstellungen aus dem Options-Array, wenn sie gespeichert werden"

Wenn Ihnen etwas fehlt, müssen Sie für Ihre validate_options-function Folgendes tun:

  • Holen Sie sich ein Array aller vorhandenen Optionen.
  • Aktualisiere nur die Optionen, die deine Submenü-Seite behandelt.
  • gebe dieses Array zurück.

So etwas wie:

 function validate_options($input){ //do regular validation stuff //... //... //get all options $options = get_option(THEMENAME . '_settings'); //update only the neede options foreach ($input as $key => $value){ $options[$key] = $value; } //return all options return $options; } 

“Disappearing from options array” hört sich an, als wäre es im Array “notoptions” versteckt. Überprüfen Sie das mit etwas wie:

  $notoptions = wp_cache_get( 'notoptions', 'options' ); 

Schlimmer noch, vielleicht hören Sie nach dem Haken add_option und sehen, was vor sich geht.

  do_action( 'add_option', $name, $value );