参考:メインナビゲーションから削除する方法
管理画面のメインナビゲーション(左メニュー)にあるCocoon設定の子メニューから、不要な項目を削除します。
この変更は、前述のダッシュボードウィジェットおよび管理メニューにも自動的に反映(削除)されます。
完成イメージ

実装手順
以下のコードをfunctions.phpに追加します。
// Cocoonの管理メニュー表示を制御
add_filter('cocoon_menu_definitions', function ($definitions) {
$sidebar_remove = get_option('my_cocoon_sidebar_remove', []);
if (empty($sidebar_remove)) {
return $definitions;
}
// 非表示に設定されたメニューを除外
return array_diff_key($definitions, array_flip($sidebar_remove));
}, 999);
// Cocoon設定にメニューを追加
add_action('admin_menu', function () {
$parent_slug = defined('THEME_SETTINGS_PAGE') ? THEME_SETTINGS_PAGE : 'theme-settings';
add_submenu_page(
$parent_slug,
'Cocoonメニュー表示設定',
'メニュー表示設定',
'manage_options',
'cocoon_sidebar_remove',
'render_cocoon_sidebar_remove'
);
}, 999);
/**
* 管理画面ページを出力
*
* @return void
*/
if (!function_exists('render_cocoon_sidebar_remove')):
function render_cocoon_sidebar_remove() {
// 元のメニュー一覧を取得するためフィルターを一時的に解除
$current_filters = $GLOBALS['wp_filter']['cocoon_menu_definitions'] ?? null;
unset($GLOBALS['wp_filter']['cocoon_menu_definitions']);
$all_menus = get_cocoon_original_menu_definitions();
// フィルターを復元
if ($current_filters) {
$GLOBALS['wp_filter']['cocoon_menu_definitions'] = $current_filters;
}
// 除外する親メニューのスラッグを指定
$parent_slug = defined('THEME_SETTINGS_PAGE') ? THEME_SETTINGS_PAGE : 'theme-settings';
$exclude_slugs = [$parent_slug];
// 現在の非表示設定
$sidebar_remove = get_option('my_cocoon_sidebar_remove', []);
?>
<div class="wrap">
<h1>Cocoon メニュー表示設定</h1>
<p>「Cocoon 設定」の左メニューに表示する項目を選択できます。</p>
<form method="post" action="" class="cocoon-sidebar-remove__form">
<?php wp_nonce_field('cocoon_sidebar_remove_action', 'cocoon_sidebar_remove_nonce'); ?>
<table class="widefat fixed striped cocoon-sidebar-remove__table">
<thead>
<tr>
<th class="check-column"></th>
<th>項目名</th>
</tr>
</thead>
<tbody>
<?php foreach ($all_menus as $slug => $menu): ?>
<?php if (in_array($slug, $exclude_slugs, true)) continue; ?>
<tr>
<th scope="row" class="check-column">
<input type="checkbox" name="cocoon_sidebar_remove_items[]" value="<?= esc_attr($slug); ?>"
<?php checked(!in_array($slug, $sidebar_remove, true)); ?>>
</th>
<td><?= wp_strip_all_tags((string) $menu['title']); ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<p class="submit">
<?php submit_button('設定を保存', 'primary', 'cocoon_sidebar_remove_save', false); ?>
<input type="submit" name="cocoon_sidebar_remove_reset" class="button button-link-delete" value="リセット" onclick="return confirm('設定をリセットしてもよろしいですか?');" />
</p>
</form>
</div>
<?php
}
endif;
// 管理画面用JS・CSSを追加
add_action('admin_enqueue_scripts', function () {
if (($_GET['page'] ?? '') !== 'cocoon_sidebar_remove') {
return;
}
ob_start();
?>
.cocoon-sidebar-remove__form {
margin-top: 20px;
max-width: 600px;
}
.cocoon-sidebar-remove__table {
background-color: #fff;
border: 1px solid #ccd0d4;
border-radius: 4px;
margin-bottom: 1em;
}
.submit .button-link-delete {
margin-left: 10px;
}
<?php
wp_add_inline_style('wp-admin', ob_get_clean());
});
// 管理画面からの設定データ更新
add_action('admin_init', function () {
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
return;
}
// nonceチェック
if (
!isset($_POST['cocoon_sidebar_remove_nonce']) || !wp_verify_nonce($_POST['cocoon_sidebar_remove_nonce'], 'cocoon_sidebar_remove_action')
) {
return;
}
// 権限チェック
if (!current_user_can('manage_options')) {
return;
}
$parent_slug = defined('THEME_SETTINGS_PAGE') ? THEME_SETTINGS_PAGE : 'theme-settings';
$exclude_slugs = [$parent_slug];
// 設定を初期化
if (isset($_POST['cocoon_sidebar_remove_reset'])) {
delete_option('my_cocoon_sidebar_remove');
set_transient('my_admin_notice', [
'type' => 'success',
'message' => '設定をリセットしました。',
], 30);
wp_safe_redirect(admin_url('admin.php?page=cocoon_sidebar_remove'));
exit;
}
// 設定を保存
if (isset($_POST['cocoon_sidebar_remove_save'])) {
$items = isset($_POST['cocoon_sidebar_remove_items'])
? array_map('sanitize_text_field', $_POST['cocoon_sidebar_remove_items'])
: [];
// 元のメニュー一覧を取得するためフィルターを一時的に解除
$current_filters = $GLOBALS['wp_filter']['cocoon_menu_definitions'] ?? null;
unset($GLOBALS['wp_filter']['cocoon_menu_definitions']);
$all_menus = get_cocoon_original_menu_definitions();
// フィルターを復元
if ($current_filters) {
$GLOBALS['wp_filter']['cocoon_menu_definitions'] = $current_filters;
}
$all_slugs = array_keys($all_menus);
// チェックされていないメニューを非表示リストに設定
$sidebar_remove = array_diff($all_slugs, $items);
// 除外対象の親メニューを非表示リストから除外
$sidebar_remove = array_values(
array_filter(
$sidebar_remove,
function ($slug) use ($exclude_slugs) {
return !in_array($slug, $exclude_slugs, true);
}
)
);
update_option('my_cocoon_sidebar_remove', $sidebar_remove);
set_transient('my_admin_notice', [
'type' => 'success',
'message' => '設定を保存しました。',
], 30);
wp_safe_redirect(admin_url('admin.php?page=cocoon_sidebar_remove'));
exit;
}
});
// 通知メッセージを出力
add_action('admin_notices', function () {
if ($notice = get_transient('my_admin_notice')) {
echo '<div class="notice notice-' . esc_attr($notice['type']) . ' is-dismissible"><p>' . esc_html($notice['message']) . '</p></div>';
delete_transient('my_admin_notice');
}
});

