J'utilise l'extrait de code suivant pour masquer les plugins de ma liste de plugins:
function hide_plugin_trickspanda() {
global $wp_list_table;
$hidearr = array('plugin-directory/plugin-file.php');
$myplugins = $wp_list_table->items;
foreach ($myplugins as $key => $val) {
if (in_array($key,$hidearr)) {
unset($wp_list_table->items[$key]);
}
}
}
add_action('pre_current_active_plugins', 'hide_plugin_trickspanda');
Cela fonctionne, mais lorsque je l’utilise sur un WordPress MS, cela fonctionne pour tous les sites, sauf l’administrateur réseau.
J'ai découvert que l'administrateur de réseau utilise le hook active_sitewide_plugins
pour cette tâche, mais je ne trouve aucun moyen de le faire.
Selon ce site :
FYI => Je tirais une erreur avec un plugin que j'ai développé et que j'ai fini par traîner dans les entrailles de WordPress, en particulier WordPress multisite.
Un seul site WordPress possède un site get_option ‘active_plugins’. Pour WP multi-site, il s’agit de get_site_option ‘active_sitewide_plugins '. Le problème est que, sur un seul site, un tableau avec des nombres - représentant l'ordre de chargement du plugin - est défini comme clé. Comme ça:
[0] => hello-dolly/hello.php
D'autre part, WP multisite utilise un tableau associatif avec le nom du plug-in comme clé et un entier comme valeur. Comme ça:
[hello-dolly/hello.php] => 1369572703
La question plus large était de manipuler l'ordre de chargement des plugins. Une fois que j'ai compris que les types de tableaux étaient différents, j'ai ajouté une conditionnelle is_mutisite () et manipulé les tableaux de manière appropriée. Quand je saurai pourquoi les types de tableaux sont différents, je vous le ferai savoir.
Des idées?
Il y a un filtre appelé all_plugins
qui semble faire l'affaire pour moi:
add_filter( 'all_plugins', 'wpse156903_hide_plugins' );
function wpse156903_hide_plugins( (array) $plugins ) {
// let's hide akismet
if( in_array( 'akismet/akismet.php', array_keys( $plugins ) ) ) {
unset( $plugins['akismet/akismet.php'] );
}
// hide multiple plugins
$hidearr = array(
'plugin1/plugin-file.php',
'plugin2/plugin-file2.php',
// and so on
);
foreach( $hidearr as $hide_me ) {
if( in_array( $hide_me, array_keys( $plugins ) ) ) {
unset( $plugins[$hide_me] );
}
}
return $plugins;
}
Bien sûr, vous devriez remplacer akismet/akismet.php
par le chemin de votre fichier de plugin. (J'ai choisi Akismet parce que c'est le premier plugin de la liste sur mon site.)
Cette fonction masque l'existence du plug-in en question dans les listes Réseau> Plugins et Site> Plugins .