Cum obțin programatic o listă a pluginurilor active pe blogul meu WordPress?

10 iun. 2012, 14:48:00
Vizualizări: 32.1K
Voturi: 16

Am 2 bloguri, unul care este multisite și unul care nu este. Vreau să obțin o listă cu pluginurile active pe ambele bloguri pentru a le putea compara. Pentru blogul multisite, vreau să afișez pluginurile care sunt activate atât la nivel de rețea cât și la nivel de site.

1
Comentarii
Toate răspunsurile la întrebare 4
2
25

Plugin-urile activate sunt stocate în tabelul de opțiuni al unui blog WordPress sub cheia active_plugins

astfel încât puteți utiliza get_option('active_plugins'); pentru fiecare blog și să comparați array-urile.

10 iun. 2012 16:24:04
Comentarii

Merită să menționăm că get_plugins() vă va returna toate plugin-urile, inclusiv pe cele inactive.

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

De exemplu, în testarea unitară nu poți folosi această opțiune :) dar e o descoperire interesantă

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

Sub forma unui Widget pentru Panoul de Control, unul pentru Site-urile Individuale și Panoul de Control al Site-urilor de Rețea, altul pentru Panoul de Control al Rețelei Multisite.

/*
 * Widget pentru Panoul de Control al Site-urilor Individuale
 */
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-uri Active' ), '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); // Se va afișa numele folderului
        echo '<li>'.$string[0] .'</li>';
    }
    echo '</ul>';
}


/*
 * Widget pentru Panoul de Control al Rețelei Multisite
 */
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-uri Active în Rețea' ), 'wpse_54742_active_network_plugins' );
}

function wpse_54742_active_network_plugins() {
    /*
     * Plugin-uri Activate la Nivel de Rețea
     */
    $the_plugs = get_site_option('active_sitewide_plugins'); 
    echo '<h3>ACTIVATE LA NIVEL DE REȚEA</h3><ul>';
    foreach($the_plugs as $key => $value) {
        $string = explode('/',$key); // Se va afișa numele folderului
        echo '<li>'.$string[0] .'</li>';
    }
    echo '</ul>';


    /*
     * Iterare Prin Toate Site-urile
     */
    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>TOATE SITE-URILE</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); // Se va afișa numele folderului
            echo '<li>'.$string[0] .'</li>';
        }
        echo '</ul>';
    }
}
11 iun. 2012 03:38:13
Comentarii

A fost mult mai mult decât aveam nevoie, dar apreciez foarte mult că ți-ai dedicat timpul să oferi un răspuns atât de detaliat. Sper că va ajuta pe altcineva. Mulțumesc.

mehulved mehulved
2 sept. 2012 04:44:37
0

Lista de plugin-uri, cu site-urile pe care sunt utilizate (doar pentru Multisite)

Dacă dorești să afli care plugin este activat în prezent și pe ce site, poți utiliza o funcție precum următoarea:

function wpstars_list_active_plugins() {

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

    echo "<table class='active-plugins'>";
    echo "<tr><th>Nume plugin</th><th>Site-uri</th></tr>";

    $plugins = get_plugins();

    // Activate la nivel de rețea
    $active_plugins = get_site_option('active_sitewide_plugins');
    foreach($active_plugins as $active_path => $active_plugin) {

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

    // Activate pe fiecare site
    $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 este exact ceea ce ai nevoie. L-am folosit pentru atâtea lucruri, că am pierdut numărul!

wp plugin list --status=active

Dacă dorești, poți rula aceste comenzi pe calculatorul tău local cu aliasuri...

Apoi ai putea folosi funcția @site

wp @all plugin list --status=active

sau

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