El plugin Download Monitor para WordPress es un plugin gratuito para manejar la descarga de archivos. Permite crear distintas categorías de descarga y subir los archivos deseados a cada una de esas categorías. Se pueden incluir distintas versiones de un mismo archivo y hay distintas plantillas para mostrar los archivos en el frontend.

Además, en su versión gratuita, incluye la funcionalidad de capar el acceso de esos archivos, permitiendo que pueda acceder todo el mundo o sólo los miembros. Pero esta restricción de contenidos que viene por defecto sólo permite restringir el acceso a los archivos entre usuarios registrados y no registrados. Esta restricción, generalmente, será suficiente. Pero puede haber casos en los que no lo sea, por ejemplo, queremos que los archivos sólo sean accesibles a los usuarios de un determinado rol, suscripción o membresía, no para cualquier usuario registrado.

 

Otra pega de este sistema es que tenemos que ir incluyendo esta restricción documento por documento. Es decir, cuando subimos un determinado documento, al igual que indicamos la categoría a la que pertenece, indicamos si es público o sólo para miembros. No es que añada mucho más trabajo, pero si todos nuestros documentos van a ser privados, ¿por qué vamos a tener que perder tiempo o hacérselo perder a los administradores de la web?

Tened en cuenta que, aunque uséis un plugin a mayores de control de la privacidad / restricción de contenidos para roles o miembros, generalmente ese plugin os ayudará a ocultar los listados de documentos en la web, pero si un usuario sabe la URL del archivo, difícilmente le impedirá descargarse el archivo si utiliza la URL. Por eso, es mejor utilizar el método integrado en el plugin, aunque sean necesarias ciertas variaciones para que se adapte a nuestras necesidades. Hay una extensión de pago para este plugin que permite llevar un control de acceso avanzado y os vamos a hablar de ella, pero también os vamos a dar instrucciones para que con un par de modificaciones en el código fuente, lo podáis gratis.

 

Opción 1: Manejar los permisos de descarga de documentos con Donwload Monitor a través de la extensión Advanced Access Manager

El addon Advanced Access Manager para Download Monitor permite crear limitaciones de descarga adicionales tanto a nivel de documento como a nivel global, para todos los documentos.  Aquí os dejamos el enlace a la extensión:

Para permitir la descarga de todos los documentos solo a un determinado rol, utilizaríamos las «Reglas Globales» del plugin. Estas reglas permiten mirar primero si el documento tiene alguna condición particular y, si no es así, se aplican las reglas globales.

 

Además, permite crear otra serie de reglas o restricciones, limitando la descarga a usuarios concretos, IP’s o poniendo número límite de descargas, rangos de fechas, etc.

 

Opción 2: Modificación en el plugin Download Monitor para permitir restricciones globales según los roles de usuario

Aquí os vamos a dar instrucciones de cómo modificar el plugin de WordPress Download Monitor para que todas las descargas sean privadas y os indicaremos cómo indicar que sólo sean visibles para determinados roles o miembros.

Deberemos modificar el archivo DownloadHandler.php ubicado en la siguiente ruta:

/wp-content/plugins/download-monitor/src/DownloadHandler.php

De hecho, lo más correcto es copiar ese archivo y crear una carpeta en vuestro tema, aún mejor tema hijo, con el nombre downloadmonitor, donde ubicar la carpeta src y, ahí, la copia de ese archivo, para hacer ahí las modificaciones y no en el archivo original. Esto permite actualizar el plugin en un futuro sin que la modificación se sobrescriba.

Vamos a editar la función check_members_only, que en nuestra versión de Download Monitor está en la línea 47, pero esto puede variar. Os recomendamos que busquéis la cadena

public function check_members_only( $can_download, $download )

en el archivo.

Para incluir la regla global de que sólo los usuarios registrados puedan descargar archivos

Podéis sustituir el código de la función por este otro:

public function check_members_only( $can_download, $download ) {
$can_download = false;
// Check if user is logged in
if ( is_user_logged_in() ) {
$can_download = true;
}
return $can_download;
}

Indicamos que, por defecto, no se pueden descargar los archivos:

$can_download = false;

y, después, comprobamos que el usuario haya iniciado sesión. Si os vale con que cualquier usuario haya iniciado sesión, os valdría sólo con esta condición

if ( is_user_logged_in() ) { $can_download = true; }

 

Para incluir la regla global de que sólo los usuarios de un determinado rol puedan descargar archivos

Podéis sustituir el código de la función por este otro:

public function check_members_only( $can_download, $download ) {
$can_download = false;
// Check if user is logged in
if ( is_user_logged_in() ) {
$user = wp_get_current_user();
if( ! empty( $user ) && in_array( "administrator", (array) $user->roles ) ) {
$can_download = true;
}
}

return $can_download;
}

Indicamos que, por defecto, no se pueden descargar los archivos:

$can_download = false;

y, después, comprobamos que el usuario haya iniciado sesión.

if ( is_user_logged_in() ) {

Si el usuario ha iniciado sesión, comprobamos que su rol de usuario coincida con el rol al que queremos dar permiso. Este código tiene en cuenta que un usuario puede tener varios roles.

if( ! empty( $user ) && in_array( "administrator", (array) $user->roles ) ) { $can_download = true; }

En este ejemplo estamos utilizando el rol «administrador» como rol que tiene permiso para la descarga de documentos, pero podéis usar el rol que queráis, incluidos roles creados con plugins externos.

 

Para incluir la regla global de que sólo los usuarios que son miembros (pertenecen a una determinada suscripción o membresía) puedan descargar archivos

Podéis sustituir el código de la función por este otro:

public function check_members_only( $can_download, $download ) {
$can_download = false;
// Check if user is logged in
if ( is_user_logged_in() ) {
$user = wp_get_current_user();
if ( wc_memberships_is_user_active_member ( $user->id, 'nombre-plan' )) {
$can_download = true;
}
}

return $can_download;
}

Indicamos que, por defecto, no se pueden descargar los archivos:

$can_download = false;

y, después, comprobamos que el usuario haya iniciado sesión.

if ( is_user_logged_in() ) {

Si el usuario ha iniciado sesión, deberemos incluir la condición que compruebe que pertenece a una determinada membresía. En nuestro ejemplo utilizamos el plugin WooCommerce Memberships para crear y gestionar miembros dentro de WordPress y la función que permite realizar la comprobación para ese plugin es:

if ( wc_memberships_is_user_active_member ( $user->id, 'socios-acecale' )) {

Si utilizáis cualquier otro plugin de gestión de miembros, no tendréis que usar esta función sino la proporcionada por vuestro plugin.