Cum obțin programatic o listă a pluginurilor active pe blogul meu WordPress?
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.
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>';
}
}

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

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
