管理画面のツールバー「管理メニュー」の不要メニューを削除する方法

Cocoonカスタマイズ集
この記事は約23分で読めます。
記事内に広告が含まれています。

拡張:Cocoon設定の管理者画面に設定を追加する方法

Cocoon設定→管理者画面→管理画面設定に、項目を追加します。

設定をまとめて保存」を実行後、ページを再読み込みすると変更が反映されます。

完成イメージ

実装手順

以下のコードをfunctions.phpに追加します。

// Cocoon設定にメニューを追加
add_action('admin_menu', function () {
  $page_hook = get_plugin_page_hookname('theme-settings', '');

  if ($page_hook) {
    add_action($page_hook, 'render_cocoon_adminbar_remove');
  }
}, 99);


/**
 * Cocoon設定(管理画面)に項目を出力
 *
 * @return void
 */
if (!function_exists('render_cocoon_adminbar_remove')):
function render_cocoon_adminbar_remove() {
  // 元のメニュー一覧を取得するためフィルターを一時的に解除
  $current_filters = $GLOBALS['wp_filter']['cocoon_admin_bar_menus'] ?? null;
  unset($GLOBALS['wp_filter']['cocoon_admin_bar_menus']);

  $all_menus = get_admin_bar_menu_array();

  // フィルターを復元
  if ($current_filters) {
    $GLOBALS['wp_filter']['cocoon_admin_bar_menus'] = $current_filters;
  }

  // 現在の非表示設定を取得
  $adminbar_remove = get_option('my_cocoon_adminbar_remove', []);

  ob_start();
  ?>
  <div class="cocoon-adminbar-remove__container" style="display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 10px 5px; margin-bottom: 10px;">
    <?php foreach ($all_menus as $menu): ?>
      <?php
      $id = $menu['id'];
      $title = wp_strip_all_tags((string) $menu['title']);
      ?>
      <div>
        <label>
          <input type="checkbox" name="cocoon_adminbar_remove_items[]" value="<?= esc_attr($id); ?>"
            <?php checked(!in_array($id, $adminbar_remove, true)); ?>>
          <?= $title; ?>
        </label>
      </div>
    <?php endforeach; ?>
  </div>
  <input type="hidden" name="cocoon_adminbar_remove_present" value="1">
  <?php generate_tips_tag('「設定をまとめて保存」を実行後、ページを再読み込みすると変更が反映されます。'); ?>
  <?php
  $items_html = ob_get_clean();
  ?>

  <script>
  jQuery(function ($) {
    const $targetRow = $('#admin_tool_menu_visible_1').closest('tr');
    if (!$targetRow.length) return;

    const itemsHtml = <?= json_encode($items_html); ?>;

    const customRow = `
      <tr>
        <th scope="row">ツールバー項目の整理</th>
        <td>${itemsHtml}</td>
      </tr>
    `;
    $targetRow.after(customRow);
  });
  </script>
  <?php
}
endif;


// Cocoon設定値を保存
add_action('cocoon_settings_after_save', function () {
  if (!isset($_POST['cocoon_adminbar_remove_present'])) {
    return;
  }

  $items = isset($_POST['cocoon_adminbar_remove_items'])
    ? array_map('sanitize_text_field', $_POST['cocoon_adminbar_remove_items'])
    : [];

  // 元のメニュー一覧を取得するためフィルターを一時的に解除
  $current_filters = $GLOBALS['wp_filter']['cocoon_admin_bar_menus'] ?? null;
  unset($GLOBALS['wp_filter']['cocoon_admin_bar_menus']);

  $all_menus = get_admin_bar_menu_array();

  // フィルターを復元
  if ($current_filters) {
    $GLOBALS['wp_filter']['cocoon_admin_bar_menus'] = $current_filters;
  }

  $all_ids = array_column($all_menus, 'id');

  // チェックされていないIDを非表示リストに設定
  $adminbar_remove = array_values(array_diff($all_ids, $items));

  update_option('my_cocoon_adminbar_remove', $adminbar_remove);
});


// Cocoonのツールバー表示を制御
add_filter('cocoon_admin_bar_menus', function ($menus, $wp_admin_bar) {
  $adminbar_remove = get_option('my_cocoon_adminbar_remove', []);

  if (empty($adminbar_remove)) {
    return $menus;
  }

  // 非表示に設定されたメニューを除外
  return array_filter($menus, function ($item) use ($adminbar_remove) {
    return !in_array($item['id'], $adminbar_remove, true);
  });
}, 10, 2);

さいごに

今回紹介した方法を使えば、Cocoonテーマで管理画面のツールバーにある「管理メニュー」をすっきり整理できます。
不要なメニューを非表示にし、必要なものだけを残すことで、作業効率が大幅に向上します。
また、リセット機能を備えているため、誤って削除してもすぐに元の状態へ戻せる点も安心です。

タイトルとURLをコピーしました