Soluciones para no mostrar determinadas extensiones en el area de administración

Cómo ocultar plugins activos en WordPress para evitar miradas curiosas

En esta serie de entradas sobre cómo ocultar, esconder y simplificar algunos elementos en WordPress, no podía faltar una manera de hacer invisibles algunos plugins activos de la lista.

Obviamente, la mejor manera de que un usuario no acceda a la sección de plugins es no dándole una cuenta de administrador. Eso está claro, pero es fácil imaginarse otras situaciones en las que esconder algunas extensiones puede ser útil. Por ejemplo cuando no queremos que un cliente vea o desactive ciertos plugins esenciales para el funcionamiento de la web, o simplemente para evitar actualizaciones imprevistas.

Si el usuario desactiva Akismet, por ejemplo, lo único que pasará es que empezará a recibir más spam. Pero si desactiva otros plugins más delicados, como los que crean campos personalizados (custom fields), tipos de entrada a medida (custom post types), widgets y shortcodes, sistemas de tienda online como WooCommerce, etc. podría hacer que la web dejara de funcionar completamente.

Educar al administrador

De todas formas, antes de decidirnos por este tipo de soluciones, deberíamos pensar bien qué rol le damos a cada usuario. Un administrador debería ser alguien que sabe lo que hace cuando recorre las páginas del panel de control de WordPress, y sobretodo, que conoce los riesgos y responsabilidades de su posición. La gestión de usuarios, de plugins, las opciones del sistema, etc. no son partes del sistema a las que tenga que acceder un usuario a toda hora.

En otras palabras, educar al cliente es lo primero. Si por alguna razón, en algún momento necesita acceso como administrador, siempre le podemos crear dos cuentas, una de ellas con menos privilegios, para el uso diario de gestión de contenidos. Así es como está pensado WordPress y así es como deberíamos resolver este tipo de conflictos.

Además, conviene ser consciente de las consecuencias de este tipo de soluciones:

  • Si ocultamos plugins de la vista, no veremos cuando hay una aviso de actualización y, por tanto, estaremos utilizando versiones potencialmente inseguras o instables.
  • Podemos olvidarnos de que hay plugins activos que no vemos y volverlos a instalar, seguramente generando todo tipo de errores y conflictos.
  • Si el proyecto tiene que pasar a manos de otros desarrolladores, al visitar la página de plugins no podrán hacerse una idea de los que están instalados y activados.

Entiendo los riesgos e inconvenientes. Dame el código ya!

Para ocultar plugins activos no es necesario instalar otro plugin, basta adjuntar una función personalizada al filtro “all_plugins”:

function mytheme_hide_plugins($plugins) {

	// Ocultamos el plugin "Hello Dolly"
	if ( is_plugin_active( 'hello.php' ) ) {
		unset( $plugins['hello.php'] );
	}

	// Ocultamos el plugin "Akismet"
	if (is_plugin_active( 'akismet/akismet.php' ) ) {
		unset( $plugins['akismet/akismet.php'] );
	}

	// Ocultamos el plugin "Contact Form 7"
	if (is_plugin_active( 'contact-form-7/wp-contact-form-7.php' ) ) {
		unset( $plugins['contact-form-7/wp-contact-form-7.php'] );
	}

	// Ocultamos el plugin "Google XML Sitemaps"
	if ( is_plugin_active( 'google-sitemap-generator/sitemap.php' ) ) {
		unset( $plugins['google-sitemap-generator/sitemap.php'] );
	}

	// Ocultamos el plugin "WordPress SEO by Yoast"
	if ( is_plugin_active( 'wordpress-seo/wp-seo.php' ) ) {
		unset( $plugins['wordpress-seo/wp-seo.php'] );
	}

	// Ocultamos el plugin "Gravity Forms"
	if ( is_plugin_active( 'gravityforms/gravityforms.php' ) ) {
		unset( $plugins['gravityforms/gravityforms.php'] );
	}

	// Ocultamos el plugin "WooCommerce"
	if ( is_plugin_active( 'woocommerce/woocommerce.php' ) ) {
		unset( $plugins['woocommerce/woocommerce.php'] );
	}

	// Ocultamos el plugin "WP-DBManager"
	if ( is_plugin_active( 'wp-dbmanager/wp-dbmanager.php' ) ) {
		unset( $plugins['wp-dbmanager/wp-dbmanager.php'] );
	}

	return $plugins;
}
add_filter( 'all_plugins', 'mytheme_hide_plugins' );

