Come ottenere programmaticamente l'elenco dei plugin attivi nel mio blog WordPress?
Ho 2 blog, uno che è multisite e uno che non lo è. Voglio ottenere un elenco dei plugin attivi su entrambi i blog per poterli confrontare. Sul blog multisite, voglio elencare i plugin che sono abilitati sia a livello di rete che a livello di singolo sito.
Per un sito WordPress standard (non multisite), puoi usare:
// Ottiene tutti i plugin attivi
$active_plugins = get_option('active_plugins');
// Per ottenere informazioni dettagliate sui plugin
$all_plugins = get_plugins();
foreach($active_plugins as $plugin){
$plugin_data = $all_plugins[$plugin];
echo $plugin_data['Name'] . ' - ' . $plugin_data['Version'];
}
Per un sito WordPress Multisite:
// Plugin attivi a livello di rete
$network_plugins = get_site_option('active_sitewide_plugins');
// Plugin attivi sul sito specifico
$site_plugins = get_option('active_plugins');
// Combina entrambi gli array per avere la lista completa
$all_active_plugins = array_merge($network_plugins, $site_plugins);
// Ottieni informazioni dettagliate
$all_plugins = get_plugins();
foreach($all_active_plugins as $plugin){
if(isset($all_plugins[$plugin])){
$plugin_data = $all_plugins[$plugin];
echo $plugin_data['Name'] . ' - ' . $plugin_data['Version'];
}
}
Nella forma di un Widget per la Dashboard, uno per i siti singoli e la Dashboard dei siti di rete, l'altro per la Dashboard della Rete Multisito.
/*
* Widget per la Dashboard del Sito Singolo
*/
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 Attivi' ), '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); // Mostra il nome della cartella
echo '<li>'.$string[0] .'</li>';
}
echo '</ul>';
}
/*
* Widget per la Dashboard della Rete Multisito
*/
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 Attivi nella Rete' ), 'wpse_54742_active_network_plugins' );
}
function wpse_54742_active_network_plugins() {
/*
* Plugin Attivati a Livello di Rete
*/
$the_plugs = get_site_option('active_sitewide_plugins');
echo '<h3>ATTIVATI NELLA RETE</h3><ul>';
foreach($the_plugs as $key => $value) {
$string = explode('/',$key); // Mostra il nome della cartella
echo '<li>'.$string[0] .'</li>';
}
echo '</ul>';
/*
* Itera Attraverso Tutti i Siti
*/
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>TUTTI I SITI</h3>';
foreach ($blogs as $blog) {
$the_plugs = get_blog_option($blog->blog_id, 'active_plugins');
echo '<hr /><h4><strong>SITO</strong>: '. get_blog_option($blog->blog_id, 'blogname') .'</h4>';
echo '<ul>';
foreach($the_plugs as $key => $value) {
$string = explode('/',$value); // Mostra il nome della cartella
echo '<li>'.$string[0] .'</li>';
}
echo '</ul>';
}
}

Lista dei plugin, con i siti in cui sono utilizzati (solo Multisite)
Se vuoi sapere quali plugin sono attualmente attivati e su quali siti, puoi utilizzare una funzione come questa:
function wpstars_list_active_plugins() {
if ( function_exists( 'get_sites' ) && class_exists( 'WP_Site_Query' ) ) {
echo "<table class='active-plugins'>";
echo "<tr><th>Nome plugin</th><th>Siti</th></tr>";
$plugins = get_plugins();
// Attivati a livello di rete
$active_plugins = get_site_option('active_sitewide_plugins');
foreach($active_plugins as $active_path => $active_plugin) {
$plugins[$active_path]['Sites'] = "A,";
}
// Attivati per singolo sito
$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 è proprio quello che ci vuole. L'ho utilizzato per così tante cose che ho perso il conto!
wp plugin list --status=active
Se vuoi, puoi eseguire questi comandi sulla tua macchina locale con gli alias...
Potresti quindi usare la funzione @site
wp @all plugin list --status=active
oppure
wp @multisite list --status=active
wp @blog list --status=active
