Las páginas del submenú eliminan la configuración de la matriz de opciones cuando se guardan

4

Estoy escribiendo un tema y agregando un menú con varias páginas de submenú. Funciona bien, excepto que estoy tratando de usar solo una matriz para guardar todas las configuraciones en la base de datos y esto está causando algunos problemas.

El problema es que cuando se guardan las páginas de cada submenú, solo guarda los valores de esa página en la matriz y elimina todos los demás valores de las otras páginas que se almacenaron antes, por lo que la matriz solo mantiene los valores de una. página a la vez.

Aquí están las funciones donde creo las páginas y registro la configuración.

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

En add_settings_messages () y add_settings_layout agrego las secciones y campos:

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

}

Y aquí está la función de visualización de página:

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
}

Probablemente me esté perdiendo algo obvio aquí, cualquier ayuda sería apreciada.

    
pregunta BioXD 15.03.2011 - 13:38

2 respuestas

5

Sí, te estás perdiendo algo. En la función validate_options necesitas:

  • obtener una matriz de todas las opciones existentes.
  • actualiza solo las opciones de tu submenú manejadores de página.
  • devolver esa matriz.

Entonces algo como:

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;
}
    
respondido por el Bainternet 15.03.2011 - 15:30
1

"Desaparecer de la matriz de opciones" suena como si pudiera estar escondido en la matriz "notoptions". Comprueba eso con algo como:

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

Lo peor es peor, tal vez escuche el add_option hook y vea qué está pasando.

  do_action( 'add_option', $name, $value );
    
respondido por el editor 15.03.2011 - 15:35

Lea otras preguntas en las etiquetas