独自プラグインやワードプレスの管理画面に独自設定を追加する場合、SettingsAPIを使うと型に当てはめていくだけで慣れると簡単。

サンプルとして以下の記事で独自の設定画面を作ってみましたが、

ここでは完成したサンプルの設定画面に対して、
各設定値を1つの配列データとしてまとめてみます。

うまくいくか気になるのはやっぱり複数項目を持つチェックボックス。
果たしてすんなりと行くかな...

⇒「Settings APIの使い方まとめ」に戻る

サンプル設定画面のおさらい

今回作ったサンプルの設定画面はこちら。

2つのセクションを持ち、テキスト1行入力や、テキストエリア、ラジオボタン、複数チェックボックスといった6つのフィールドのある設定画面。

つまり変数は6つになりますが、これら個別の設定値を一つの配列にまとめてみます。

配列にするための変更箇所

Settings APIで作ったサンプル設定画面に対して、
設定値(変数)を配列に1まとめにするのに必要な変更箇所をまとめてみると、
以下のようになりますね。

設定画面の構成変更必要ありなし
(主な変更点)
手順1)
「メニュー情報」の関数名を指定
手順2)
「メニュー情報」の関数の具体的内容
手順3)
「設定画面」表示関数の具体的内容
セクションの追加
フィールドの追加
フィールドのコールバック関数
(テキスト入力やラジオボタンなどの表示)
変数を各々配列に変える
設定値と初期値を登録・初期値を配列で指定に変更
・register_settingの設定値名を配列の変数へ変更
・register_settingのサニタイズ関数は1つにまとめてそれを指定

全体をあれこれ変える必要はなく、直接関連するフィールドのコールバック関数やSettings APIで使用する設定値(変数)のregister_settingへの登録あたりを見直すだけ。

ひとまとめにする配列

1まとめにする配列は以下と想定しておきます。

連想配列の形で、1まとめにした変数名は item_array。
キー「interest」のみが複数チェックボックスということで配列にしています。

この配列 item_array を使い、
フィールドのコールバック関数から順次修正してみましょう。

フィールドのコールバック関数の修正

ブログ情報)URL入力(input text)

【元のコード】

【配列対応のコード】

  • 3行目:
    配列にひとまとめにする前は、変数は item_url だったところを
    item_array[url] と配列の形に変えた。
  • 5行目:
    データの取得も、get_option( 'item_array' ) と配列を取得して、
    そこに連想配列のキー ['url'] を付ける形に変更。

ブログ情報)タイトル入力(input text)

【元のコード】

【配列対応のコード】

  • 3行目:
    配列にひとまとめにする前は、変数は item_title だったところを
    item_array[title] と配列の形に変えた。
  • 5行目:
    データの取得も get_option( 'item_array' ) と配列を取得して、
    そこに連想配列のキー ['title'] を付ける形に変更。

ブログ情報)説明入力(textarea)

【元のコード】

【配列対応のコード】

  • 3行目:
    配列にひとまとめにする前は、変数は item_description だったところを
    item_array[description] と配列の形に変えた。
  • 5行目:
    データの取得も get_option( 'item_array' ) と配列を取得して、
    そこに連想配列のキー ['description'] を付ける形に変更。

管理者情報)性別選択(ラジオボタン)

【元のコード】

【配列対応のコード】

  • 3行目:
    配列にまとめる前は、変数は item_gender だったところを
    まず get_option( 'item_gender' ) とひとまとめの配列を取得。
    そこに連想配列のキー [‘gender’] を付け $gender を取得する形に変更。
  • 5行目, 8行目, 11行目:
    name属性は全て item_array[gender] と配列の形に変更。

管理者情報)趣味チェック(チェックボックス)

【元のコード】

【配列対応のコード】

  • 3行目:
    配列にまとめる前は、変数は item_interest (配列)だったところ、
    まず get_option( 'item_array' ) と、ひとまとめの配列を取得。
    そこに
    連想配列のキー [‘interest’] を付け、
    ラジオボタンの配列 $interest を取得する形に変更。
  • 6行目, 9行目, 12行目:
    name属性は、元々 item_interest[] と1次元の配列で指定していたものを、
    全て  item_array[interest][] とキー「interest」の2次元配列の形に変更。

3行目で取得するデータは変更前と変わらない形の配列なので、
サニタイズ用に作った以下のコードは変更はなくて良いですね。

管理者情報)自己紹介(textarea)

【元のコード】

【配列対応のコード】

  • 3行目:
    タイトル入力に同じで、
    配列にひとまとめにする前は、変数は item_selfintro だったところを
    item_array[selfintro] と配列の形に変更。
  • 5行目:
    データの取得も同様に get_option( 'item_array' ) と配列を取得して、
    そこに連想配列のキー ['selfintro'] を付ける形へと変えた。

以上でフィールドのコールバック関数は配列への修正完了!

設定値と初期値を修正

設定値を配列のひとまとめにするので、初期値の指定などはガラっと変わります。

初期値の設定

【元のコード】

【配列対応のコード】

  • 5行目~12行目:
    連想配列の形で初期値を指定。
    複数チェックボックスの「interest」は配列にしておく。
  • 18行目~20行目:
    元のコードでは url の設定値に限って、何も入力されてない場合には「http://」をガイド代わりに表示したい、ということから、まだデータベースに設定項目が登録されてない場合、または空文字の場合には初期値「http://」としてデータベースに登録していた。

    配列で一塊のデータとして扱うようにしたことから、配列全体を初期値とともに登録する形に変更し、url項目に空文字列が設定された場合の対応は、下方にあるサニタイズ関数にまとめてみた。

設定値の登録(register_setting)

【元のコード】

【配列対応のコード】

  • 5行目~9行目
    元々のコードは、設定値(変数)を個別に持っていたため、その数だけ register_setting で Settings API への登録が必要で、設定値が増えるとこれがその分だけ増えるのか...ちょっとなんだかな~、という感じだった。
    データを配列で1つにしたので、register_setting 自体も1つだけ。

    ②には、最初に決めた配列「item_array」を設定。
    ③のサニタイズは、register_setting が1つなので、独立した関数としてこちらも「item_sanitize」という名の関数にひとまとめにした。

サニタイズ関数

【元のコード】

【配列対応のコード】

  • 全体
    元々のコードは、設定値(変数)を個別に持っていたため、各々のregister_setting の中で個別にサニタイズ関数を指定していた。

    データを配列で1つにまとめたので、register_setting 自体も1つになり、サニタイズ関数の指定も1つということで1つの関数にまとめてみたもの。

    配列を受け取り、foreach で配列のキーを1つ1つ見て、switch case で場合分け。

    ※)urlの設定値について、元々のコードで「空文字の場合には http:// を付ける」としていたのものを、このサニタイズ関数の6行目~9行目に持ってきた。

こうしてみると、どの設定値が度のサニタイズ関数を使っているかが一目でわかり、何気に嬉しいかも。

コード全体で変更箇所をチェック!

データを配列にひとまとめにした修正コード全体像は以下。

黒マーカーの箇所が変更したところですが、
全体で見ると部分的な修正で配列への変更ができました。

あとは作った設定画面のデザインをCSSでちょっとだけ整える、
みたいなことをしてみましょう。(別記事でやってみます)

⇒「Settings APIの使い方まとめ」に戻る

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

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

~ 最短で月収10万円稼げるようになる方法 ~

お名前(全角文字)

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

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

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

自らの手で未来を変える力を手に入れる!