如何设置插件的默认值?

时间:2011-08-16 作者:redconservatory

为插件设置默认值的最佳方法是什么?我是否应该将这些值插入wp\\U选项表?

和如果这是最好的方式,我还有一个问题。“我的选项”列为一个组,当前看起来像:

a: 4:{s:26:“nc\\U location\\u drop\\u down\\u zoom”;s:2:“14”;s:17:“nc\\U location\\u width”;s:3:“200”;s:29:“nc\\U location\\u drop\\u down\\u maptype”;s:7:“路线图”;s:11:“text\\u string”;s:0:;}

这是序列化数组吗?如何向表中插入这样的内容?(我意识到这更像是一个sql问题……)

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

使用Settings API 并将数据保存在单个选项中作为数组,WordPress将为您序列化数据。

SO网友:Otto

您应该在提取数据时执行默认设置。切勿将默认值插入数据库。默认值为默认值。DB中的选项替代默认值。

如何为序列化选项数组执行默认设置:

$defaults = array(
  \'default1\' => \'1\',
  \'default2\' => \'2\',
);
$options = wp_parse_args(get_option(\'plugin_options\'), $defaults);

SO网友:Max Yudin

除了奥托的回答之外。

如果您有多维选项数组,但仍希望它与默认值数组合并,请使用以下函数代替wp_parse_args():

<?php
function meks_wp_parse_args( &$a, $b ) {
    $a = (array) $a;
    $b = (array) $b;
    $result = $b;
    foreach ( $a as $k => &$v ) {
        if ( is_array( $v ) && isset( $result[ $k ] ) ) {
            $result[ $k ] = meks_wp_parse_args( $v, $result[ $k ] );
        } else {
            $result[ $k ] = $v;
        }
    }
    return $result;
}
例如,

<?php
$defaults = array(
    \'setting-1\' => array(
        \'option-1\' => 1,
        \'option-2\' => 0,
    ),
    \'setting-2\' => 1
);

// Only variables are passed to the function by reference (Strict Standards warning)
$options = get_option(\'plugin_options\');
$options = meks_wp_parse_args($options, $defaults);
找到递归函数here.

SO网友:Remzi Cavdar

使用add\\u选项。如果您使用add\\u选项,现有选项将不会更新,并会执行检查以确保您没有添加受保护的WordPress选项。

看见add_option at developer.wordpress.org

// Activation
function name_plugin_activation(){
    do_action( \'name_plugin_default_options\' );
}
register_activation_hook( __FILE__, \'name_plugin_activation\' );


// Set default values here
function name_plugin_default_values(){

    // Form settings
    add_option(\'name_form_to\', \'[email protected]\');
    add_option(\'name_form_subject\', \'New\');


}
add_action( \'name_plugin_default_options\', \'name_plugin_default_values\' );

结束

相关推荐

Wp_Options与新表的效率

我正在构建一个WordPress主题框架,随着开发的进展,它可能会有很多选项。我发现了一个相关的问题:When is it appropriate to create a new table in the WordPress database?, 这表明新表的效率会更高,但我想知道更多。有道理的是,如果对1000个条目使用新表更快,那么对数十个或数百个条目也必须更快。此外,wp\\U选项表可能变得非常混乱。这两个选项在查询执行时间、内存使用和其他因素方面有什么区别?