Añadiendo este fragmento de código (convenientemente adaptado a las necesidades de cada uno) en “functions.php” o en una hoja de funciones, nos permitirá instalar plugins y esconderlos de la lista, con lo cual no podrán ser desactivados, mientras siguen funcionando normalmente.

Información relacionada:
Cómo desactivar plugins sin acceso al area de administración.

Lógicamente, el código anterior incluye solo algunos ejemplos de plugins populares. Antes de utilizarlo deberíamos eliminar todo lo que no nos interese y añadir otros condicionales para plugins diferentes.

Recuerda, este código solo oculta los plugins una vez que han sido activados. Si están desactivados, aparecerán normalmente en la lista de plugins. Tampoco oculta los accesos desde el menú principal que se puedan haber creado tras la activación.

Cómo ocultar la página de plugins entera

Aparte de ocultar un plugin concreto, si lo que necesitamos es eliminar del menú principal el acceso a la página de plugins, bastaría añadir estas lineas:

/*
 * Eliminamos el acceso a la página de plugins 
 * del menú principal incluso para usuarios administradores.
 */
function mytheme_remove_from_menu() {
	remove_menu_page('plugins.php');
}
add_action('admin_menu', 'mytheme_remove_from_menu');

Esto tampoco elimina la página, solamente el acceso desde el menú de WordPress. La lista de plugins sigue siendo accesible escribiendo en la barra de direcciones del navegador esta URL: http://www.ejemplo.com/wp-admin/plugins.php.

Cómo cambiar la ruta y directorio de la carpeta de plugins

Existe la posibilidad de mover la carpeta de plugins que WordPress utiliza a un nuevo directorio y de cambiar su URL de destino. Para ello tenemos que definir las constantes WP_PLUGIN_DIR y WP_PLUGIN_URL en el archivo de configuración del sistema (wp-config.php).

WordPress utiliza estas constantes para determinar la ruta al directorio de plugins:

// Cambiar directorio de plugins
define( 'WP_PLUGIN_DIR', 'nueva/ruta/carpeta/plugins' );
define( 'WP_PLUGIN_URL', '/url/destino/plugins' );

Añadir notas en las descripciones de la página de plugins

Otra opción más para avisar de que un plugin es importante y que no debería desactivarse podría ser añadir notas individuales debajo de la descripción de cada plugin, explicando su importancia y avisando de las consecuencias de eliminarlo.

Esto se puede hacer fácilmente con “Plugin Notes“, una extensión que, aunque hace tiempo que no se actualiza, sigue funcionando bien en WordPress 3.6.

Esta solución también es útil por ejemplo cuando trabajamos en grupo o simplemente para recordarnos algo a nosotros mismos.

Para entender mejor lo que hace este plugin, mira esta captura:

Captura de Plugin Notes

Instalar plugins en el modo “Must Use”

Los Must Use Plugins o mu-plugins (extensiones de uso obligado), son como los demás, con la particularidad de que por defecto se instalan en el directorio “wp-content/mu-plugins” y que se activan automáticamente nada más subirlos al servidor.

Ruta de la carpeta mu-plugins

Aparecen en la lista de plugins del area de administración bajo la opción “Must-Use” (que en español se ha traducido por “debes usuar”).

La única manera de desactivarlos es eliminando los archivos de la carpeta “mu-plugins”.

Al no aparecer en la lista, con este método tampoco podremos saber cuándo hay actualizaciones, por lo que tendremos que revisar y sustituir los archivos manualmente.

