¿Cómo usar un complemento de uso obligatorio para ocultar uno normal y ocultarse?

2

Al resolver este problema ( Cambiar el idioma de administración según el usuario (en un solo sitio) ), lo hice una función para que el complemento se oculte automáticamente de todos los usuarios excepto uno (yo :).

El defecto es que solo se oculta automáticamente cuando está activo .

Al principio, era un complemento de mu, pero tenía que habilitarlo / deshabilitarlo manualmente. Realmente no es necesario que se ejecute todo el tiempo, ya que puede ralentizar el sitio (?) O incluso contener una manipulación sensible del idioma del sitio (otro signo de interrogación).

Pero principalmente la motivación es que no quiero que el cliente active / desactive / elimine este complemento (es para mi propio uso), y no quiero que abarrote su propia lista de complementos.

Entonces, decidimos dividir las funciones en dos complementos:

  • Uno es un uso obligatorio que se usa para ocultar el normal.
  • El otro se activará / desactivará según sea necesario y es el del problema vinculado anterior.

Pero ahora me encuentro con otra pregunta: ¿Cómo ocultar un complemento de la lista de uso obligatorio? ?

    
pregunta brasofilo 31.05.2012 - 19:53

2 respuestas

4

Aparentemente, no hay forma de eliminar un complemento de la lista de usos obligatorios ...

Pero luego, encontramos un filtro que funciona incluso mejor:
show_advanced_plugins ocultará completamente la vista de los complementos de uso obligatorio.

Después de todo, si estás tratando de ocultar algo de esta naturaleza, entonces ocúltalo todo ...

Está dentro de la clase WP_Plugins_List_Table y toma dos argumentos: un booleano y el tipo de complemento ( mustuse y dropins ).

Consulte este artículo para obtener una referencia de MU y especialmente Drop-ins. Pero, por el bien de la wiki, publicaré la tabla DI al final de esta respuesta.

Actualización:
 - mu-plugin actualizado para múltiples usuarios y múltiples ocultar complementos era una cadena ahora es una matriz

El complemento Drop-in

Para probar este procedimiento necesitamos uno de esos. Cree un archivo llamado db.php en la raíz de su carpeta de contenido de wp y copie esto:

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

El complemento de uso obligatorio

Luego, este dentro de la carpeta mu-plugins , y establece los parámetros de la clase.

<?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;
    }
}

Referencia

por hakre on wordpress

    
respondido por el brasofilo 31.05.2012 - 19:53
1

Otro uso: en un entorno Multisite , supongamos que tenemos un complemento específico del sitio . No es obligatorio, pero es un complemento regular, hecho a medida para un solo sitio.

Vive en example.com/wp-content/plugins/my-plugin/my-plugin.php .

Haremos un complemento de uso obligatorio, /mu-plugins/hide-plugins.php como:

<?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;
    });
});
    
respondido por el brasofilo 30.09.2013 - 15:01

Lea otras preguntas en las etiquetas