WordPress Logo WordPress ブログ全般の情報を取得・出力する関数

更新日:2022年03月13日

作成日:2019年01月18日

よく使う WordPress のブログ全般の情報を取得・出力する関数です。

bloginfo

サイトの情報を表示させる関数で、パラメータに指定された情報をブラウザに出力します。情報を出力せず、値を変数に代入するなど値を取得・利用する場合は get_bloginfo() を使います。

bloginfo( $show )

パラメータ
$show(string):以下のキーワードを指定できます (Optional)。初期値: name
利用可能箇所
どこでも可能
パラメータ $show のキーワード(非推奨を除く)
キーワード 説明
name(初期値) 管理画面「設定」→「一般」の「サイトのタイトル」を表示します。
description 管理画面「設定」→「一般」の「キャッチフレーズ」を表示します。
admin_email 管理画面「設定」→「一般」の「メールアドレス」を表示します。
charset 使用されている文字コードを表示します(Version 3.5.0 以降は "UTF-8" を常に返します)。
version 使用中の WordPress バージョンを表示します。
html_type HTML ページの Content-Type の値(デフォルトは "text/html") を表示します。
language WordPress の言語コード(en-US や ja など)を表示します。
atom_url Atom のアドレス(URL)を表示します。
rss2_url RSS(2.0) のアドレス(URL)を表示します。
comments_atom_url コメントの RSS(2.0) のアドレス(URL)を表示します。
comments_rss2_url コメントの Atom のアドレス(URL)を表示します。
pingback_url Pingback XML-RPC ファイルの URL (xmlrpc.php) を表示します。
head 内の meta 要素で文字コードを指定する例
<meta charset="<?php bloginfo( 'charset' ); ?>">
//以下は出力結果
<meta charset="UTF-8">
ブログのタイトルを bloginfo( 'name' ) を使って <h1> タグで囲んで表示する例
(ホームへのリンクを esc_url()home_url() で出力)
<h1><a href="<?php echo esc_url( home_url( '/' ) ); ?>"><?php bloginfo( 'name' ); ?></a></h1>

廃止及び非推奨パラメータ

以下の bloginfo() 及び get_bloginfo() 関数のパラメータは現在では非推奨または廃止になっています。そのため、代わりに「推奨されているタグ(関数)」を使用するようにします。

以下の「推奨されているタグ(関数)」は値を出力しないため、bloginfo() の代わりに使用する場合は echo を使って出力します。

非推奨パラメータ 意味 推奨されているタグ(関数)
wpurl 管理画面「設定」→「一般」の「WordPress アドレス (URL)」を表示するもの site_url()
siteurl(廃止)
home (廃止)
url
管理画面「設定」→「一般」の「サイトアドレス (URL)」を表示するもの home_url()
stylesheet_url CSS (通常 style.css) ファイルの URL get_stylesheet_uri()
stylesheet_directory アクティブなテーマディレクトリーの URL get_stylesheet_directory_uri()
template_url
template_directory
アクティブなテーマのディレクトリー URL get_template_directory_uri()
get_stylesheet_directory_uri()(子テーマの場合)

get_bloginfo

パラメータ $show で指定されたサイトに関する情報を返します。パラメータに指定する文字列(キーワード)は bloginfo() と同じです。値をそのままブラウザに出力する場合は、bloginfo() を使用します。

get_bloginfo( $show, $filter )

パラメータ
  • $show(文字列):(オプション) 取得したい情報を指すキーワード(bloginfo()を参照)。初期値: 'name'
  • $filter(文字列):(オプション) 取得した値に適用するフィルターを指定するキーワード。何も指定しない(初期値: 'raw')場合は、取得した値をそのまま返します。'display' を指定すると、取得した値を wptexturize() 関数へ渡してから(呼び出し元へ)返します。
戻り値
指定されたキーワードに対応する値(サイトの情報)の文字列(空文字の可能性もあります)。
利用可能箇所
どこでも可能

サイトに関する情報の値を変数に代入したり、加工したりする場合に使用します。デフォルトでは取得する値はエスケープ処理されていないので注意が必要です。取得した値を出力する際は、第二引数に「display」を指定するか、エスケープ処理をします。

bloginfo() は適切にエスケープ処理されて出力されます。

<?php bloginfo('name'); ?>

get_bloginfo() を使って出力する場合は、エスケープ処理をするか、

<?php echo esc_html(get_bloginfo('name')); ?>

または、第二引数に「display」を指定して出力します。

<?php echo get_bloginfo('name', 'display'); ?>

bloginfo() は、以下のように get_bloginfo() の第二引数に「display」を指定したラッパー関数として「wp-includes/general-template.php」で定義されています。

<?php
  function bloginfo( $show='' ) {
    echo get_bloginfo( $show, 'display' );
  }

以下は「設定」→「一般」の「キャッチフレーズ」が設定されていれば、その値を表示する例です。

<?php
$my_description = get_bloginfo( 'description', 'display' );
if ( $my_description ) :
?>
<p class="description"><?php echo $my_description; ?></p>
<?php endif; ?>

以下は get_bloginfo() のソースです。

各種の値を get_option() などを使って取得しています。また $filter に display を指定した場合はフィルタを通した値を返しています(115行目)。

function get_bloginfo( $show = '', $filter = 'raw' ) {
  switch ( $show ) {
    case 'home': // DEPRECATED
    case 'siteurl': // DEPRECATED
    _deprecated_argument(
      __FUNCTION__,
      '2.2.0',
      sprintf(
        /* translators: 1: 'siteurl'/'home' argument, 2: bloginfo() function name, 3: 'url' argument */
        __( 'The %1$s option is deprecated for the family of %2$s functions. Use the %3$s option instead.' ),
        '<code>' . $show . '</code>',
        '<code>bloginfo()</code>',
        '<code>url</code>'
      )
    );
    // Intentional fall-through to be handled by the 'url' case.
    case 'url':
      $output = home_url();
      break;
    case 'wpurl':
      $output = site_url();
      break;
    case 'description':
      $output = get_option( 'blogdescription' );
      break;
    case 'rdf_url':
      $output = get_feed_link( 'rdf' );
      break;
    case 'rss_url':
      $output = get_feed_link( 'rss' );
      break;
    case 'rss2_url':
      $output = get_feed_link( 'rss2' );
      break;
    case 'atom_url':
      $output = get_feed_link( 'atom' );
      break;
    case 'comments_atom_url':
      $output = get_feed_link( 'comments_atom' );
      break;
    case 'comments_rss2_url':
      $output = get_feed_link( 'comments_rss2' );
      break;
    case 'pingback_url':
      $output = site_url( 'xmlrpc.php' );
      break;
    case 'stylesheet_url':
      $output = get_stylesheet_uri();
      break;
    case 'stylesheet_directory':
      $output = get_stylesheet_directory_uri();
      break;
    case 'template_directory':
    case 'template_url':
      $output = get_template_directory_uri();
      break;
    case 'admin_email':
      $output = get_option( 'admin_email' );
      break;
    case 'charset':
      $output = get_option( 'blog_charset' );
      if ( '' == $output ) {
        $output = 'UTF-8';
      }
      break;
    case 'html_type':
      $output = get_option( 'html_type' );
      break;
    case 'version':
      global $wp_version;
      $output = $wp_version;
      break;
    case 'language':
      /* translators: Translate this to the correct language tag for your locale,
      * see https://www.w3.org/International/articles/language-tags/ for reference.
      * Do not translate into your own language.
      */
      $output = __( 'html_lang_attribute' );
      if ( 'html_lang_attribute' === $output || preg_match( '/[^a-zA-Z0-9-]/', $output ) ) {
        $output = determine_locale();
        $output = str_replace( '_', '-', $output );
      }
      break;
    case 'text_direction':
      _deprecated_argument(
        __FUNCTION__,
        '2.2.0',
        sprintf(
          /* translators: 1: 'text_direction' argument, 2: bloginfo() function name, 3: is_rtl() function name */
          __( 'The %1$s option is deprecated for the family of %2$s functions. Use the %3$s function instead.' ),
          '<code>' . $show . '</code>',
          '<code>bloginfo()</code>',
          '<code>is_rtl()</code>'
        )
      );
      if ( function_exists( 'is_rtl' ) ) {
        $output = is_rtl() ? 'rtl' : 'ltr';
      } else {
        $output = 'ltr';
      }
      break;
    case 'name':
    default:
      $output = get_option( 'blogname' );
      break;
  }

  $url = true;
  if ( strpos( $show, 'url' ) === false &&
    strpos( $show, 'directory' ) === false &&
    strpos( $show, 'home' ) === false ) {
    $url = false;
  }

  if ( 'display' == $filter ) {
    if ( $url ) {
      /**
       * Filters the URL returned by get_bloginfo().
       * @since 2.0.5
       * @param mixed $output The URL returned by bloginfo().
       * @param mixed $show   Type of information requested.
       */
      $output = apply_filters( 'bloginfo_url', $output, $show );
    } else {
      /**
       * Filters the site information returned by get_bloginfo().
       * @since 0.71
       * @param mixed $output The requested non-URL site information.
       * @param mixed $show   Type of information requested.
       */
      $output = apply_filters( 'bloginfo', $output, $show );
    }
  }

  return $output;
}

get_option

options データベーステーブルから名前を指定してオプションの値(WordPress の設定値)を取得します。

オプションは WordPress が様々な設定や構成を保存するために使用するデータの集まりで WordPress をインストールするとデフォルトで作られる項目の一部です。

これらの項目には管理画面「設定」の各設定項目で指定した値などが含まれています。それぞれの項目に設定されている値は wp_load_alloptions() などを使って確認することができます。

get_option( $option, $default )

パラメータ
  • $option(文字列):(必須) 取得するオプションの名前。小文字のみ。
  • $default(mixed):(オプション) データベースにオプションが存在しない場合のデフォルト値。初期値: false
戻り値
パラメータ $option で指定されたオプションの値。$option で指定されたオプションが設定されていない場合は、パラメータ $default の値かまたは false(初期値)。(注意) WordPress のバージョンによってオプションは異なります。
利用可能箇所
どこでも可能
有効なオプションの一部抜粋
オプション名 説明
siteurl(非推奨) Deprecated)WordPressのアドレス(管理画面「設定」-「一般設定」)
home サイトのアドレス(ブログのアドレス)(管理画面「設定」-「一般設定」)
blogname ブログタイトル(管理画面「設定」-「一般設定」)
blogdescription キャッチフレーズ(管理画面「設定」-「一般設定」)
admin_email メールアドレス(管理画面「設定」-「一般設定」)
posts_per_page 1ページ内の投稿数(管理画面「設定」-「表示設定」)
posts_per_rss RSS/Atomフィードで表示する最新の投稿数(管理画面「設定」-「表示設定」)
comments_per_page 1ページ内のコメント数(管理画面「設定」-「ディスカッション設定」)
thread_comments WordPress ネイティブのネストされたコメントを有効化するかどうか
date_format 日付フォーマット(管理画面「設定」-「一般設定」)
time_format 時刻フォーマット(管理画面「設定」-「一般設定」)
template 現在のテーマの名前
post_count 投稿数
show_on_front ホームページの表示(管理画面「設定」-「表示設定」)
page_on_front ホームページの表示>ホームページ(管理画面「設定」-「表示設定」)
page_for_posts ホームページの表示>投稿ページ(管理画面「設定」-「表示設定」)
gmt_offset タイムゾーン>UTCとの時差(管理画面「設定」-「一般設定」)
use_smilies 「整形」顔文字を画像に変換して表示(管理画面「設定」-「投稿設定」)
thumbnail_size_w 画像をアップロードする際に自動生成する「サムネイルのサイズ」の「幅」。デフォルト: 150(管理画面「設定」-「メディア」)
thumbnail_size_h 画像をアップロードする際に自動生成する「サムネイルのサイズ」の「高さ」。デフォルト: 150(管理画面「設定」-「メディア」)
thumbnail_crop サムネイルをトリミングするかどうか。1:トリミングする (デフォルト)。0:トリミングしない(管理画面「設定」-「メディア」)
medium_size_w 画像をアップロードする際に自動生成する「中サイズ」の「幅」。デフォルト: 300(管理画面「設定」-「メディア」)
medium_size_h 画像をアップロードする際に自動生成する「中サイズ」の「高さ」。デフォルト: 300(管理画面「設定」-「メディア」)
large_size_w 画像をアップロードする際に自動生成する「大サイズ」の「幅」。デフォルト: 1024(管理画面「設定」-「メディア」)
large_size_h 画像をアップロードする際に自動生成する「大サイズ」の「高さ」。デフォルト: 1024(管理画面「設定」-「メディア」)
medium_large_size_w 画像をアップロードする際に自動生成する「medium_large サイズ(レスポンシブ画像)」の「幅」。デフォルト: 768(WordPress 4.4 から)

オプションのリストは、オプション設定リファレンスにあります。また、インストールしたプラグインにより、多くのオプションが利用可能な場合があります。

<?php 
//存在しないオプション名を指定(第二引数なし)
  $no_exists_value = get_option( 'no_exists_value' );
  var_dump( $no_exists_value ); 
//真偽値 false が出力
//出力結果:bool(false)

//存在しないオプション名を指定(第二引数に「default_value」と言うデフォルト値を指定)
  $no_exists_value = get_option( 'no_exists_value', 'default_value' );
  var_dump( $no_exists_value ); 
//指定したデフォルト値「default_value」が出力
//出力結果:string(13) "default_value"
?>

以下は get_option() のソースです。

function get_option( $option, $default = false ) {
  global $wpdb;

  $option = trim( $option );
  if ( empty( $option ) ) {
    return false;
  }

  /**
   * Filters the value of an existing option before it is retrieved.
   */
  $pre = apply_filters( "pre_option_{$option}", false, $option, $default );

  if ( false !== $pre ) {
    return $pre;
  }

  if ( defined( 'WP_SETUP_CONFIG' ) ) {
    return false;
  }

  // Distinguish between `false` as a default, and not passing one.
  $passed_default = func_num_args() > 1;

  if ( ! wp_installing() ) {
    // prevent non-existent options from triggering multiple queries
    $notoptions = wp_cache_get( 'notoptions', 'options' );
    if ( isset( $notoptions[ $option ] ) ) {
      /**
       * Filters the default value for an option.
       */
      return apply_filters( "default_option_{$option}", $default, $option, $passed_default );
    }

    $alloptions = wp_load_alloptions();

    if ( isset( $alloptions[ $option ] ) ) {
      $value = $alloptions[ $option ];
    } else {
      $value = wp_cache_get( $option, 'options' );

      if ( false === $value ) {
        $row = $wpdb->get_row( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = %s LIMIT 1", $option ) );

        // Has to be get_row instead of get_var because of funkiness with 0, false, null values
        if ( is_object( $row ) ) {
          $value = $row->option_value;
          wp_cache_add( $option, $value, 'options' );
        } else { // option does not exist, so we must cache its non-existence
          if ( ! is_array( $notoptions ) ) {
            $notoptions = array();
          }
          $notoptions[ $option ] = true;
          wp_cache_set( 'notoptions', $notoptions, 'options' );

          /** This filter is documented in wp-includes/option.php */
          return apply_filters( "default_option_{$option}", $default, $option, $passed_default );
        }
      }
    }
  } else {
    $suppress = $wpdb->suppress_errors();
    $row      = $wpdb->get_row( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = %s LIMIT 1", $option ) );
    $wpdb->suppress_errors( $suppress );
    if ( is_object( $row ) ) {
      $value = $row->option_value;
    } else {
      /** This filter is documented in wp-includes/option.php */
      return apply_filters( "default_option_{$option}", $default, $option, $passed_default );
    }
  }

  // If home is not set use siteurl.
  if ( 'home' == $option && '' == $value ) {
    return get_option( 'siteurl' );
  }

  if ( in_array( $option, array( 'siteurl', 'home', 'category_base', 'tag_base' ) ) ) {
    $value = untrailingslashit( $value );
  }

  /**
   * Filters the value of an existing option.
   */
  return apply_filters( "option_{$option}", maybe_unserialize( $value ), $option );
}

get_blog_option

マルチサイトで子ブログや親ブログなど特定のブログの情報を取得します。(WordPress がマルチサイトとしてインストールされている場合のみ)

get_blog_option( $blog_id, $option, $default )

パラメータ
  • $blog_id (int) :(必須)サイトのID(整数値)。マルチサイトの場合、追加されたサイトには追加順にIDが付与され、WordPressのインストールと同時に作成されたメインのサイトのIDは「1」で、追加されたサイトは順に「2」以降のIDが付与されます。
  • $option (string):(必須)取得するオプションの名前。(get_option と同じ)
  • $default (mixed) :(オプション)オプションが存在しない場合のデフォルト値。初期値: false
戻り値
パラメータ $option で指定されたオプションの値。$option で指定されたオプションが設定されていない場合は、パラメータ $default の値かまたは false(初期値)。
//サイトID が「1」のサイトのタイトルを出力
<?php echo get_blog_option(1, 'blogname'); ?> 

サイトID の取得方法

以下は変数 $mysiteid にサイトIDを格納する4つの例です(get_id_from_blogname 参照)。

$mysiteid = $GLOBALS["blog_id"];
global $blog_id; $mysiteid = $blog_id;
global $wpdb; $mysiteid = $wpdb->blogid;
global $current_blog; $mysiteid = $current_blog->blog_id;

get_id_from_blogname

サイトのスラッグ名からサイトの ID を取得します。(マルチサイト用)

get_id_from_blogname( $slug )

パラメータ
$slug(string):スラッグ名(サブドメイン名またはディレクトリ名)
戻り値
サイトID(int→文字列?)
利用可能箇所

以下は、get_permalink() でそのページの URL を取得して、PHP の basename() でスラッグを取得し、サイトID を取得する例です。basename() の代わりに、wp_basename() でも同じです。

$site_id = get_id_from_blogname(basename(get_permalink()));

wp_load_alloptions

全てのオプション情報を取得します。取得した結果はキャッシュされます。

wp_load_alloptions()

パラメータ
なし
戻り値
取得可能な全てのオプションのリスト(連想配列)
利用可能箇所
どこでも

以下はこの関数で取得した結果を var_dump() で確認する例です。

<pre><?php var_dump(wp_load_alloptions()); ?></pre>

以下は上記の出力結果の一部抜粋です。

array(131) {
  ["siteurl"]=>string(20) "http://localhost/xxxx"
  ["home"]=>string(20) "http://localhost/xxxx"
  ["blogname"]=>string(3) "xxxx"
  ["blogdescription"]=>string(27) "Just another WordPress site"
  ["users_can_register"]=>string(1) "0"
  ["admin_email"]=>string(25) "xxxx@xxxx.com"
  ["start_of_week"]=>string(1) "1"
  ["use_balanceTags"]=>string(1) "0"
  ["use_smilies"]=>string(1) "1"
  ・・・
  ["default_category"]=>string(1) "1"
  ["default_comment_status"]=>string(6) "closed"
  ["default_ping_status"]=>string(6) "closed"
  ["default_pingback_flag"]=>string(0) ""
  ["posts_per_page"]=>string(2) "10"
  ["date_format"]=>string(12) "Y年n月j日"
  ["time_format"]=>string(5) "g:i A"
  ["links_updated_date_format"]=>string(18) "Y年n月j日 g:i A"
  ["comment_moderation"]=>string(0) ""
  ["moderation_notify"]=>string(1) "1"
  ["permalink_structure"]=>string(23) "/%category%/%postname%/"
  ["rewrite_rules"]=>string(16880) "a:170:{s:11:"^wp-json/?$";s:22:"index.php?rest_route=/";s:14:"^wp-json/(.*)?";"
  ・・・
  ["blog_charset"]=>string(5) "UTF-8"
  ["active_plugins"]=>string(143) "a:3:{i:0;s:19:"akismet/akismet.php";i:1;s:41:"block-unit-test/class-block-unit-test.php";i:3;s:41:"wp-multibyte-patch/wp-multibyte-patch.php";}"
  ["category_base"]=>string(0) ""
  ["ping_sites"]=>string(26) "http://rpc.pingomatic.com/"
  ["comment_max_links"]=>string(1) "2"
  ["gmt_offset"]=>string(1) "0"
  ["default_email_category"]=>string(1) "1"
  ["template"]=>string(8) "sample02"
  ["stylesheet"]=>string(8) "sample02"
  ["comment_whitelist"]=>string(1) "1"
  ["comment_registration"]=>string(0) ""
  ["html_type"]=>string(9) "text/html"
  ["use_trackback"]=>string(1) "0"
  ・・・
  ["default_link_category"]=>string(1) "2"
  ["show_on_front"]=>string(5) "posts"
  ["tag_base"]=>string(0) ""
  ["show_avatars"]=>string(1) "1"
  ["avatar_rating"]=>string(1) "G"
  ["upload_url_path"]=>string(0) ""
  ["thumbnail_size_w"]=>string(3) "150"
  ["thumbnail_size_h"]=>string(3) "150"
  ["thumbnail_crop"]=>tring(1) "1"
  ["medium_size_w"]=>string(3) "300"
  ["medium_size_h"]=>string(3) "300"
  ["avatar_default"]=>string(7) "mystery"
  ["large_size_w"]=>string(4) "1024"
  ["large_size_h"]=>string(4) "1024"
  ["image_default_link_type"]=>string(4) "none"
  ["image_default_size"]=>string(0) ""
  ["image_default_align"]=>string(0) ""
  ・・・
  ["category_children"]=>string(6) "a:0:{}"
}

以下は wp_load_alloptions() のソースです。

function wp_load_alloptions() {
  global $wpdb;

  if ( ! wp_installing() || ! is_multisite() ) {
    $alloptions = wp_cache_get( 'alloptions', 'options' );
  } else {
    $alloptions = false;
  }

  if ( ! $alloptions ) {
    $suppress = $wpdb->suppress_errors();
    if ( ! $alloptions_db = $wpdb->get_results( "SELECT option_name, option_value FROM $wpdb->options WHERE autoload = 'yes'" ) ) {
      $alloptions_db = $wpdb->get_results( "SELECT option_name, option_value FROM $wpdb->options" );
    }
    $wpdb->suppress_errors( $suppress );

    $alloptions = array();
    foreach ( (array) $alloptions_db as $o ) {
      $alloptions[ $o->option_name ] = $o->option_value;
    }

    if ( ! wp_installing() || ! is_multisite() ) {
      /**
      * Filters all options before caching them.
      * @since 4.9.0
      * @param array $alloptions Array with all options.
      */
      $alloptions = apply_filters( 'pre_cache_alloptions', $alloptions );
      wp_cache_add( 'alloptions', $alloptions, 'options' );
    }
  }

  /**
   * Filters all options after retrieving them.
   * @since 4.9.0
   * @param array $alloptions Array with all options.
   */
  return apply_filters( 'alloptions', $alloptions );
}

update_option

サイトのオプションの値を更新します。

オプションの名前を指定して options データベーステーブルの値(WordPress の設定値)を更新します。

指定したオプションが存在しない場合は、add_option() でオプションを追加します。

update_option( $option, $new_value, $autoload )

パラメータ
  • $option(文字列):(必須)更新するオプションの名前(オプション設定リファレンス参照)。
  • $new_value(mixed):(必須)オプションの値
  • $autoload(文字列|真偽値):(オプション)WordPress を開始する際にオプションをロードするかどうか。指定できる値は'yes'または true(自動的にロード)か 'no'または false(自動的にロードされない)。存在しないオプションのデフォルト値は'yes'(存在しないオプションを指定した場合は、そのオプションと値が追加されます)。初期値:null
戻り値
更新された場合は true、更新に失敗した場合は false。

以下は画像をアップロードする際に自動生成する「medium_large サイズ(レスポンシブ画像)」の「幅」を0に設定して、自動生成させないようにする例です。

update_option('medium_large_size_w',0);

以下は update_option() のソースです。

function update_option( $option, $value, $autoload = null ) {
  global $wpdb;

  $option = trim( $option );
  if ( empty( $option ) ) {
    return false;
  }

  wp_protect_special_option( $option );

  if ( is_object( $value ) ) {
    $value = clone $value;
  }

  $value     = sanitize_option( $option, $value );
  $old_value = get_option( $option );

  /**
   * Filters a specific option before its value is (maybe) serialized and updated.
   */
  $value = apply_filters( "pre_update_option_{$option}", $value, $old_value, $option );

  /**
   * Filters an option before its value is (maybe) serialized and updated.
   */
  $value = apply_filters( 'pre_update_option', $value, $option, $old_value );

  /*
   * If the new and old values are the same, no need to update.
   */
  if ( $value === $old_value || maybe_serialize( $value ) === maybe_serialize( $old_value ) ) {
    return false;
  }

  /** This filter is documented in wp-includes/option.php */
  if ( apply_filters( "default_option_{$option}", false, $option, false ) === $old_value ) {
    // Default setting for new options is 'yes'.
    if ( null === $autoload ) {
      $autoload = 'yes';
    }

    return add_option( $option, $value, '', $autoload );
  }

  $serialized_value = maybe_serialize( $value );

  /**
   * Fires immediately before an option value is updated.
   */
  do_action( 'update_option', $option, $old_value, $value );

  $update_args = array(
    'option_value' => $serialized_value,
  );

  if ( null !== $autoload ) {
    $update_args['autoload'] = ( 'no' === $autoload || false === $autoload ) ? 'no' : 'yes';
  }

  $result = $wpdb->update( $wpdb->options, $update_args, array( 'option_name' => $option ) );
  if ( ! $result ) {
    return false;
  }

  $notoptions = wp_cache_get( 'notoptions', 'options' );
  if ( is_array( $notoptions ) && isset( $notoptions[ $option ] ) ) {
    unset( $notoptions[ $option ] );
    wp_cache_set( 'notoptions', $notoptions, 'options' );
  }

  if ( ! wp_installing() ) {
    $alloptions = wp_load_alloptions();
    if ( isset( $alloptions[ $option ] ) ) {
      $alloptions[ $option ] = $serialized_value;
      wp_cache_set( 'alloptions', $alloptions, 'options' );
    } else {
      wp_cache_set( $option, $serialized_value, 'options' );
    }
  }

  /**
   * Fires after the value of a specific option has been successfully updated.
   */
  do_action( "update_option_{$option}", $old_value, $value, $option );

  /**
   * Fires after the value of an option has been successfully updated.
   */
  do_action( 'updated_option', $option, $old_value, $value );
  return true;
}