WordPressプラグインへ設定画面を追加したいときがあります。これも簡単に実現できます。
サンプルでは、プラグインを有効にしたときに、sample_config_plugin_init_options()関数でOptionテーブルへ各項目の初期値を設定するようにしています。プラグイン有効時に呼び出されるようにするには、register_activation_hook()関数を使います。function sample-config-plugin-func()はとりあえずのところは中身が空で登録もしていません。設定画面への登録はadd_action('admin_menu', 'sample_config_plugin_add_admin_menu');の行でしています。sample_config_plugin_add_admin_menu()関数を呼び出し、サブメニュー登録をしています。画面はsample_config_plugin_admin_page()で用意し、投稿、参照ができるようにしています。
<?php /* Plugin Name: sample-config-plugin Plugin URI: https://www.hiro345.net/blogs/hiro345/sample-config-plugin Description: sample-config-plugin Version: 1.0 Author: hiro345 Author URI: https://www.hiro345.net/blogs/hiro345/ */ function sample-config-plugin-func($args = '') { } function sample_config_plugin_init_options() { if (!get_option('sample-config-plugin_installed')) { update_option('sample_config_int', -1); update_option('sample_config_string', 'sample_config'); update_option('sample_config_plugin_installed', 1); } } register_activation_hook(__FILE__, 'sample_config_plugin_init_options'); function sample_config_plugin_add_admin_menu() { add_submenu_page('plugins.php', 'sample config pluginの設定', 'sample_config_pluginの設定', 8, __FILE__, 'sample_config_plugin_admin_page'); } add_action('admin_menu', 'sample_config_plugin_add_admin_menu'); function sample_config_plugin_admin_page() { // 「変更を保存」ボタンがクリックされたときは、設定を保存する if ($_POST['posted'] == 'Y') { update_option('sample_config_int', intval($_POST['config_int'])); update_option('sample_config_string', stripslashes($_POST['config_string'])); } ?> <?php if($_POST['posted'] == 'Y') : ?><div class="updated"><p><strong>設定を保存しました</strong></p></div><?php endif; ?> <?php if($_POST['posted'] == 'Y') : ?> <!-- config_string = <?php echo $_POST['config_string']; ?>, striped = <?php echo stripslashes($_POST['config_string']); ?>, saved = <?php get_option('sample_config_string'); ?> --> <?php endif; ?> <div class="wrap"> <h2>sample config plugin の設定</h2> <form method="post" action="<?php echo str_replace( '%7E', '~', $_SERVER['REQUEST_URI']); ?>"> <input type="hidden" name="posted" value="Y"> <table class="form-table"> <tr valign="top"> <th scope="row"><label for="config_int">config_int<label></th> <td> <input name="config_int" type="text" id="config_int" value="<?php echo get_option('sample_config_int'); ?>" class="regular-text code" /><br /> config_intを指定します。 </td> </tr> <tr valign="top"> <th scope="row"><label for="config_string">config_string<label></th> <td> <input name="config_string" type="text" id="config_string" value="<?php echo esc_attr(get_option('sample_config_string')); ?>" class="regular-text code" /><br />config_stringの文字列を指定します。 </td> </tr> </table> <p class="submit"> <input type="submit" name="Submit" class="button-primary" value="変更を保存" /> </p> </form> </div> <?php } ?>