Wordpress blogumda programlı olarak aktif eklentilerin bir listesini nasıl alabilirim?


13

Biri çok siteli diğeri de olmayan 2 blogum var. Her iki blogda da eklentilerin bir listesini almak istiyorum, böylece bunları karşılaştırabilirim. Çok siteli blogda, hem ağ hem de site genelinde etkinleştirilen eklentileri listelemek istiyorum.

Yanıtlar:


20

Etkinleştirilen eklentiler, anahtarın altındaki bir WordPress Blogunun seçenekler tablosunda saklanır active_plugins

böylece get_option('active_plugins'); her blogu kullanabilir ve dizileri karşılaştırabilirsiniz.


2
Get_plugins () öğesinin, etkin olmayanlar da dahil olmak üzere tüm eklentileri vereceğini eklemeye değer.
Charles Jaimet

13

Bir Gösterge Tablosu Widget'ı biçiminde, biri Tek Siteler ve Ağ Siteleri Gösterge Tablosu, diğeri Çok Bölgeli Ağ Gösterge Tablosu için.

/*
 * 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
Bu istediğimden çok daha fazlaydı, ancak bu kadar ayrıntılı bir cevap vermek için zaman ayırmanızı gerçekten takdir ediyorum. Umarım, başka birine yardımcı olur. Teşekkür ederim.
mehulved

4

Kullanıldıkları sitelerle birlikte eklentilerin listesi (yalnızca Multisite)

Şu anda hangi eklentinin etkinleştirildiğini ve hangi sitede olduğunu bilmek istiyorsanız, bunun gibi bir işlev kullanabilirsiniz:

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 sadece bilet. Eğer çok fazla şey için sayımı kaybettiysem kullandım!

wp plugin list --status=active

İsterseniz, bu komutları yerel makinenizde takma adlarla çalıştırabilirsiniz ...

Daha sonra @site işlevini kullanırsınız

wp @all plugin list --status=active

veya

wp @multisite list --status=active
wp @blog list --status=active
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.