Как использовать плагин Must-Use, чтобы скрыть обычный и скрыть себя?

При решении этой проблемы ( измените язык администратора на основе пользователя (на одном сайте) ), я сделал функцию, чтобы плагин автоматически скрывался от всех пользователей, кроме одного (мне :).

Недостаток в том, что он только авто-скрывается, когда активен .

Сначала это был mu-plugin, но мне пришлось включить / отключить его вручную. Это действительно не нужно запускать все время, так как это может замедлить работу сайта (?) Или даже содержать некоторые чувствительные манипуляции с языком сайта (другой знак вопроса).

Но главным мотивом является то, что я не хочу, чтобы клиент активировал / деактивировал / удалял этот плагин (для моего собственного использования) и не хочу, чтобы он загромождал собственный список плагинов.

Итак, решили разделить функции в двух плагинах:

  • Один из них – обязательное использование, используемое для скрытия обычного.
  • Другой будет активирован / деактивирован по необходимости и является одним из вышеупомянутых проблем.

Но теперь у меня возникает другой вопрос: как скрыть один плагин из списка обязательного использования ?

Solutions Collecting From Web of "Как использовать плагин Must-Use, чтобы скрыть обычный и скрыть себя?"

По-видимому, нет способа удалить один плагин из списка Must-Use …

Но затем нашел фильтр, который еще лучше:
show_advanced_plugins полностью скроет вид плагинов Must-Use.

В конце концов, если вы пытаетесь скрыть что-то подобное, тогда скройте все это …

Он находится внутри класса WP_Plugins_List_Table и принимает два аргумента: логический и тип плагина ( mustuse и dropins ).

Проверьте эту статью для справки MU и специально Drop-ins. Но, ради вики, я отправлю таблицу DI в конце этого ответа.


Обновить:
mu-plugin обновлен для нескольких пользователей, а несколько скрытых плагинов – это строка, теперь это массив


Плагин Drop-in

Для тестирования этой процедуры нам нужен один из них. Создайте файл с именем db.php в корневой папке вашего wp-содержимого и скопируйте это:

 <?php /* Plugin Name: Just for testing Drop-ins Version: 0.1 Author: WPSE-53866 Author URI: http://wordpress.stackexchange.com/ */ 

Плагин Must-use

Затем, это внутри папки mu-plugins и задайте параметры класса.

 <?php /* Plugin Name: Hide Must-Use and Drop-ins from the Plugins listing Plugin URI: http://wordpress.stackexchange.com/questions/53866 Description: Used to hide the Must-Use and Drop-ins plugins from all users except one. Also can hide a selected plugin from the regular list, be it active or not. Version: 1.1 Author: brasofilo AuthorURI: http://wordpress.stackexchange.com/users/12615/ */ /** * Parameters of the class - sorry for the non-standard documentation * * @super_admin : array (required) : the users which are able to see everything * @can_see_mustuse : boolean (required) : can other users see the Must-Use list? * @can_see_dropins : boolean (required) : can other users see the Drop-ins list? * @hide_this_one : array (optional) : plugins to hide in the regular listing * * Reference article for Must-Use and Drop-ins * http://hakre.wordpress.com/2010/05/01/must-use-and-drop-ins-plugins/ */ add_action('admin_init', 'wpse_53866_fire_plugin'); function wpse_53866_fire_plugin() { global $pagenow; if( 'plugins.php' != $pagenow) return; $wpse53866_HideAdvancedPlugins_instance = new Wpse53866_HideAdvancedPlugins( array( 'super_admin' => array('Rodolfo','roda'), 'can_see_mustuse' => false, 'can_see_dropins' => true, 'hide_this_ones' => array( 'set-user-locale.php', 'akismet/akismet.php' ) ) ); } class Wpse53866_HideAdvancedPlugins { public function __construct($data) { $this->user = $data['super_admin']; $this->mustuse = $data['can_see_mustuse']; $this->dropins = $data['can_see_dropins']; $this->hide = isset( $data['hide_this_ones'] ) ? $data['hide_this_ones'] : false; if($this->hide) add_filter( 'all_plugins', array(&$this, 'on_list_plugins' ) ); add_filter( 'show_advanced_plugins', array(&$this, 'on_list_advanced' ), 10, 2 ); } public function on_list_plugins($plugins) { global $current_user; if( ! in_array( $current_user->user_login, $this->user ) ) { foreach( $this->hide as $plug ) unset( $plugins[$plug] ); } return $plugins; } public function on_list_advanced($show, $type) { global $current_user; if( ! in_array( $current_user->user_login, $this->user ) ) { if( 'mustuse' == $type ) return $this->mustuse; if( 'dropins' == $type ) return $this->dropins; } return true; } } 

Справка

by hakre on wordpress

список плагинов всплывающих окон

Другое использование: в среде Multisite предположим, что у нас есть плагин, специфичный для сайта . Не обязательно использовать, но обычный плагин, выполненный только для одного сайта.

Он живет на example.com/wp-content/plugins/my-plugin/my-plugin.php .

Мы /mu-plugins/hide-plugins.php плагин Must Use, /mu-plugins/hide-plugins.php например:

 <?php /** * Plugin Name: One site only * Description: Hide site specific plugin from other sites **/ add_action('plugins_loaded', function () { # Set filter to all sites, except ID 15 $blog_id = get_current_blog_id(); if( $blog_id == 15 ) return; # Alternative for subdomain installs // if( 'example.com' !== $_SERVER['SERVER_NAME'] ) add_filter( 'all_plugins', function( $plugins ) { unset( $plugins['my-plugin/my-plugin.php'] ); return $plugins; }); });