Как программно получить список активных плагинов в WordPress?

10 июн. 2012 г., 14:48:00
Просмотры: 32.1K
Голосов: 16

У меня есть 2 блога: один с multisite, другой - обычный. Я хочу получить список активных плагинов на обоих блогах для сравнения. На multisite блоге мне нужно получить плагины, которые активированы как на уровне сети (network-wide), так и на уровне отдельных сайтов.

1
Комментарии
Все ответы на вопрос 4
2
25

Активированные плагины хранятся в таблице опций блога WordPress под ключом active_plugins

Таким образом, вы можете использовать get_option('active_plugins'); для каждого блога и сравнивать массивы.

10 июн. 2012 г. 16:24:04
Комментарии

Стоит добавить, что get_plugins() возвращает все плагины, включая неактивные.

Juniper Jones Juniper Jones
27 нояб. 2014 г. 21:46:07

Например, при модульном тестировании вы не можете использовать эту опцию :) но хорошая находка

Steve Moretz Steve Moretz
10 февр. 2022 г. 10:17:20
1
13

В виде виджета для панели управления: один для одиночных сайтов и панели управления сайтов сети, другой — для панели управления мультисайтовой сети.

/*
 * Виджет для панели управления одиночного сайта
 */
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', __( 'Активные плагины' ), '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); // Будет отображаться имя папки
        echo '<li>'.$string[0] .'</li>';
    }
    echo '</ul>';
}


/*
 * Виджет для панели управления мультисайтовой сети
 */
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', __( 'Активные плагины сети' ), 'wpse_54742_active_network_plugins' );
}

function wpse_54742_active_network_plugins() {
    /*
     * Плагины, активированные для всей сети
     */
    $the_plugs = get_site_option('active_sitewide_plugins'); 
    echo '<h3>АКТИВИРОВАНЫ ДЛЯ СЕТИ</h3><ul>';
    foreach($the_plugs as $key => $value) {
        $string = explode('/',$key); // Будет отображаться имя папки
        echo '<li>'.$string[0] .'</li>';
    }
    echo '</ul>';


    /*
     * Перебор всех сайтов
     */
    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>ВСЕ САЙТЫ</h3>';

    foreach ($blogs as $blog) {
        $the_plugs = get_blog_option($blog->blog_id, 'active_plugins'); 
        echo '<hr /><h4><strong>САЙТ</strong>: '. get_blog_option($blog->blog_id, 'blogname') .'</h4>';
        echo '<ul>';
        foreach($the_plugs as $key => $value) {
            $string = explode('/',$value); // Будет отображаться имя папки
            echo '<li>'.$string[0] .'</li>';
        }
        echo '</ul>';
    }
}
11 июн. 2012 г. 03:38:13
Комментарии

Это было гораздо больше, чем я ожидал, но я искренне благодарен вам за потраченное время на такой подробный ответ. Надеюсь, он поможет кому-то еще. Спасибо.

mehulved mehulved
2 сент. 2012 г. 04:44:37
0

Список плагинов с сайтами, на которых они используются (только для Multisite)

Если вы хотите узнать, какие плагины активны в данный момент и на каких сайтах, можно использовать такую функцию:

function wpstars_list_active_plugins() {

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

    echo "<table class='active-plugins'>";
    echo "<tr><th>Название плагина</th><th>Сайты</th></tr>";

    $plugins = get_plugins();

    // Активированные для всей сети
    $active_plugins = get_site_option('active_sitewide_plugins');
    foreach($active_plugins as $active_path => $active_plugin) {

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

    // Активированные для отдельных сайтов
    $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 февр. 2017 г. 16:40:37
0

WP-CLI – это именно то, что нужно. Я использовал его для стольких задач, что уже сбился со счёта!

wp plugin list --status=active

При желании вы можете выполнять эти команды на локальной машине с использованием алиасов...

Затем вы сможете использовать функцию @site

wp @all plugin list --status=active

или

wp @multisite list --status=active
wp @blog list --status=active
15 янв. 2018 г. 00:49:09