Les pages de sous-menu suppriment les paramètres du tableau d'options lors de leur enregistrement

4

J'écris un thème et ajoute un menu avec plusieurs pages de sous-menus. Cela fonctionne bien, sauf que j'essaie d'utiliser un seul tableau pour enregistrer tous les paramètres dans la base de données, ce qui pose certains problèmes.

Le problème est que, lorsque chaque page de sous-menu est enregistrée, elle enregistre uniquement les valeurs de cette page dans le tableau et supprime toutes les autres valeurs des autres pages stockées auparavant, de sorte que le tableau ne conserve que les valeurs d'un. page à la fois.

Voici les fonctions où je crée les pages et enregistre le réglage.

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' );
}

Dans add_settings_messages () et add_settings_layout, j'ajoute les sections et les champs:

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');

}

Et voici la fonction d'affichage de la page:

function settings_layout_page() { 
?>
<div class="wrap">
    <div class="icon32" id="icon-options-general"><br></div>
    <h2>Layout</h2>

    <form action="options.php" method="post">
    <?php settings_fields(THEMENAME . '_settingsgroup'); ?>
    <?php do_settings_sections('settings_layout'); ?>
    <p class="submit">
        <input name="Submit" type="submit" class="button-primary" value="<?php esc_attr_e('Save Changes'); ?>" />
    </p>

    </form>


</div>
<?php
}

Il me manque probablement quelque chose d'évident ici, toute aide serait la bienvenue.

    
posée BioXD 15.03.2011 - 13:38

2 réponses

5

Oui, il vous manque quelque chose. Sur votre fonction validate_options, vous devez:

  • obtenir un tableau de toutes les options existantes.
  • mettre à jour uniquement les options de votre sous-menu poignées de page.
  • renvoyer ce tableau.

Donc quelque chose comme:

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;
}
    
réponse donnée Bainternet 15.03.2011 - 15:30
1

"Disparaître du tableau d'options" semble pouvoir être rangé dans le tableau "notoptions". Vérifiez cela avec quelque chose comme:

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

Pire encore, écoutez peut-être le add_option hook et voyez ce qui se passe.

  do_action( 'add_option', $name, $value );
    
réponse donnée editor 15.03.2011 - 15:35

Lire d'autres questions sur les étiquettes