1. TOPTOP
  2. Webサービス

WordPressプラグインで管理画面の設定ページを作成する(クラス構文編 その5 ~ 設定項目を実行するメソッドの定義)

wordpress_plugin_administrator_setting_class_1

WordPressプラグインで管理画面の設定ページを作成する(クラス構文編 その4 ~ 設定画面を初期化するメソッドの定義)

その4の続きです。今までは設定ページの設定項目を表示するための前提に関する記述を行ってきました。今回はそれぞれの設定項目がどのような役割を果たすのかメソッドの定義を行います。

サニタイズメソッドの作成

public function sanitize( $input ) {
    // 入力内容を変換(ID Numberは正の数値にタイトルはサニタイズ)
    $new_input = array();
    ...
    return $new_input;
}

設定項目に入力した文字列や数値が特別な意味を持つ文字の場合、その特別さを無効化します。メソッドの仮引数は、ユーザーが入力またはwp_optionsテーブルに保存している数値・文字列とします。サニタイズメソッドを実行することによって、無害化された引数($new_input)が出力されます。

なお$new_inputは配列値として出力されるため、空配列を代入して最初に初期化しておきます。

絶対値への変換

if( isset( $input['id_number'] ) ){
   $new_input['id_number'] = absint( $input['id_number'] );
}

absint関数(新しいタブで開く)はフィールドに入力された数値・文字列を絶対値の数値にします。

特殊文字の無害化

if( isset( $input['title'] ) ){
   $new_input['title'] = sanitize_text_field( $input['title'] );
}

sanitize_text_field関数(新しいタブで開く)は、フィールドに入力された無効なUTF-8のチェック、タグの除去、改行・タブ・余分を削除などを行います。

文字列の出力メソッドの作成

public function print_section_info() {
    print 'Enter your settings below:';
}

PHPの組み込み関数であるprint関数を使って、’Enter your settings below:’という文字列を出力します。

inputタグの出力(ID)

public function id_number_callback() {
    printf(
        '<input type="text" id="id_number" name="my_option_name[id_number]" value="%s" />',
        isset( $this->options['id_number'] ) ? esc_attr( $this->options['id_number']) : ''
    );
}

PHPの組み込み関数であるprintf関数を使って、フォーマット済みの文字列として、IDを入力するためのinputタグを出力します。

printf関数の使い方について

フォーマット済みの文字列を出力をします。第二引数の文字列を第一引数で使われている型指定子の”%s”に入力します。printf関数の使い方は慣れていない方にとっては分かりづらいかもしれません。同じくPHPの組み込み関数である、sprintf関数(新しいタブで開く)のドキュメントを参考にしてください。

三項演算子の内容について

printf関数の第二引数で三項演算子が使われています。if文を簡略化した書き方で意味は下記と同じになります。

if(isset( $this->options['id_number'] )) {
    esc_attr( $this->options['id_number']);
}

$this->options[‘id_number’]について

if文で条件判定をするために使われている、”$this->options[‘id_number’]”という表現は難しいかもしれませんね。それぞれの要素を分解してみましょう。

$this->optionsについて

$thisはインスタンスメソッドの中でのみ使用できる特別な変数です。またoptionsとは、MySettingsPageクラスで定義しているプロパティです。$this->optionsはクラスメソッドの中で、プロパティを操作するためのお約束の記法と覚えてください。

“[](大かっこ)”について

“[](大かっこ)”は配列を表現するときに使われる記号です。その2の記事でも書きましたが、$this->optionsをデバッグすると2つの要素からなる配列であることが分かります(IDとTitle)。つまり$this->options[‘id_number’]とは、設定項目(フィールド)のIDであることを指します。

出力文字のエスケープ

esc_attr関数(新しいタブで開く)はWordPressの組み込み関数で、alt、value、titleなどのHTML要素をエスケープする場合に必ず用います。< > & ” ‘ (小なり、大なり、アンパサンド、ダブルクォート、シングルクォート) 文字参照をエンコードします。

inputタグの出力(Title)

public function title_callback() {
    printf(
        '<input type="text" id="title" name="my_option_name[title]" value="%s" />',
        isset( $this->options['title'] ) ? esc_attr( $this->options['title']) : ''
    );
}

PHPの組み込み関数であるprintf関数を使って、フォーマット済みの文字列として、Titleを入力するためのinputタグを出力します。コードの詳細については、IDのときと同じなので省略します。

設定ページの確認

設定項目を実行するメソッドの定義をして設定ページをリロードをします。するとその1で作成したMySettingsPage_admin.phpで、
MySettingsPageクラスが実行(インスタンス化)され、IDとTitleが入力できる設定画面のページが表示されていることが分かります。IDとTitleを入力して各項目(フィールド)に「変更して保存」をクリックしましょう。

wordpress_plugin_administrator_setting_class_5_2

IDとTitleを保存したあとに、データベースのwp_optionsテーブルを確認すると、IDとTitleが入力されていることが分かります。