その2ではMySettingsPageクラス内でプロパティとコンストラクタを定義しました。今回はメソッドを定義していきましょう。メソッドとはクラス内で使う関数みたいなものです。
PHPの文法におけるメソッドの記述
[php]
class Hoge {
(プロパティ)
(コンストラクタ)
// メソッド
public function fuga() {
…
}
}[/php]
PHPの文法においてクラス内で定義されるメソッドは、上記の記述で表されます。”…”の中にメソッドの機能を記述します。
各メソッドの具体的な定義
前回の記事で記述したコードで管理画面を確認すると2つのエラーが存在することが分かります。エラーの内容を読むと”add_plugin_page”と”page_init”の独自メソッドが定義されていないと指摘されていることが分かります。
add_plugin_pageメソッドの定義
[php]
public function add_plugin_page() {
add_options_page(
‘Settings Admin’,
‘My Settings’,
‘manage_options’,
‘my-setting-admin’,
array( $this, ‘create_admin_page’ )
);
}
[/php]
add_plugin_pageメソッドを定義すると上記の記述になります。メソッドの中で使われているadd_options_pageはWordPress関数であり、設定メニューページにサブメニューページを追加するという意味です。
create_admin_pageメソッドの定義
[php]
public function create_admin_page() {
$this->options = get_option( ‘my_option_name’ );
?>
<div class="wrap">
<h2>My Settings</h2>
<form method="post" action="options.php">
<?php
// 設定項目の表示
settings_fields( ‘my_option_group’ );
do_settings_sections( ‘my-setting-admin’ );
// 保存して送信
submit_button();
?>
</form>
</div>
<?php
}
[/php]
次にadd_options_page関数の第四引数で使われている、create_admin_pageメソッドを定義します。この中で分かりにくい記述は、”$this->options = get_option( ‘my_option_name’ );”の箇所でしょう。
右辺について
右辺のget_optionはWordPressの関数です。データベーステーブルのwp_optionsから引数で使われているカラム名(option_name)の値(option_value)を取り出します。
データベーステーブルの画面で説明すると、get_option( ‘my_option_name’ );はこの値を取り出していることになります。
左辺について
$this->hogeという表現はPHPの文法です。「現在のオブジェクトのプロパティを参照できる」という意味になります。$thisとはインスタンスメソッドの中でのみ使用できる特別な変数で、メソッドからプロパティを操作するときに必ずこのような表現をしますので、お約束として覚えてしまいましょう。
$this->optionsをデバッグで確認
wp_optionsのoption_valueカラムでは、シリアライズされた値が保存されています。これでは読み取りにくく、$this->optionsには何が保存されているか分かりにくいでしょう。
[php]
$this->options = get_option( ‘my_option_name’ );
?>
<?php var_dump($this->options); ?>
[/php]
そういう場合、var_dumpでデバッグをして$this->optionsの内容を確認します。
するとこのように$this->optionsには配列形式で、’id_number’と ‘title’とタイトルが保存されていることが分かります。
デバッグに関する注意点
なお、管理画面の設定ページを初めて作成する場合、この時点でデバッグの結果は返ってきません。今回の例では完成したプラグインが自分のデータベーステーブルに値を保存できているかどうか何度か試し、option_nameが残っているためデバッグが可能となりました。
formタグ内のWordPress関数について
formタグ内にWordPress関数が使われていますが、詳細はこちらのページ確認してください。
page_initメソッドの定義
page_initメソッドの定義については、引き続きその4の記事で解説します。