我可以使用保存选项组在不同页面上使用不同的设置部分吗?

时间:2013-10-07 作者:Radek

我注册了一个选项组,有几个不同的选项部分。每个部分都针对不同的页面。

register_setting(                       // http://codex.wordpress.org/Function_Reference/register_setting
        \'mhp_options\',                  // Options group
        \'mhp_plugin_options\',           // Database option
        \'mhp_plugin_options_validate\'   // The sanitization callback,
);

// Manage Menu section
add_settings_section(                   // http://codex.wordpress.org/Function_Reference/add_settings_section
        $mhp_manage_menu_section,   // Unique identifier for the settings section
        __(\'Manage Menu Settings\', \'mhp\'),  // Section title
        \'__return_false\',               // Section callback (we don\'t want anything)
        $mhp_manage_menu_section            // Menu slug
);
add_settings_section(                   
        $mhp_home_page_layout_settings_section,     
        __(\'Home Page Layout Settings\', \'mhp\'),     
        \'__return_false\',               
        $mhp_home_page_layout_settings_section          
);
然后每个页面都在使用

settings_fields( \'mhp_options\' ); 
do_settings_sections( $mhp_manage_menu_section);
所以另一个页面正在使用

settings_fields( \'mhp_options\' ); 
do_settings_sections( $mhp_home_page_layout_settings_section);
但在保存时,似乎只有当前节保存在选项表中。已经存在的内容将被删除。

我是否必须为每个页面创建新的选项组,或者是否有其他解决方案?

2 个回复
SO网友:Radek

解决方案是在保存选项之前合并现有选项,以防并非所有选项都显示在我们要保存的页面上。

所以在$sanitize_callback 在里面register_setting 函数,然后返回我在函数下面调用的数据,其中$existing是保存在数据库中的所有现有选项。

function merge_options( $existing,  $input ) { // Merges existing options with $input to preserve existing options

    if ( !is_array( $existing ) || !is_array( $input ) ) // something went wrong
        return $data;
    return array_merge( $existing, $input );
}

SO网友:Gerard Reches

为了补充@Radek的答案,这里有另一种使用其解决方案的方法。

public function sanitize_callback ( $options )
{
    $saved_options = $this->get_option( \'your_option_name\' );
    $options = $this->sanitize_options( $options );

    if ( is_array( $saved_options ) && is_array( $options ) )
    {
        $options = array_merge( $saved_options, $options );
    }

    return $options;
}
Thesanitize_callback 函数是在register_setting, 然后您可以使用另一个(名为sanitize_options 在我的情况下)做你的消毒。

sanitize_callback 将负责合并同一目录下的所有选项$option_name.

结束

相关推荐

在wp_Options的一个设置字段中可以存储的选项数量是否有限制?

我有一个带有选项页的主题。在这一页上有1083个选项。我注意到最后13个没有保存。它们一度保存了,但在我添加了新选项之后,它们停止了工作。我怀疑我可能遇到了某种选项限制或阵列上的限制,为了测试这一点,我删除了最后13个选项上方的7个选项,并确保在这之后保存了足够多的7个选项。我一直在试图找到有关这方面的信息,但一直无法找到。是否有人知道您在一个设置字段中只能有1070个选项?这不是数据库长文本内存限制的问题。这些是简单的1和0以及十六进制颜色值和其他CSS类型的内容。该字段的输出量仅为33k。