我使用以下代码段从插件列表中隐藏插件:
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\');
这是可行的,但当我在WordPress MS上使用它时,它适用于所有站点,但网络管理员除外。
我发现网络管理员使用active_sitewide_plugins
钩住这个任务,但我找不到任何真正的方法来完成它。
根据this site:
仅供参考=>我开发的插件出现了一个错误,最终在WordPress内部徘徊,尤其是WordPress multisite。
WordPress single site有一个site get\\u选项“active\\u plugins”。对于WP multisite,它有get\\u site\\u选项“active\\u sitewide\\u plugins”。问题是,单个站点使用一个数组,其中的数字表示插件的加载顺序。像这样:
[0]=>你好,多莉/你好。php
另一方面,WP multisite使用一个关联数组,以插件名称作为键,以某个整数作为值。像这样:
[你好dolly/hello.php]=>1369572703
更广泛的问题是操纵插件的加载顺序。一旦我理解了数组类型的不同,我就添加了一个is\\u multisite()条件并适当地操作了数组。当我找到阵列类型不同的原因时,我会让您知道。
有什么想法吗?
最合适的回答,由SO网友:Pat J 整理而成
有一个过滤器叫做all_plugins
这似乎对我起到了作用:
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;
}
你当然会替换
akismet/akismet.php
插件文件的路径。(我选择Akismet是因为它是我网站列表中的第一个插件。)
此函数在Network > Plugins 和Site > Plugins 列表。