wordpressで作成されるデータベースのwp_optionsというテーブルを触ったのでメモします。
ここに保存されるのは
・管理画面>設定の設定情報
・wordpress全体の設定情報
・テーマ、プラグインがここに設定情報を保存することもあります。
特徴として他のテーブルはテーブル同士紐づいたりするのに対して
このoptionsテーブルは唯一独立しているという特徴があります。
#抽出
今回、管理画面>表示設定で設定するfrontpageの登録状況を確認したくて
以下のコマンドを実行しました。
MariaDB [ebdb]> SELECT * FROM wp_options WHERE option_name IN ('page_on_front');
+-----------+---------------+--------------+----------+
| option_id | option_name | option_value | autoload |
+-----------+---------------+--------------+----------+
| 84 | page_on_front | 2 | yes |
+-----------+---------------+--------------+----------+
option_valueのところはページIDが入っていました。
#option_nameの一覧を表示
結構大きなテーブルなので一つのカラムを表示してみます。
MariaDB [ebdb]> select option_name from wp_options;
+---------------------------------------------------------------------------+
| option_name |
+---------------------------------------------------------------------------+
・
・
・
| current_theme |
| date_format |
| db_version |
| default_category |
| default_comment_status |
| default_comments_page |
| default_email_category |
| default_link_category |
| default_ping_status |
| default_pingback_flag |
| default_post_format |
| default_role |
・
・
・
+---------------------------------------------------------------------------+
#option_nameの制約
最大長:64文字
型:varchar
ユニーク制約:あり
option_nameを設定する際は64文字以内のユニークな値で設定する必要があります。
#option_value
wordpressがoption_valueに値を保存する際は文字列で保存されます。
真偽値や数値は数値文字列として保存されます。
またoption_valueには配列やオブジェクトを保存することも可能ですが
この場合はシリアライズされた値が保存されます。
webサイトのURLが文字列のまま保存されていたり、
プラグインリストの配列がシリアライズされて保存されたりします。
設定値が配列やオブジェクトの場合
wordpressはserialize関数、unserialize関数を使用して処理を行います。
#wpdbオブジェクトによる操作の注意点
チェックサムの値と文字列のバイト数が一致しない置換処理などを行うと
wordpressがアンシリアライズできなくなることがあります。
#wordpressが重いときはautoloadカラムをチェック!?
autoloadカラムがonに設定されていると
wordpressの設定情報をまとめて一括取得することで
データベースへのクエリ発行回数を減らして
パフォーマンスを高めます。しかし、実行領域、ページの種類にかかわらず
wordpressが起動するたびに毎回実行されるという側面もあるため
利用頻度が低くデータ量の大きいレコードがある場合は
autoloadをnoに設定してパフォーマンスが上がる場合もあります。
現状利用していないテーマやプラグインでも
以前利用していて、このautoloadカラムがyesになっていた場合
パフォーマンスに影響が出る可能性もあります。
プラグイン、テーマでアンインストールしても
必ずautoloadがnoになるとも限らないので注意が必要です。