Wie erhalte ich programmgesteuert eine Liste der aktiven Plugins in meinem WordPress-Blog?


13

Ich habe zwei Blogs, einen mit mehreren Sites und einen ohne. Ich möchte eine Liste der Plugins erhalten, die in beiden Blogs aktiv sind, damit ich sie vergleichen kann. Im Multisite-Blog möchte ich die Plugins auflisten, die sowohl für das gesamte Netzwerk als auch für die gesamte Website aktiviert sind.

Antworten:


20

Die aktivierten Plugins werden in der Optionstabelle eines WordPress-Blogs unter dem Schlüssel gespeichert active_plugins

Sie können also get_option('active_plugins'); jeden Blog verwenden und die Arrays vergleichen.


1
Es lohnt sich hinzuzufügen, dass get_plugins () alle Plugins enthält, einschließlich der inaktiven.
Charles Jaimet

13

In Form eines Dashboard-Widgets, eines für Single Sites und Network Sites Dashboard, eines für das Multisite Network Dashboard.

/*
 * 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>';
    }
}

1
Das war viel mehr als ich erwartet hatte, aber ich weiß es sehr zu schätzen, dass Sie sich die Zeit genommen haben, um eine so detaillierte Antwort zu geben. Hoffentlich hilft es jemand anderem. Danke.
Mehulved

4

Liste der Plugins mit Sites, auf denen sie verwendet werden (nur Multisite)

Wenn Sie wissen möchten, welches Plugin aktuell auf welcher Site aktiviert ist, können Sie eine Funktion wie die folgende verwenden:

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>";
  }
}

1

WP-CLI ist genau das Richtige. Ich habe es benutzt, wenn ich für so viele Dinge die Zählung verloren habe!

wp plugin list --status=active

Wenn Sie möchten, können Sie diese Befehle mit Aliasnamen auf Ihrem lokalen Computer ausführen ...

Sie würden dann die Funktion @site verwenden

wp @all plugin list --status=active

oder

wp @multisite list --status=active
wp @blog list --status=active
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.