Bagaimana cara saya mendapatkan daftar plugin aktif di blog wordpress saya secara terprogram?

13

Saya memiliki 2 blog, yang multisite dan yang tidak. Saya ingin mendapatkan daftar plugin yang aktif di kedua blog sehingga saya dapat membandingkannya. Di blog multisite, saya ingin membuat daftar plugin yang diaktifkan di seluruh jaringan serta di seluruh situs.

mehulved
sumber

Jawaban:

20

Plugin yang diaktifkan disimpan dalam tabel opsi Blog WordPress di bawah tombol active_plugins

sehingga Anda dapat menggunakan get_option('active_plugins'); setiap blog dan membandingkan array.

Bainternet
sumber
2
Layak menambahkan bahwa get_plugins () akan memberi Anda semua plugin termasuk yang tidak aktif.
Charles Jaimet
13

Dalam bentuk Dasbor Widget, satu untuk Situs Tunggal dan Dasbor Situs Jaringan, lainnya untuk Dasbor Jaringan 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
sumber
1
Ini jauh lebih dari yang saya butuhkan, tetapi sangat menghargai Anda meluangkan waktu untuk memberikan jawaban terperinci seperti itu. Semoga ini bisa membantu orang lain. Terima kasih.
mehulved
4

Daftar plugin, dengan situs yang digunakan (hanya multisite)

Jika Anda ingin tahu plugin mana yang saat ini diaktifkan dan di situs mana, Anda dapat menggunakan fungsi seperti itu:

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 dari WP-Stars.com
sumber
1

WP-CLI hanyalah tiketnya. Saya telah menggunakan jika untuk banyak hal, saya kehilangan hitungan!

wp plugin list --status=active

Jika mau, Anda dapat menjalankan perintah ini di mesin lokal Anda dengan alias ...

Anda kemudian akan menggunakan fungsi @site

wp @all plugin list --status=active

atau

wp @multisite list --status=active
wp @blog list --status=active
ecotechie
sumber