GET_OPTION数组值的默认值和最佳做法

时间:2020-04-11 作者:Arg Geo

我有一个自定义选项页。我有几个部分的设置,其中一些设置之间的关系更为密切,所以我决定将它们存储在数组中,这对我来说更符合逻辑。当然,它也将代码最小化了一点。第一个问题:这是一个好的做法吗?

示例:

get_option(\'header\')[\'header_logo\'][\'image\'];
get_option(\'header\')[\'header_logo\'][\'width\'];
get_option(\'header\')[\'header_logo\'][\'height\'];
get_option(\'header\')[\'header_color\'];
这将生成一个包含不同级别的嵌套数组的数组。如果我们使用get_option(\'header\'); 通常,我们可以使用get_option(\'header\', \'default value\'); 如果未设置该选项,则回显默认值。如何对数组ex中的值执行此操作。get_option(\'header\')[\'header_logo\']; 对于get_option(\'header\')[\'header_logo\'][\'image\'];? 另外,如何一次对整个数组中的所有项执行此操作?

第二个问题:在设置默认选项值时,哪一个是最佳实践?我应该使用update_option 中的函数after_theme_setup 函数设置默认值?有没有更好的办法?

提前谢谢。

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

第一个问题:这是一个好的做法吗

根据要保存的值的类型,将数组作为设置值绝对是一种好的做法。

如何对数组ex中的值执行此操作。get_option(\'header\')[\'header_logo\'][\'image\']?如果您认为header 可能为空或未保存,您可以使用此-

get_option( 
  \'header\', 
  array( 
    \'header_logo\' => array(
      \'image\' => \'.../default-image.png\',
      \'width\' => \'200\',
      \'height\' => \'60\'
    )
  )
)[\'header_logo\'][\'image\']
但是,如果选项header 包含任何值(即使是空数组),则上述选项不会覆盖默认值。在这种情况下,您可以为get_option 作用

function wpse_get_header_settings( $group = \'\', $key = \'\', $default = null ) {

  $settings = get_option( \'header\' );

  $defaults = array( 
    \'header_logo\' => array(
      \'image\' => \'.../default-image.png\',
      \'width\' => \'200\',
      \'height\' => \'60\'
    )
  );

  $settings = wp_parse_args( $settings, $defaults );

  if ( ! empty( $group ) ) {
    if ( ! array_key_exists( $group, $settings ) ) {
      return $default;
    }

    $settings = $settings[ $group ];

    if ( ! empty( $key ) ) {
      return array_key_exists( $key, $settings ) ? $settings[ $key ] : $default;
    }
  }

  return $settings;
}
然后,您可以安全地获得任何所需的值-

// would return the logo image
echo wpse_get_header_settings( \'header_logo\', \'image\' );

// would return the header text color
wpse_get_header_settings( \'header_color\' );
<在设置默认选项值时,哪种做法是最佳做法最好使用after_theme_setup 对于主题和register_activation_hook 对于插件。但是,如果使用包装器函数调用设置,则不应保存它。

相关推荐

将选项添加到“Menus”编辑器的“Screen Options”部分

我正在开发一个向WordPress菜单编辑器添加自定义选项的系统,我想将其与屏幕选项面板集成。在我的研究中,我找不到任何关于修改现有屏幕选项菜单的内容;这可能吗?请参见下面的屏幕截图,以更好地了解我要实现的目标。外观>菜单上的默认“屏幕选项”:外观>菜单上的目标“屏幕选项”: