Settings APIを使ってワードプレスの設定画面を作る場合、
「register_setting」関数で変数(設定値)の登録とかをしますよね?

でも、さてその変数の初期値(デフォルト値)を設定しようかな、
と思っても、これがどこで設定するのかが分からない。

register_setting関数を使う場合の初期値の設定について、調べたことのメモをご紹介。

初期値の設定

register_setting関数の日本語版関数リファレンスには
初期値に関する記述がないようです。

そこで英語版の関数リファレンスを見ると、
以下のようにより細い仕様が書かれてますね。

  • $option_group:設定のグループ名
    (settings_fields() のグループ名に同じにする)
  • $option_name:設定値の名前
  • $args:配列(以下の5つが設定できる)
    • 1)’type’
      (boolean とか integer などデータタイプの設定)
    • 2)’description’
      (データの説明)
    • 3)’sanitize_callback’
      (無害化(サニタイズ)の関数指定)
    • 4)’show_in_rest’
      (データをRESTAPIに含める必要があるかどうかの設定)
    • 5)’default’
      (get_option() で呼ばれた時の初期値の設定)

参考)【英語】 関数リファレンス/register_setting(ワードプレス公式)
参考)関数リファレンス/get_option(ワードプレス公式)

なんだ、register_setting関数で初期値の設定ができるようになってるじゃん、
ということで、
register_setting関数を使う場合の変数の初期値は、
以下の3通りぐらいで設定することになりそうです。

  • その1)register_setting の中で設定
  • その2)add_option関数を使って設定
  • その3)update_option関数を使って設定

register_setting の中で設定

まずは折角仕様で用意されているので、
register_setting関数の中で初期値を設定するパターン。

初期値は register_setting の第3引数(4行目)で
‘default’ にて指定すれば良いですね。
(get_option() で呼ばれた時の初期値の設定をしている)

add_option関数を使って設定

日本語の関数リファレンスにあるように、
第三引数にはコールバック関数の指定とするパターン。
(あとから add_option() を使って初期値を設定する)

参考)(英語)Reference / Functions / add_option()(ワードプレス公式)

add_option() は、
まだ変数(ここでは ‘ item’)に値がセットされたことがなければ
指定した値(ここでは「こんにちは」)を初期値としてセットする。

その1)との違いは、実際にデータベースに値をセットするかどうか、
ということになるのかな?

この add_option() で初期値を設定する場合では、
一度でも何か入力されて、それが(いったんすべて削除され)空文字となっても、
すでに設定値がある(長さが0の文字列がある)ということで
何も動作しないようですね。(空文字を初期値に戻したりしない)

空文字になったら初期値に戻したい、という場合には、
以下の update_option() を使うのが良さそうです。

update_option関数を使って設定

空文字になったら初期値に戻したい場合のパターン。

まず変数登録時に初期値も入れたいし、空文字になったらその初期値に戻したい、
という場合には、update_option() を使うのが良さそうです。

get_option() は 変数が 空文字列の場合には(empty:null, 空文字列、0 などの場合には)false を返すので、get_option() でます調べ、空文字だった場合には update_option() を使って、初期値(ここでは ‘こんにちは’)で値を上書きする、という感じ。

コールバック関数の指定だけでも良い理由

ちょっと参考までにですが
register_setting関数について日本語の関数リファレンスを見ると、
第三引数には初期値の設定は無く、コールバック関数の指定だけになっている。

  • $option_group:設定のグループ名
  • $option_name:オプション(設定値)の名前
  • $sanitize_callback:コールバック関数

参考)関数リファレンス/register_setting(ワードプレス公式)

関数リファレンスの元となる英語版では、
なぜか第三引数は配列で、
その中で初期値やらコールバック関数が指定できるようになってます。

参考)【英語】 関数リファレンス/register_setting(ワードプレス公式)

この第三引数について、日本語版の関数リファレンスにあるように
コールバク関数の指定だけで問題なく動作するのはどうしてだろう、
もしかして何か変な動作にならないよね、
など、余計なことを考えてかなり悩んでしまいました。(あまり詳しくないのに余計なことがつい気になってしまうのだ(悪い癖 笑))

色々調べて行き着いたのが register_setting関数が定義されているソース。
wp-includes/option.php の2265行目から)。

見た感じ、19行目から22行目で、第三引数がコールバック関数名1つの場合でも「is_callable」(関数としてコールできるかどうか調べる関数)でチェックして、
それがコールできればサニタイズ関数としてセットする、となっているようです。

参考)PHPマニュアル:is_callable

register_setting関数について日本語の関数リファレンスでは、

データのタイプとかテータの説明とかあまり必要がないものはバッサリ削って、
第三引数はコールバック関数としてだけ残している、

ということになるのかも。

そうなのか~、そうなんだ~

早期退職して海外で奮闘する JIN のメールマガジン

時間や場所に縛られず稼いだJINが教える

~ 最短最速で月収10万円を手に入れる方法 ~

苗字(必須)

隣のあの人にも、思わず教えたくなる秘密

配信停止は、いつでもできます

お預かりした情報は保護されます

迷惑メールは一切配信されませんので、ご安心くださいね