作成中のウィジェットは、主にユーザ側への表示でしたが、このウィジェットに対し、管理画面側でなんらかの値を登録&更新する仕組みを実装します。
ウィジェットのソース内に以下のメソッドを追加します。
/** * 管理画面側のパラメータ調整用コード */ public function form($par) { //入力された文字列(title)を取得 if (isset($par["title"])) { $title = esc_attr($par["title"]); } else { $title = ""; } //フォーム用のIDを取得 $title_id = $this->get_field_id('title'); //フォーム用のnameを取得 $title_name = $this->get_field_name('title'); //フォーム部分の表示 echo <<<EOL <label for="{$title_id}"><?php echo _e('Title:'); ?></label> <input type="text" class="widefat" id="{$title_id}" name="{$title_name}" value="{$title}"> EOL; }
こうすることで、管理画面で追加したウィジェットの部分に更新用のフォームが表示されます。
仮に「title」というパラメータ名として話を進めます。
上記のコードを書いた後に管理画面にアクセスすると、次のような画面になります(赤枠部分が追加箇所)。
この表示されたフォーム部分に対し、テキストを入力し保存ボタンを押します。
すると、保存しました。というメッセージになり、値が更新されます。
更新後は
<label for="{$title_id}"><?php echo _e('Title:'); ?></label>
というラベル部分の「echo _e(‘title’);」の箇所が表示され、入力した値が確認できます。
更新した値はウィジェット表示側のメソッド「public function widget」で$parの変数に格納されているので、下記のようにechoすることでユーザ側画面のサイドバーに表示されます。
public function widget($args, $par) { echo $args["before_widget"]; echo $args["before_title"]; echo "これはウィジェットでの表示です"; echo $args["after_title"]; echo "ここは中身です"; echo esc_html($par["title"]); echo $args["after_widget"]; }