私は自分のプラグインリストからプラグインを隠すために次のスニペットを使います:
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でこれを使用したとき、それはすべてのサイトではなくネットワーク管理者のために動作します。
私はNetwork Adminがこのタスクにactive_sitewide_plugins
フックを使うことを知りました、しかしそれをする本当の方法を見つけることができません。
FYI =>私が開発したプラグインでエラーを引き起こしていて、WordPressの腸、特にWordPressマルチサイトのまわりでトローリングしてしまいました。
WordPressのシングルサイトには「get_option」という「active_plugins」というサイトがあります。 WPマルチサイトの場合は、get_site_option、active_sitewide_pluginsです。問題は、シングルサイトがキーとして、プラグインのロード順序を表す数字を含む配列を使用することです。このような:
[0] => hello-dolly/hello.php
一方、WP multisiteは、プラグイン名をキーとして、整数値を値として持つ連想配列を使用します。このような:
[hello-dolly/hello.php] => 1369572703
より広い問題はプラグインのロード順を操作することでした。配列の種類が異なることを理解したら、is_mutisite()条件を追加して配列を適切に操作しました。配列の種類が異なる理由を見つけたら、お知らせします。
何か案は?
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の両方のリストで、問題のプラグインの存在を隠します。