当前浏览:首页 / WordPress函数 / get_option()

get_option( string $option, mixed $default = false )

基于选项名称检索选项值

option 选项more...


描述

如果该选项不存在,并且未提供默认值,则返回布尔值false。这可以用来检查在安装插件期间是否需要初始化选项,但是使用add_option()可以更好地完成这项工作,因为它不会覆盖现有选项。

不初始化选项并使用布尔false作为返回值是一种不好的做法,因为它会触发额外的数据库查询。

返回值的类型可以不同于保存或更新选项时传递的类型。如果选项值已序列化,则返回时将取消序列化。在这种情况下,类型将相同。例如,像数组一样存储非标量值将返回相同的数组。

在大多数情况下,非字符串标量值和null值将被转换并作为等值字符串返回。

例外情况:

  1. 当该选项没有被保存在数据库中时,如果提供了 $default 值则返回它,如果没有则返回 false
  2. 当使用这些选项API过滤器之一:‘pre_option_$option’, ‘default_option_$option’, 或 ‘option_$option’,返回的值可能不符合预期的类型。
  3. 当选项刚刚被保存在数据库中,紧接着使用 get_option() 时,非字符串标量和null值不会被转换为字符串等值,而是返回原始类型。

示例:

当添加如下选项:add_option( 'my_option_name', 'value' )并用get_option( 'my_option_name' )检索它们时,返回的值将为:

  • false returns string(0) ""
  • true returns string(1) "1"
  • 0 returns string(1) "0"
  • 1 returns string(1) "1"
  • '0' returns string(1) "0"
  • '1' returns string(1) "1"
  • null returns string(0) ""

当添加具有非标量值(如add_option( 'my_array', array( false, 'str', null ) ))的选项时,返回的值将与原始值相同,因为它在保存到数据库中之前已序列化:

array(3) {
    [0] => bool(false)
    [1] => string(3) "str"
    [2] => NULL
}

参数

$option

(string) (必填) 要检索的选项的名称。预期不会被SQL转义。

$default

(mixed) (可选) 如果选项不存在,默认返回的值。

默认值: false


返回

(mixed) 该选项的值。任何类型的值都可以被返回,包括标量(字符串、布尔值、浮动值、整数)、null、数组、对象。标量值和null值将以字符串形式返回,只要它们来自于数据库存储的选项值。如果数据库中没有选项,将返回布尔值 false


说明

下面是常用选项的简明列表,在选项参考中可以找到更完整的选项。

  • 'admin_email' – 博客管理员 E-mail 地址
  • 'blogname' – 博客标题;在常规选项中设置。
  • 'blogdescription' – 你的博客的标语;在常规选项中设置。
  • 'blog_charset' – 你博客的字符编码;在阅读选项中设置。
  • 'date_format' – 默认日期格式;在常规选项中设置。
  • 'default_category' – 默认文章类别;在撰写选项中设置。
  • 'home' – 博客的主页网址;在常规选项中设置。
  • 'siteurl' – WordPress网址;在常规选项中设置。
    警告: 这与 get_bloginfo( 'url' ) 不一样 (后者会返回主页的url), 而与 get_bloginfo( 'wpurl' ) 一样
  • 'template' – 当前主题的名称;在外观中设置。
  • 'start_of_week' – 以星期几作为日历每周的始于;在常规选项中设置。
  • 'upload_path' – 默认上传位置;在其他选项中设置。
  • 'users_can_register' – 用户是否可以注册;在常规选项中设置。
  • 'posts_per_page' – 页面上显示的最大文章数;在阅读选项中设置。
  • 'posts_per_rss' – 在聚合feed中显示的最新文章的最大数量;在阅读选项中设置。

还有更多可用的选项,其中很大一部分取决于您安装了哪些插件。



源码

查看源码 官方文档


更新日志

版本描述
1.5.0开始引入

