Scripts & Softwares

WordPress Multisite Script to find all network enabled/disabled plugins

In Multi-site WordPress environment, it is very hard to identify which plugins are network activated and which are individually activated on sub-sites. I encountered this issue recently and decided to script own a solution to this problem. I was looking to remove all the unused plugins (network + sub-site). I found this script handy as this can be placed in a file and placed in root folder of the WordPress installation. Running it will display all the plugins grouped by per sub-site enabled, by network enabled and all safe to delete plugins.

I hope this could help someone 🙂

PHP Script to find all network activated & sub-site activated plugins

<?php

  require_once(dirname(__FILE__).'/wp-load.php');
  global $wpdb;

  $globally_active_plugins = [];
  $removable_plugins = [];

  $result = $wpdb->get_results("SELECT `blog_id` FROM `wp_blogs`");
  if(count($result)){
    foreach($result as $r){

      $site_id = $r->blog_id;

      switch_to_blog($site_id);

      $active_plugins = [];
      foreach(get_plugins() as $path => $plugin){
        if(is_plugin_active($path)){
          $active_plugins[] = $path;

          if(! in_array($path, $globally_active_plugins))
            $globally_active_plugins[] = $path;
        }
      }

      echo '<a href="'.get_site_url().'">'.get_bloginfo('name').' (site #'.get_current_blog_id().')</a>';
      echo '<pre>';
      print_r($active_plugins);
      echo '</pre>';
    }

    echo 'ALL REQUIRED PLUGINS - ';
    echo '<pre>';
    print_r($globally_active_plugins);
    echo '</pre>';

    foreach(get_plugins() as $path => $plugin){
      if(! in_array($path, $globally_active_plugins))
        $removable_plugins[] = $path;
    }
    echo 'PLUGINS THAT CAN BE SAFELY REMOVED - ';
    echo '<pre>';
    print_r($removable_plugins);
    echo '</pre>';
  }

?>