子菜单页面在保存时从选项数组中删除设置

时间:2011-03-15 作者:BioXD

我正在写一个主题并添加一个包含多个子菜单页的菜单。它工作得很好,只是我试图只使用一个数组将所有设置保存到数据库中,这会导致一些问题。

问题是,保存每个子菜单页时,它只将该页中的值保存到数组中,并从之前存储的其他页中删除所有其他值,因此数组最终一次只保存一页中的值。

以下是创建页面和注册设置的函数。

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\' );
}
在add\\u settings\\u messages()和add\\u settings\\u layout中,我添加了节和字段:

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

}
以下是页面显示功能:

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
}
我可能错过了一些明显的东西,如果有任何帮助,我们将不胜感激。

2 个回复
最合适的回答,由SO网友:Bainternet 整理而成

是的,您缺少一些东西,在validate\\u options功能中,您需要:

获取所有现有选项的数组

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

SO网友:editor

“从选项数组中消失”听起来像是藏在“notoptions”数组中。用以下方式检查:

  $notoptions = wp_cache_get( \'notoptions\', \'options\' );
越变越糟,也许听听add_option 上钩看看发生了什么事。

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

结束

相关推荐

如何获取我在Add_Options_Page中为我的页眉指定的标题

我有add_options_page(\'Post Products Settings\', \'Post Products Settings\', \'administrator\', \'pp_settings\', \'pp_settings_page\'); 无论如何,我可以得到在第一个参数中指定的内容,以便在我的页眉中使用?我知道我可以硬编码,但只是好奇