WordPressテーマやプラグインの設定ページを作成#2

WordPressテーマやプラグインの設定ページを作成#1の続きです。

ここでは保存するオプションデータの検証方法と各種フォームの設置方法を説明します。

データ検証

テキストフィールドやテキストエリアを使ってオプションデータを保存する際に、そのデータを検証することができます。register_setting()の第3引数に検証処理を実装したコールバック関数を設定します。コールバック関数の例は以下です。
【サンプル】

例ではテキストフィールドに入力した文字列が10文字を超えればエラーを表示しています。エラー表示はadd_settings_error()を使います。第1引数にregister_setting()で設定したグループ名を設定します。第2引数にエラー文がHTML出力するid属性に含まれる文字列を設定します。これはなんでもいいです。第3引数に表示するエラー文を設定します。第4引数は初期値が’error’なので設定不要です。

保存するオプションデータのいろんなチェックをコールバック関数に記述すればいいでしょう。

 

各種オプションフォーム

いろいろな設定をするのに設定の内容に合わせて各種フォームを使用します。ここで説明するフォームは以下です。
・テキストフィールド
・テキストエリア
・チェックボックス(単体・複数)
・ラジオボタン
・セレクトボックス
これらのフォームを使えばほぼ設定したい内容を提供できるのではないかと思います。これら以外にも例えばwysiwygエディタや画像設定フォーム、またはjQueryを使ってタブ画面などの作成もできるかと思いますが興味があればカスタマイズしてみてください。
全てのフォームに共通して必要な設定として、name属性に必ずregister_setting()で設定したオプション名を設定してください。WordPress公式ページにある関数リファレンスにはadd_settings_field()の第1引数で設定するid属性の値をフォームのname属性とid属性に設定するように書いていますが、動作を見たところname属性とid属性は同じである必要ななく、name属性にオプション名が設定されていれば動作するのでそれほど気にする必要なないかと思います。

テキストフィールド

最も使用することが多いフォームかと思います。id属性とname属性にはオプション名を設定しています。value属性にはオプションの値を設定します。
【サンプル】

 テキストエリア

こちらも使用頻度は多いかと思います。id属性とname属性にはオプション名を設定しています。
【サンプル】

テキストエリアには複数行を入力すると思いますが、このままHTMLに出力しても改行されません。この場合はnl2br()を使えば自動で改行部分に<br>を入れてくれます。

 チェックボックス(単体)

単体で設定するサンプルです。id属性とname属性にはオプション名を設定しています。単体なのでONかOFF(’1’か’0’)の設定となるので、value属性には’1’を設定しています。checked属性はchecked()関数を使って、オプションの値が’1’なら属性を記述するようにしています。
【サンプル】

 チェックボックス(複数)

複数に設定するサンプルです。こちらは複数の情報が設定されるため、オプションの値が配列になるようにしています。このため他と違って処理が少し複雑です。オプション値を配列にするためname属性には「name=“オプション名[インデックス]」を設定します。ここで設定する配列はコールバック関数呼び出しの引数として渡します。なので、先のadd_settings_field()の第5引数にこの配列を設定します。この配列がそれぞれのチェックボックスの値となります。オプションの値としては、チェックボックスがONの値だけが配列で保存されます。なので、checked属性を記述するかどうかはオプション値の配列に値があればchecked属性を記述する処理をしています。チェックボックスのラベル名はlabelタグを使って表示しています。id属性は例では配列のインデックスを設定していますが、他と同じくオプション名でも動作します。
【サンプル】

スポンサーリンク

ラジオボタン

ラジオボタンはオプション値は1つですが、選択項目が複数あるので、チェックボックス(複数)と同じくコールバック関数の引数に配列を渡します。ラジオボタンは配列の要素数だけ表示されます。オプション値は1つなので、checked()関数で配列の値をチェックしオプション値と同じならchecked属性を記述する処理をしています。チェックボックスのラベル名はlabelタグを使って表示しています。id属性とname属性にはオプション名を設定しています。
【サンプル】

セレクトボックス

セレクトボックスもラジオボタンと同じくオプション値は1つですが、選択項目が複数あるので、コールバック関数の引数に配列を渡します。セレクトボックスの選択要素は配列の数だけ表示されます。オプション値は1つなので、selected()関数で配列の値をチェックしオプション値と同じならselected属性を記述しています。id属性とname属性にはオプション名を設定しています。
【サンプル】

 1つのオプション値で複数のフォームデータの扱い方

これまでは1つのフォームに1つのオプション値を設定していましたが、1つのオプション値に複数のフォームから取得するデータを配列で保存することもできます。この場合はそれぞれのフォームのname属性に同じオプション名を設定します。
【サンプル】

 

まとめ

以下にサンプルの全体を掲載します。処理をカプセル化するためクラスにしています。

以上で設定ページの作成は完了です。お疲れ様でした。