Si queremos activar esta opción solo tenemos que:

  1. Por FTP, crear una carpeta nueva llamada “mu-plugins” dentro de “wp-content”
  2. Subir los archivos del plugin a mano a la nueva carpeta que acabamos de crear

Como hemos dicho, no es necesario activarlos, funcionan inmediatamente, por lo que conviene ir con cuidado y revisar que no contengan errores o que sean compatibles con la versión de WordPress que tengamos instalada.

Comentarios

  1. Alex

    Hola.
    Muy buen post. Lo que a mi me gustaria saber es como cambiarle el nombre a la carpeta “Plugins” por otro nombre para que no aparezca en la url.
    ¿Me podrias ayudar?
    Gracias

  2. Daniel

    Hola Alex. En ese caso tendrías que definir dos constantes nuevas en el archivo de configuración (wp-config.php):

    define( ‘WP_PLUGIN_DIR’, ‘nueva/ruta/carpeta/plugins’ );
    define( ‘WP_PLUGIN_URL’, ‘/url/destino/plugins’ );

  3. Janis

    Muy pocos plugins must use van a funcionar instalando de esta manera. Obligatorio es tener fichero .php en el directorio mu-plugins y no en subdirectorio.

  4. Su

    Hola, y si solo quieres ocultarlos dependiendo del tipo de usuario que entre??

  5. Daniel

    Hola Su. Los plugins ya están ocultos por defecto para todos los tipos de usuarios excepto administradores. No hay que hacer nada más para ocultarlos.

    Si se trata de esconder ciertos plugins sólo para determinados administradores, podrías usar algún condicional basado en el ID del usuario, los permisos, etc. Aquí encontrarás algunos ejemplos: Mostrar contenido en WordPress según el usuario que está conectado

  6. Jesus

    Hola, no se si me podras ayudar. Tengo un ligero conflicto. Estoy haciendo una tienda online (mi primera) para otra persona en wordpress. Es una web que está alojada en mi hosting y solo asocio su dominio a la tienda.
    Había pensado crear un roll de “manager” para que pudiera entrar y gestionar la tienda pero sin poder tocar nada de los plugins, ajustes, etc. Pero me pregunto que pensara cuando entre en “Usuarios” y vea que hay un administrador (que no es de la tienda) que puede ver todos su movimientos de la tienda. No creo que le haga gracia.
    No sé si facilitarle los datos y recomendarle que no entre nunca como administrador sino como manager para que no pueda tocar o cambiar nada sin querer.
    Pero me queda la duda de si facilitándole los datos de administrador puede hacer algo que me pueda perjudicar al estar en mi hosting ademas de poder hacer un clone de la pagina y eso no me interesa.
    Un saludo y gracias por compartir con tu web tanta información.

  7. herculano

    Olá tudo bom? Eu joguei isso no meu functions.php e aconteu um bug, em todas as minhas paginas aparece o codigo:

    function mytheme_hide_plugins($plugins) { 
     
        if (is_plugin_active( 'wp-postratings/wp-postratings.php' ) ) {
            unset( $plugins['wp-postratings/wp-postratings.php'] );
        }
     
        if ( is_plugin_active( 'wordpress-seo/wp-seo.php' ) ) {
            unset( $plugins['wordpress-seo/wp-seo.php'] );
        }
     
        return $plugins;
    }
    add_filter( 'all_plugins', 'mytheme_hide_plugins' );
    

    Ate removi comentarios para melhorar, mas nao deu certo, nao funciona.
    Meus cumprimentos.

Y tú qué opinas?

Las URLs se convertirán en enlaces automáticamente. Tu dirección de email no se publicará ni se utilizará para enviar ningún tipo de información. Los mensajes que no aporten nada al tema que se trata en esta entrada se borrarán. Las imágenes que aparecen al lado de cada autor utilizan el servicio de Gravatar. Recuerda que puedes usar etiquetas HTML como <a href>, <code>, <em> o <strong> en los comentarios.

(necesario)

(opcional)