Come ottenere programmaticamente l'elenco dei plugin attivi nel mio blog WordPress?

10 giu 2012, 14:48:00
Visualizzazioni: 32.1K
Voti: 16

Ho 2 blog, uno che è multisite e uno che non lo è. Voglio ottenere un elenco dei plugin attivi su entrambi i blog per poterli confrontare. Sul blog multisite, voglio elencare i plugin che sono abilitati sia a livello di rete che a livello di singolo sito.

Per un sito WordPress standard (non multisite), puoi usare:


// Ottiene tutti i plugin attivi
$active_plugins = get_option('active_plugins');

// Per ottenere informazioni dettagliate sui plugin
$all_plugins = get_plugins();

foreach($active_plugins as $plugin){
    $plugin_data = $all_plugins[$plugin];
    echo $plugin_data['Name'] . ' - ' . $plugin_data['Version'];
}

Per un sito WordPress Multisite:


// Plugin attivi a livello di rete
$network_plugins = get_site_option('active_sitewide_plugins');

// Plugin attivi sul sito specifico
$site_plugins = get_option('active_plugins');

// Combina entrambi gli array per avere la lista completa
$all_active_plugins = array_merge($network_plugins, $site_plugins);

// Ottieni informazioni dettagliate
$all_plugins = get_plugins();

foreach($all_active_plugins as $plugin){
    if(isset($all_plugins[$plugin])){
        $plugin_data = $all_plugins[$plugin];
        echo $plugin_data['Name'] . ' - ' . $plugin_data['Version'];
    }
}
1
Commenti
Tutte le risposte alla domanda 4
2
25

I plugin attivati sono memorizzati nella tabella delle opzioni di un blog WordPress sotto la chiave active_plugins

quindi puoi usare get_option('active_plugins'); per ogni blog e confrontare gli array.

10 giu 2012 16:24:04
Commenti

Vale la pena aggiungere che get_plugins() ti restituirà tutti i plugin, inclusi quelli inattivi.

Juniper Jones Juniper Jones
27 nov 2014 21:46:07

Ad esempio, nei test unitari non puoi usare questa opzione :) ma bella scoperta

Steve Moretz Steve Moretz
10 feb 2022 10:17:20
1
13

Nella forma di un Widget per la Dashboard, uno per i siti singoli e la Dashboard dei siti di rete, l'altro per la Dashboard della Rete Multisito.

/*
 * Widget per la Dashboard del Sito Singolo
 */
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', __( 'Plugin Attivi' ), '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); // Mostra il nome della cartella
        echo '<li>'.$string[0] .'</li>';
    }
    echo '</ul>';
}


/*
 * Widget per la Dashboard della Rete Multisito
 */
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', __( 'Plugin Attivi nella Rete' ), 'wpse_54742_active_network_plugins' );
}

function wpse_54742_active_network_plugins() {
    /*
     * Plugin Attivati a Livello di Rete
     */
    $the_plugs = get_site_option('active_sitewide_plugins'); 
    echo '<h3>ATTIVATI NELLA RETE</h3><ul>';
    foreach($the_plugs as $key => $value) {
        $string = explode('/',$key); // Mostra il nome della cartella
        echo '<li>'.$string[0] .'</li>';
    }
    echo '</ul>';


    /*
     * Itera Attraverso Tutti i Siti
     */
    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>TUTTI I SITI</h3>';

    foreach ($blogs as $blog) {
        $the_plugs = get_blog_option($blog->blog_id, 'active_plugins'); 
        echo '<hr /><h4><strong>SITO</strong>: '. get_blog_option($blog->blog_id, 'blogname') .'</h4>';
        echo '<ul>';
        foreach($the_plugs as $key => $value) {
            $string = explode('/',$value); // Mostra il nome della cartella
            echo '<li>'.$string[0] .'</li>';
        }
        echo '</ul>';
    }
}
11 giu 2012 03:38:13
Commenti

Questo è stato molto più di quanto mi aspettassi, ma apprezzo davvero il tempo che hai dedicato per fornire una risposta così dettagliata. Spero che possa aiutare qualcun altro. Grazie.

mehulved mehulved
2 set 2012 04:44:37
0

Lista dei plugin, con i siti in cui sono utilizzati (solo Multisite)

Se vuoi sapere quali plugin sono attualmente attivati e su quali siti, puoi utilizzare una funzione come questa:

function wpstars_list_active_plugins() {

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

    echo "<table class='active-plugins'>";
    echo "<tr><th>Nome plugin</th><th>Siti</th></tr>";

    $plugins = get_plugins();

    // Attivati a livello di rete
    $active_plugins = get_site_option('active_sitewide_plugins');
    foreach($active_plugins as $active_path => $active_plugin) {

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

    // Attivati per singolo sito
    $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>";
  }
}
7 feb 2017 16:40:37
0

WP-CLI è proprio quello che ci vuole. L'ho utilizzato per così tante cose che ho perso il conto!

wp plugin list --status=active

Se vuoi, puoi eseguire questi comandi sulla tua macchina locale con gli alias...

Potresti quindi usare la funzione @site

wp @all plugin list --status=active

oppure

wp @multisite list --status=active
wp @blog list --status=active
15 gen 2018 00:49:09