Comment puis-je obtenir une liste des plugins actifs sur mon blog wordpress par programmation?

13

J'ai 2 blogs, un qui est multisite et un qui ne l'est pas. Je veux obtenir une liste des plugins actifs sur les deux blogs afin de pouvoir les comparer. Sur le blog multisite, je veux lister les plugins qui sont activés à l'échelle du réseau ainsi qu'à l'échelle du site.

mehulved
la source

Réponses:

20

Les plugins activés sont stockés dans le tableau des options d'un blog WordPress sous la clé active_plugins

afin que vous puissiez utiliser get_option('active_plugins'); chaque blog et comparer les tableaux.

Bainternet
la source
2
Il vaut la peine d'ajouter que get_plugins () vous donnera tous les plugins, y compris ceux inactifs.
Charles Jaimet
13

Sous la forme d'un Dashboard Widget, un pour les sites uniques et le tableau de bord des sites réseau, l'autre pour le tableau de bord réseau multisite.

/*
 * Single Site Dashboard Widget
 */
add_action('wp_dashboard_setup', 'wpse_54742_wp_dashboard_setup');

function wpse_54742_wp_dashboard_setup() {
    wp_add_dashboard_widget( 'wpse_54742_active_site_plugins', __( 'Active Plugins' ), 'wpse_54742_active_site_plugins' );
}

function wpse_54742_active_site_plugins() {
    $the_plugs = get_option('active_plugins'); 
    echo '<ul>';
    foreach($the_plugs as $key => $value) {
        $string = explode('/',$value); // Folder name will be displayed
        echo '<li>'.$string[0] .'</li>';
    }
    echo '</ul>';
}


/*
 * Multisite Dashboard Widget
 */
add_action('wp_network_dashboard_setup', 'wpse_54742_network_dashboard_setup');

function wpse_54742_network_dashboard_setup() {
    wp_add_dashboard_widget( 'wpse_54742_active_network_plugins', __( 'Network Active Plugins' ), 'wpse_54742_active_network_plugins' );
}

function wpse_54742_active_network_plugins() {
    /*
     * Network Activated Plugins
     */
    $the_plugs = get_site_option('active_sitewide_plugins'); 
    echo '<h3>NETWORK ACTIVATED</h3><ul>';
    foreach($the_plugs as $key => $value) {
        $string = explode('/',$key); // Folder name will be displayed
        echo '<li>'.$string[0] .'</li>';
    }
    echo '</ul>';


    /*
     * Iterate Through All Sites
     */
    global $wpdb;
    $blogs = $wpdb->get_results($wpdb->prepare("
        SELECT blog_id
        FROM {$wpdb->blogs}
        WHERE site_id = '{$wpdb->siteid}'
        AND spam = '0'
        AND deleted = '0'
        AND archived = '0'
    "));

    echo '<h3>ALL SITES</h3>';

    foreach ($blogs as $blog) {
        $the_plugs = get_blog_option($blog->blog_id, 'active_plugins'); 
        echo '<hr /><h4><strong>SITE</strong>: '. get_blog_option($blog->blog_id, 'blogname') .'</h4>';
        echo '<ul>';
        foreach($the_plugs as $key => $value) {
            $string = explode('/',$value); // Folder name will be displayed
            echo '<li>'.$string[0] .'</li>';
        }
        echo '</ul>';
    }
}
brasofilo
la source
1
C'était beaucoup plus que ce dont j'avais besoin, mais j'apprécie vraiment que vous ayez pris le temps de fournir une réponse aussi détaillée. J'espère que cela aidera quelqu'un d'autre. Merci.
mehulved
4

Liste des plugins, avec les sites sur lesquels ils sont utilisés (Multisite uniquement)

Si vous voulez savoir quel plugin est actuellement activé et sur quel site, vous pouvez utiliser une fonction comme celle-ci:

function wpstars_list_active_plugins() {

  if ( function_exists( 'get_sites' ) && class_exists( 'WP_Site_Query' ) ) {

    echo "<table class='active-plugins'>";
    echo "<tr><th>Plugin name</th><th>Sites</th></tr>";

    $plugins = get_plugins();

    // Network activated
    $active_plugins = get_site_option('active_sitewide_plugins');
    foreach($active_plugins as $active_path => $active_plugin) {

      $plugins[$active_path]['Sites'] = "A,";
    }

    // Per site activated
    $sites = get_sites();
    foreach ( $sites as $site ) {

      $active_plugins = get_blog_option($site->blog_id, 'active_plugins');
      foreach($active_plugins as $active_plugin) {

        $plugins[$active_plugin]['Sites'] .= $site->blog_id . ",";
      }
    }

    foreach($plugins as $plugin) {

      echo "<tr><td>{$plugin['Name']}</td><td>{$plugin['Sites']}</td></tr>";
    }

    echo "</table>";
  }
}
Martin de WP-Stars.com
la source
1

WP-CLI est juste le ticket. Je l'ai utilisé si pour tant de choses, j'ai perdu le compte!

wp plugin list --status=active

Si vous le souhaitez, vous pouvez exécuter ces commandes sur votre machine locale avec des alias ...

Vous utiliseriez alors la fonction @site

wp @all plugin list --status=active

ou

wp @multisite list --status=active
wp @blog list --status=active
ecotechie
la source