如何设置主题中选项的默认值?

时间:2011-09-20 作者:Zhianc

$shortname = "nuod";

array( "name" => "Custom Logo URL",
    "desc" => "Enter the link to your site\'s custom logo.",
    "id" => $shortname."_logo",
    "type" => "text",
    "std" => "newlogo.png")
如何将std自动设置为<?php echo get_option(\'nuod_logo\'); ?>

2 个回复
SO网友:Stephen Harris

正如@Ashfame已经指出的那样,您不应该在数据库中存储默认值-这应该是用户选择的选项(当然,如果他们选择默认值,那么很好-存储它们:)。

但是,您不需要使用wp_parse_args() 任何一个get_option 允许您选择默认值。例如:

//If nuod_logo is not found, uses \'newlogo.pnp\'
$number = get_option(\'nuod_logo\', \'newlogo.png\') 
然而,主题和插件通常(应该)将其选项保存在一个数组中,该数组存储在数据库的一行中。所以

$my_plugin_options = get_option(\'my_plugins_options\') 
应返回所有选项。因此,您可以将所有选项保留在默认数组中$my_plugin_defaults:

$my_plugin_options = get_option(\'my_plugins_options\',$my_plugin_defaults) 
但这也不太好-你必须重新申报$my_plugin_defaults 这就是简单地复制代码,为bug腾出空间,丑陋-或者你把它变成一个全局变量,这完全是错误的。解决方案是创建自己的\'get_option\' 基于WordPress的设置API:

 function wpse28954_get_option( $option_name=\'\' ){

      $defaults = array(
          // Array of defaults: option => default value 
      )
      $options = get_option(\'my_plugins_options\',$defaults);

      //Parse defaults again - see comments
      $options = wp_parse_args( $options, $defaults );

      if( !isset($options[$option_name]) )
           return false;

      return $options[$option_name];

 }
这可以通过允许wpse28954_get_option 如果不在定义的默认值中,则设置默认值

现在,您的默认值存储在一个易于管理的地方,您可以使用wpse28954_get_option[\'my-option\'] 返回保存的设置或默认值。

编辑为@Ashfame 在评论中指出wp_parse_args 具有为未保存的选项子集提供默认值的优点。我已经更新了我的答案,将其包括在内。(这使得$defaults 在里面get_option 相当多余)+1用于@Ashfame\'第一个建议使用的解决方案wp_parse_args.

SO网友:Ashfame

这一点很重要,但大多数人都没有正确理解。不要将默认值保存在数据库中。您应该使用wp_parse_args() 为此目的。

$defaults = array (
    \'logo\' => \'http://domain.com/logo.png\',
    \'do_extra_thing\' => false
);

// Parse incomming $args into an array and merge it with $defaults
$options = wp_parse_args( $options, $defaults );
何时$options 是空的,就像您刚刚安装了一个插件一样,它可以在不在数据库中写入任何内容的情况下工作。当其中包含一些值时,缺少的值将来自$defaults 大堆

结束

相关推荐

当我试图停用任何插件时,它会给出错误“WARNING:CALL_USER_FUNC_ARRAY()[Function.Call-User-Func-ARRAY]”

当我尝试取消激活任何插件时,它会出错。如何解决这个问题?插件被取消激活,但单击按钮“Deactivate”时,我收到此错误。警告:call\\u user\\u func\\u array()[函数.call user func array]:第一个参数应该是有效的回调,“youtuber\\u uninstall”在/home/username/public\\u html/wp includes/plugin中给出。php在线395**