特定のプラグインを一覧から非表示にする方法

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

特定のユーザー以外に特定のプラグインを非表示にする方法

ユーザーID=1のユーザーのみ、特定のプラグインをプラグイン一覧に表示します。
それ以外のユーザーには、そのプラグインをプラグイン一覧で非表示にします。

この記事では、この方法について説明します。

実装手順

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

add_filter('all_plugins', function ($plugins) {
  // 非表示対象のプラグインを設定
  $plugins_to_hide = [
    'search-regex/search-regex.php',
  ];

  // ユーザーID=1以外を処理対象外
  if (get_current_user_id() !== 1) {
    foreach ($plugins_to_hide as $plugin_file) {
      unset($plugins[$plugin_file]);
    }
  }

  return $plugins;
});

補足

非表示にしたいプラグインのファイル名は、プラグイン→プラグインファイルエディターから確認できます。
より簡単に確認できるよう、プラグイン一覧にファイル名を表示します(図1参照)。

実装手順

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

add_filter('plugin_row_meta', function ($plugin_meta, $plugin_file, $plugin_data, $status) {
  // 権限チェック
  if (!current_user_can('manage_options')) {
    return $plugin_meta;
  }

  // ファイルパスを設定
  $plugin_meta[] = 'ファイル: ' . esc_html($plugin_file) . '';

  return $plugin_meta;
}, 10, 4);

拡張:プラグイン一覧で選択した特定のプラグインを非表示にする方法

ユーザーID=1のユーザーのみ、プラグイン一覧で特定プラグインの表示・非表示を切り替えられるようにします。
その設定に基づき、他のユーザーには該当プラグインがプラグイン一覧で非表示になります。

完成イメージ

実装手順

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

// プラグイン一覧にカラムを追加
add_filter('manage_plugins_columns', function ($columns) {
  if (get_current_user_id() === 1) {
    $columns['plugin_visibility'] = '表示';
  }

  return $columns;
});


// プラグイン一覧のカラムにデータを表示
add_action('manage_plugins_custom_column', function ($column_name, $plugin_file, $plugin_data) {
  if (get_current_user_id() !== 1 || $column_name !== 'plugin_visibility') {
    return;
  }

  // 非表示対象のプラグインを取得
  $hidden_plugins = get_option('my_plugin_visibility', []);

  $checked = checked(!in_array($plugin_file, $hidden_plugins, true), true, false);
  $nonce = wp_create_nonce('plugin_visibility_action');
  ?>
  <form class="plugin-visibility__form" method="post">
    <input type="hidden" name="plugin_visibility_toggle" value="<?= esc_attr($plugin_file); ?>">
    <input type="hidden" name="plugin_visibility_nonce" value="<?= esc_attr($nonce); ?>">
    <input type="checkbox" class="plugin-visibility__checkbox" name="plugin_visibility_visible" value="1" onchange="this.form.submit();" <?= $checked; ?>>
  </form>
  <?php
}, 10, 3);


// 管理画面からの設定データを更新
add_action('admin_init', function () {
  if (!isset($_POST['plugin_visibility_toggle'])) {
    return;
  }

  // ユーザーID=1のみに更新権限を設定
  if (get_current_user_id() !== 1) {
    return;
  }

  $plugin = sanitize_text_field($_POST['plugin_visibility_toggle']);
  $nonce  = $_POST['plugin_visibility_nonce'] ?? '';

  // nonceチェック
  if (!wp_verify_nonce($nonce, 'plugin_visibility_action')) {
    return;
  }

  $hidden_plugins = get_option('my_plugin_visibility', []);

  // 非表示対象のプラグインを設定
  if (empty($_POST['plugin_visibility_visible'])) {
    if (!in_array($plugin, $hidden_plugins, true)) {
      $hidden_plugins[] = $plugin;
    }
  } else {
    $hidden_plugins = array_values(array_diff($hidden_plugins, [$plugin]));
  }

  update_option('my_plugin_visibility', $hidden_plugins);
});


// 非表示対象のプラグインを除外
add_filter('all_plugins', function ($plugins) {
  if (get_current_user_id() === 1) {
    return $plugins;
  }

  // 非表示対象のプラグインを取得
  $hidden_plugins = get_option('my_plugin_visibility', []);

  if (is_array($hidden_plugins)) {
    foreach ($hidden_plugins as $plugin_file) {
      unset($plugins[$plugin_file]);
    }
  }

  return $plugins;
});

特定のユーザー以外はプラグイン一覧を非表示にする方法

ユーザーID=1のユーザー以外に対して、管理画面の「プラグイン」を非表示にします。

実装手順

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

add_action('admin_menu', function () {
  // ユーザーID=1以外を処理対象外
  if (get_current_user_id() !== 1) {
    remove_menu_page('plugins.php');
  }
}, 999);

ユーザー権限に応じて特定のプラグインを非表示にする方法

管理者権限(administrator)のユーザーのみ、特定のプラグインをプラグイン一覧に表示します。
管理者以外のユーザーには、指定したプラグインが一覧から非表示になります。

実装手順

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

add_filter('all_plugins', function ($plugins) {
  // 非表示対象のプラグインを設定
  $plugins_to_hide = [
    'search-regex/search-regex.php',
  ];

  // 管理者以外を処理対象外
  if (!current_user_can('administrator')) {
    foreach ($plugins_to_hide as $plugin_file) {
      unset($plugins[$plugin_file]);
    }
  }

  return $plugins;
});

さいごに

今回紹介した方法を使えば、プラグイン一覧画面から特定のプラグインを非表示にすることができます。
開発用やメンテナンス用のプラグインを誤って操作されることを防げるため、特に複数人でサイトを管理している場合に便利です。

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