WordPress中級〜上級者

AdvancedCustomFieldsのオプションページから入力した情報はどのテーブルにINSERTされる?

イチカワ
更新
2020年5月1日(2020年4月30日 公開)
目次
ここのURLをクリップボードにコピー(copied!)

結論:「wp_options」に保存される

ずばり、wp_optionsテーブルにINSERTされます。
また更新があった場合はUPDATEされます。(※option_nameのカラムはUNIQUE KEYになっているため)

※テーブルのプレフィックス「wp_」はそれぞれの環境で読み替えてください

オプションページから入力される値は、option_nameが「options_カスタムフィールド設定画面で設定したフィールド名」の行の「option_value」に入ります。

フィールドタイプがグループの場合や、繰り返しフィールドの場合によってこのoption_nameは変わってくるため、3つのパターンで紹介します。

詳細その1:1行のみのフィールドに入力されたデータの場合

サンプルとして、テキストエリアに入力したデータの様子を紹介します。

フィールドがグループや繰り返しフィールドに内包されていない1行の場合、入力値はoption_nameが「options_カスタムフィールド設定画面で設定したフィールド名」の行の「option_value」に入ります。

options_カスタムフィールド設定画面で設定したフィールド名

この場合、フィールド名をcustom_cssとしているため、option_nameに入るキーはoptions_custom_cssとなります。

データを1行入力して保存し、確認のため、以下のSQL文で確認してみます。

 

mysql> select * from wp_options where option_name = "options_custom_css";

 

option_valueに保存されていることが確認できました。

詳細その2:グループ内のフィールドに入力されたデータの場合

サンプルとして、「sns_setting」という名のフィールドタイプがグループ内の、フィールドタイプ「URL」に入力したデータの様子を紹介します。

グループの場合、option_nameのキーは「options_グループのフィールド名_子要素のフィールド名」というルールで名称が割当られます。

options_グループのフィールド名_子要素のフィールド名

上記の例ではoptions_sns_setting_facebook_urlとなります。

データを入力して保存し、確認のため、以下のSQL文で確認してみます。

mysql> select * from wp_options where option_name = "options_sns_setting_facebook_url";

option_valueに保存されていることが確認できました。

詳細その3:繰り返しフィールド内のデータの場合

サンプルとして、フィールドタイプを「繰り返し」に設定したcuisine_lunchというフィールド名に入力した「テキスト」「画像」「テキストエリア」のデータの様子を紹介します。

繰り返しフィールドでは、入力をN行追加することができるため、データ列には番号を割り振る必要があります。

繰り返しフィールドの場合、option_nameのキーは「options_繰り返しのフィールド名_{列番号-1}_子要素のフィールド名」というルールで名称が割当られます。

options_繰り返しのフィールド名_{列番号-1}_子要素のフィールド名
列番号が「-1」されている点に注意してください。

例えば、3列目のcuisine_lunch内のフィールド名priceであれば、option_nameはoption_cuisine_lunch_2_priceとなります。

また、繰り返しフィールドでは「何行入っているか」のデータも入っており、これは「options_繰り返しのフィールド名」のoption_nameを持つ行のoption_valueに保存されています。

例えば、繰り返しフィールド「cuisine_lunch」に保存されている行数は、

mysql> select * from wp_options where option_name = "options_cuisine_lunch";

で取得することが可能です。

41行保存されていることがわかりました。

これらのルールを把握することで、管理画面を使わずデータを一括入稿することも可能になります。

補足:フィールドタイプなどの詳細情報はどこに入ってる?

データの保存場所はご紹介しましたが、そのフィールドが「どんなフィールドタイプ」で、「必須かどうか」や「文字数制限」などの設定値はどこに入っているのでしょうか。
これもオプションページの場合、wp_optionsに入っています。

ずばりoption_nameが「_options_フィールド名」のデータ列に入っています。

ここでoption_valueに入っているfield_5e6f3bd717706は、AdvancedCustomFieldsが自動的に割り振った、フィールド固有のIDです。


フィールド固有のIDは「acf-json」のjsonファイル内などで確認することができます。
このIDを元に設定情報を参照するようになっています。

また、このIDは必ず必要なため、上記で紹介した値だけをINSERTしてもその値を使うことはできませんので、必ず「IDと値のセット」で取り扱っているという点に注意してください。

まとめ

いかがでしたでしょうか?
あまりこれらのMySQLを利用する頻度は少ないかもしれませんが、構造を理解することで、よりスピーディーにデータ入力を行ったり、データ調査を行えるようになります。

  • AdvancedCustomFieldsのオプションページから入力した情報は「wp_options」に保存される(INSERTまたはUPDATEされる)
  • 入力された値はoption_valueカラムに保存されるが、そのoption_nameには一定のルールで決められたキーが入る
  • 1行のみのフィールドに入力されたデータの場合、option_nameは「options_カスタムフィールド設定画面で設定したフィールド名」となる
  • グループ内のフィールドに入力されたデータの場合、option_nameは「options_グループのフィールド名_子要素のフィールド名」となる
  • 繰り返しフィールド内のデータの場合、option_nameは「options_繰り返しのフィールド名_{列番号-1}_子要素のフィールド名」となる
  • 繰り返しフィールドでは「何行入っているか」の値が、option_name「options_繰り返しのフィールド名」のoption_valueに保存されている
  • オプションページのフィールド詳細情報(フィールドタイプ、必須条件 など)を管理するレコードもwp_optionsで管理されており、option_name「_options_フィールド名」のoption_valueにフィールド固有のIDが保存されている
AdvancedCustomFieldsのオプションページから入力した情報はどのテーブルにINSERTされる?
イチカワ(WordPress師範代)