以前メモしたことのある、ダッシュボードにメニューを追加する方法の詳細。
プラグインに設定画面を追加するには、admin_menuというアクションフックを利用する。add_options_page()でダッシュボードのサイドメニューに項目を追加し、コールバック関数で設定画面を表示する。
設定画面はパラメータを入力するためのフォームとなる。フォームのactionに自分自身のURLを設定しておく。submitされた際にはパラメータがPOSTされてくるので、その場合の処理を入れておく。受け取ったパラメータをupdate_option()で、保存すればよい。すでにパラメータが保存されている場合はget_option()で取得することができるので、それをフォーム内のvalueとして表示する。
さらにplugin_action_linksというフィルタを利用すると、プラグインの管理に”設定”メニューを追加することができる。”設定”がクリックされた場合の処理は、上記のコールバック関数になる。こちらはあってもなくてもよいわりには苦戦した。
add_action('admin_menu', 'add_config_page');
function add_config_page(){
add_options_page('MyPlugin', 'MyPlugin', 10, basename(__FILE__), 'config_page');
add_filter( 'plugin_action_links', 'filter_plugin_actions', 10, 2 );
}
function filter_plugin_actions( $links, $file ){
static $this_plugin;
if ( ! $this_plugin ) $this_plugin = plugin_basename(__FILE__);
if ( $file == $this_plugin ){
$settings_link = '<a href="options-general.php?page=myplugin.php">Settings</a>';
array_unshift( $links, $settings_link );
}
return $links;
}
function config_page(){
$my_param = '';
if( isset( $_POST['submit'] ) && isset( $_POST["my_param"] )){
$my_param = $_POST["my_param"];
update_option( "my_param", $my_param);
}
else{
$my_param = get_option("my_param");
}
?>
<div class="wrap">
<h2>My Plugin</h2>
<form method="post" action="<?php echo $_SERVER[REQUEST_URI]; ?>">
<input type="text" name="my_param" value="<?php echo $my_param; ?>" size="50" /><input type="submit" name="submit" value="Update Options" />
</form>
</div>
<?php
}
