【使うことがあったので】WordPressでウィジェットの設定を保存している箇所を調べてどんな形で格納されているのか確認しました

WordPressのウィジェット機能って、便利ですよねぇ。

ドラッグ&ドロップで設置も感覚的にできますし、ウィジェット同士の並べ替えも、らくらくですね。

と、そのウィジェット機能を使われている方もとても多いと思いますけども、ウィジェットで設定した値(ウィジェットのタイトルとか)は、どの場所に格納(保存)されているかというと、WordPressのデータベースにある「options」テーブル内に格納されています。(※WordPressインストール時に接頭辞を「xxx_」と設定しているなら「xxx_options」テーブルに格納されている、みたいになりますね)

文字だけだとよくわからないので、具体的に見ましょう

例えば、下のようなカレンダーウィジェットの「タイトル」を保存します。

すると、「options」テーブルには、下のようなレコードが追加されます。

オプション名を指す「option_name」は「widget_calendar」が入っています。この格納ルールは、ウィジェットの頭に「widget_」が付くイメージですかね。他の「アーカイブ」や「検索」ウィジェットなどでも確認をしましたが、そんな感じでした。私の作ったウィジェットプラグイン「Newpost Catch」も、「widget_newpostcatch」です。これって変更できるんですかね。なんとなく調べてはいます。

と、データの格納ルールについてさらに理解を深める場合は、フォーラムの「サイドバーのウィジェットについて」が参考になります。部分的に引用いたしますと、

ウィジェットのデータは、データベースのoptionsテーブルにシリアライズ化されて保存されています。シリアライズ化というのは、配列のデータを一定の規則によって、文字列化するという意味です。

データベースでは、配列のデータをそのまま保存することができないため、このようにシリアライズ化して保存するケースがあります。

まああれですかね、「ケースがあります」ということは、いろいろありますってことでしょうね。

おまけ:配列のデータを見ましょう

get_optionで「widget_calendar」の情報を取得して、var_dump関数で詳細を見るとこんな感じでした。

array(2) { [2]=> array(3) { ["title"]=> string(15) "カレンダー" ["dw_include"]=> int(0) ["other_ids"]=> string(0) "" } ["_multiwidget"]=> int(1) }

(dw_includeは、display-widgetsプラグインを入れているので作成されたんだろうと思います)

なるほど~って感じですね。この配列のデータが、シリアライズ化されて格納されるんですねぇ。

まとめ

今、私が作ったウィジェットプラグイン「Newpost Catch」に機能追加をしている最中でして、「ウィジェットのデータはどの場所に、どういう形で格納されているのか」知りたかったのでメモ書きました。これがわかると、ウィジェットの設定データをもとにして、例えば条件分岐させたりできますね。私にとってはとても重要な情報でした><

著者:bouya Imamura