使用示例

  • 示例1

    处理不存在的选项

    $no_exists_value = get_option( 'no_exists_value' );
    var_dump( $no_exists_value ); /* outputs false */
    
    $no_exists_value = get_option( 'no_exists_value', 'default_value' );
    var_dump( $no_exists_value ); /* outputs 'default_value' */
    
  • 示例2

    显示博客标题
    <h1>标签中显示您的博客标题。

    <h1><?php echo get_option( 'blogname' ); ?></h1>
    
  • 示例3

    get_option()输出可过滤的快速提示:

    return apply_filters( "option_{$option}", maybe_unserialize( $value ), $option );

    因此,您可以在运行时更改get_option()的输出。

     //Outputs an array of all plugins
     var_dump( get_option('active_plugins') );
    
     add_filter( 'option_active_plugins', function( $plugins ){
    	return [];
    });
    
    //Outputs an empty array
    var_dump( get_option('active_plugins') );
    

    有助于在需要时禁用特定插件。

  • 示例4

    显示字符集
    显示您的博客正在使用的字符集(例如:UTF-8)

    <p><?php echo esc_html( sprintf( __( 'Character set: %s', 'textdomain' ), get_option( 'blog_charset' ) ) ); ?></p>
    
  • 示例5

    检索管理员电子邮件
    检索博客管理员的电子邮件,将其存储在变量中。

    <?php $admin_email = get_option( 'admin_email' ); ?>
    
  • 示例6

    检查选项是否设置为避免警告
    当插件选项页上未选中复选框时,会收到非法偏移警告
    在checked()中添加isset()可以解决所有问题。

    function comment_author_url_render() {
    
    	$options = get_option( 'plugin_settings' );
    	?>
    	<input type='checkbox' name='plugin_settings[setting]' <?php checked( isset( $options['setting'] ) ); ?> value='1'>
    	
    	<?php
    
    }

    希望这对其他人有所帮助。

  • 示例7

    就像我们使用

    get_option('date_format')

    得到在 设置->常规 中定义的日期格式,

    我们也可以使用

    get_option('time_format')

    得到在 设置->常规 中定义的时间格式,

    例如

    <?php the_time(get_option('date_format')); ?>
    <?php the_time(get_option('time_format')); ?>
  • 示例8

    有一种“long-hand”格式用于在一行中创建选项设置字段参数,该格式在语义上更难读取/遵循,但为选项设置提供单个字符串,而不是每个选项提供两个字符串。

    $wpdevref_text_2 = esc_attr( get_option( 'wpdevref_options' )['wpdevref_text_field_2'] );

    以上返回false,因此从技术上讲,除非您需要一个值,否则设置没有默认值
    而且,只是在参数解析方面比

    $options = get_option('wpdevref_options'); 
    $wpdevref_text_2 = (empty($options['wpdevref_text_2'] )) 
                     ? 'Default Text' : $options['wpdevref_text_2']; 

    或者(如果需要默认设置):

    $wpdevref_text_2 = (empty( get_option( 'wpdevref_options' )['wpdevref_text_field_2']) )
                     ? 'Default Text' : get_option( 'wpdevref_options' )['wpdevref_text_field_2'];

    对于设置数组中的复选框,请尝试:

    'value'   => get_option('wpdevref_fields')['wpdevref_dashnews_widgetcheck'],
    'checked' => esc_attr( checked( 1, 
                 get_option('wpdevref_fields')['wpdevref_dashnews_widgetcheck'], false ) );
  • 示例9

    这有助于为多个选项指定默认值:

    /**
     * Retrieves multiple options values as an associative array based on an option name.
     * @param string $option_name (Required) Name of option to retrieve.
     * @param array $defaults (Optional) Default values to return if the option does not exist.
     */
    function wporg_prfex_get_theme_option( $option_name, $defaults = array() ) {
      $options = get_option( $option_name );
      //checking if options exists
      if ( ! empty( $options ) ) {
        $it = new MultipleIterator();
        $it->attachIterator( new ArrayIterator( $options ) );
        $it->attachIterator( new ArrayIterator( $defaults ) );
    
        foreach ( $it as $setting_name => $value ) {
          if ( empty( $value[0] ) ) {
            $optionsArray[ $setting_name[1] ] = $value[1];
          } else {
            $optionsArray[ $setting_name[0] ] = $value[0];
          }
        }// end loop
        return $optionsArray;
      } else {
        // if no options then set the defaults
        $optionsArray = $defaults;
        return $optionsArray;
      }
    }
    

    用法如下:

    $defaults = array(
          'settings_name1' => 'rgba(255, 0, 0, 0.7)',
          'settings_name1' => 'rgba(31, 200, 219, 0.7)',
          'settings_name1' => 'rgba(44, 181, 232, 0.7)'
        );
    $colors = wporg_prfex_get_theme_option( 'option_name', $defaults );

    显示选项:

    echo $colors['settings_name1'];
  • 示例10

    检查选项值集与否的简单方法。

    例如,我在用户站点上安装了一个插件版本1.0。插件版本在插件激活时设置。如果我发布了一个新的插件版本2.0,需要检查安装的插件版本和新版本更新上的应用更改。

    为此,您需要在函数中设置默认值:

    get_option( 'key_name', 'default_value' )

    所以,若选项值未设置或可用,则会比分配给变量的默认值更高。

    示例代码:

    $my_plugin_version = get_option('plugin_name_version', '2.0');
    if($my_plugin_version == '1.0') {
    	// do something or apply changes and update the plugin version into option value
    } else {
    	// do nothing
    }
    
  • 示例11

    对于图片的使用,包括在子主题文件夹中的默认图片,命名为default.png,以及在使用定制器添加图片时的选项。
    $image = get_option( 'genesis-customizer-image', sprintf( '%s/default.png', get_stylesheet_directory_uri() ) );

  • 示例12

    检查选项是否存在,使用isset检查如果值存在,则显示复选框,如果没有选项,则显示未选中框

    $checkbox = get_option('options');
    
        if ( isset( $checkbox['check_box'] ) ) {
            echo 'value exists- so return checked box ';
        } else {
            echo ' no value  - so return unchecked box ';
        }