WordPress 管理メニューにオリジナルのメニューを追加して、テーマごとの設定などを保存することができます。
functions.php に記入すると設定画面を作成することができるテンプレートです。
functions.php
<?php
add_action('admin_menu', 'custom_menu_page');
function custom_menu_page() {
add_menu_page('共通設定画面', '共通設定', 'manage_options', 'custom_menu_page', 'add_custom_menu_page', 'dashicons-admin-generic', 4);
}
function add_custom_menu_page() {
?>
<div class="wrap">
<h2>共通設定画面</h2>
<?php
if (isset($_GET['settings-updated'])) :
if (true == $_GET['settings-updated']) :
echo '<div id="settings_updated" class="updated notice is-dismissible"><p><strong>設定を保存しました。</strong></p></div>';
endif;
endif;
?>
<!-- この部分に表示する HTML を記述します -->
</div>
<?php
}
?>
上記のコードでは admin_menu のフックに custom_menu_page() を追加し、custom_menu_page() 内で、add_menu_page() を呼び出してメニューを追加しています。
add_menu_page() の引数は下記のようになっています。
add_menu_page(
$page_title, : ページタイトル
$menu_title, : メニュータイトル
$capability, : メニュー表示するユーザーの権限
$menu_slug, : メニューのスラッグ
$function, : メニュー表示時に使われる関数
$icon_url, : メニューのテキスト左のアイコン
$position, : メニューを表示する位置
);
$page_title, : ページタイトル
$menu_title, : メニュータイトル
$capability, : メニュー表示するユーザーの権限
$menu_slug, : メニューのスラッグ
$function, : メニュー表示時に使われる関数
$icon_url, : メニューのテキスト左のアイコン
$position, : メニューを表示する位置
);
参考:関数リファレンス/add menu page – WordPress Codex 日本語版
見やすくするために HTML 表示部分は別ファイルに分けることも可能です。
function.php
<?php
add_action('admin_menu', 'custom_menu_page');
function custom_menu_page() {
add_menu_page('共通設定画面', '共通設定', 'manage_options', 'custom_menu_page', 'custom_file_path', 'dashicons-admin-generic', 4);
}
function custom_file_path() {
$url = '../wp-content/themes/theme_directory/sample-page.php';
return $url;
}
sample-page.php
<div class="wrap">
<h2>テーマ設定</h2>
<?php
if (isset($_GET['settings-updated'])) :
if (true == $_GET['settings-updated']) :
echo '<div id="settings_updated" class="updated notice is-dismissible"><p><strong>設定を保存しました。</strong></p></div>';
endif;
endif;
?>
<form method="post" action="options.php" enctype="multipart/form-data" encoding="multipart/form-data">
<?php
settings_fields('custom-menu-group');
do_settings_sections('custom-menu-group');
?>
<div class="metabox-holder" data-tab-content="general">
<div class="postbox">
<?php $value_general = get_option('general'); ?>
<div class="inside">
<table class="form-table">
<tbody>
<tr>
<th scope="row"><label>テキスト</label></th>
<td>
<input type="text" class="large-text" name="general[text]" value="<?php echo $value_general['text']; ?>">
</td>
</tr>
<tr>
<th scope="row"><label>テキストエリア</label></th>
<td>
<textarea class="large-text" name="general[textarea]" rows="6"><?php echo $value_general['textarea']; ?></textarea>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<?php submit_button(); ?>
</form>
</div>