En el último post vimos cómo dar permisos a nuestros usuarios colaboradores para cargar archivos a la Biblioteca de Medios y poder usarlos en sus entradas. Llegados a este punto, puede que nos interese hacer que nuestros colaboradores sólo puedan ver sus propios archivos y los de nadie más.
Esto como siempre podemos implementarlo mediante código en el archivo functions.php o también mediante un sencillo plugin. Vamos a ver ambos métodos, pues cada uno tiene sus ventajas e inconvenientes.
Por un lado, usar código nos obliga a estar al tanto del Códex de WordPress por si en una futura actualización se modifica alguna función, hook o metodología, que haga errar nuestro código. En cambio ganaremos en optimización, pues los plugins que instalamos siempre incluyen archivos, funciones y código que no necesitamos.
El código:
<?php
//Limitar el acceso a la librería solo a tus propios archivos
function mostrar_solamente_archivos_del_usuario($query){
$user_id = get_current_user_id();
if($user_id && !current_user_can('activate_plugins') && !current_user_can('edit_others_posts')){
$query['author'] = $user_id;
}
return $query;
}
add_filter('ajax_query_attachments_args', 'mostrar_solamente_archivos_del_usuario');
?>
Si optamos por usar el plugin, conviene asegurarnos de que su autor lo actualiza con frecuencia para mantener la compatibilidad con las nuevas versiones de WordPress.
En este caso vamos a usar WP Users Media, que en el momento de escribir este artículo, hace unas 3 semanas que se actualizó, lo cual indica que su autor lo está manteniendo.
Su configuración es muy simple, y una vez instalado y activado nos dirigimos al menú Ajustes – WP Users Media y solo tenemos que marcar los roles a los que aplicar la restricción de ver únicamente sus archivos en la biblioteca de medios:
Si también queremos ampliar esta limitación al administrador (por si existen varios administradores en el sitio web), podemos marcar la opción:
Y eso es todo de momento. Espero que esta nueva serie de Posts ayuden a aquellos que como yo, necesitaban habilitar zonas especiales para que otros usuarios puedan añadir contenido al sitio web.
Un saludo y hasta el próximo post!
Mari dice
El codigo me marca error de sintaxis en la linea 5
Daniel, Gestionatuweb.net dice
Cierto, hay un error en el código provocado por el plugin que uso para el resaltado de códigos de ejemplo, que modifica las &&…
Ya está modificado, gracias por avisar.
Darkyx dice
Crack!! Gracias me ayudaron muchisimo.!! Buena vibra bro
Lenyman dice
Hola Daniel… gracias por el código!! Pero no me ha ido bien: luego de ponerlo al principio del functions.php de mi tema hijo me salió error 500 en el navegador y no pude volver a acceder. Tuve que editar el archivo desde mi cliente FTP para borrar el código y volver a la normalidad. Mi WordPress es 4.8.13
¿Alguna sugerencia? Me gustaría poder ocultar la librería por código, no por plugin. Gracias.
Daniel, Gestionatuweb.net dice
Hola, no lo pongas al principio, ponlo al final y asegurate que al copiar y pegar no se distorsiona el código (las comillas o algún signo de puntuación). Un saludo.
Lenyman dice
It is working!!!! 🙂
Comparto mi experiencia por si le sirve a alguien más: puse el código al final y lo revisé, pero seguía con el problema. Gracias a Dios que me iluminó justo cuando iba a darme por vencido… me dijo, hijo mío ¿por qué no sacas ese «» y pruebas?…. Así lo hice y está funcionando de maravillas!
Gracias Daniel!!
Lenyman dice
Para aclarar, donde dice ¿por qué no sacas ese «» y pruebas? me refería a las etiquetas de apertura y cierre de un archivo PHP (el sistema de comentarios me borró el texto en el comentario anterior). Por mi inexperiencia, copié todo el código tal cual…. pero al agregarlo al archivo functions NO se deben dejar dichas etiquetas. Saludos.
Daniel, Gestionatuweb.net dice
Cierto, yo incluyo las etiquetas PHP en el código para que se entienda que es código PHP, pero entiendo que si se incluyen por medio del functions.php que ya tiene las etiquetas abiertas al principio, ocasionará error.
Siempre doy por hecho que quien llega aquí y copia un código para su proyecto, tiene un mínimo de idea de lo que está haciendo 🙂
Miguel dice
Muy bueno y me ayuda un monton, pero tengo una duda y es si se puede hacer que también cada usuario tenga su propia carpeta con sus archivos/imagenes dentro.
Así de esta forma si tenemos 100 usuarios, cada uno tendría su propia carpeta (por ejemplo con el mismo nombre que el usuario) con sus imágenes que él solo podría ver y utilizar, y todo estaría mucho mas ordenado.
Por ejemplo:
Administrador tiene sus imagenes en /upload/
Perico en /upload/perico/
Antonio en /upload/antonio/
¿Eso se podría hacer? Y ¿se podría hacer que se crearan de forma automática al registrarse el usuario y si se da de baja que se borre con todo?
Gracias
dani dice
Hola, la biblioteca de medios de WordPress solo se puede clasificar de dos formas: en una única carpeta (uploads) o en subcarpetas por año y mes (upload/2020/12/). No es posible clasificarlos por nombre de usuario de forma nativa.
Para ello deberías buscar algún plugin de gestión de uploads o descargas.
Jorge Guzman dice
Hola Daniel, habría oportunidad de especificar otros permisos como que sólo los que subieron sus archivos sean los únicos que pueden borrar o editar sus archivos que puedan ser vistos por cualquier otro?
dani dice
No entiendo del todo lo que sugieres.
¿Te refieres a que todos vean los archivos de todos, pero solo puedan editar/borrar los propios?
Si es así, entonces bastaría con dar a ese rol la capacidad edit_posts:
$role = get_role(‘contributor’);
$role->add_cap(‘edit_posts’, true);
Saludos.
Hugo Arturo dice
Buen dia Daniel buen código me ayudo bastante espero puedas auyudarme o darme una orientación de como hacer que los usuarios solo puedan borrar o editar sus entradas y no la de los demás usuarios de un grupo de rol, gracias y saludos
Dani Sánchez dice
Creo que el rol que buscas es el de autor, que puede crear, editar y borrar solamente sus propias entradas. Aquí tienes una tabla con las capacidades asignadas por defecto a cada rol. https://wordpress.org/support/article/roles-and-capabilities/ Por supuesto existen funciones para añadir o quitar capacidades a los roles por defecto o crear los tuyos propios. Tengo un artículo sobre ello: https://danisanchez.net/como-crear-roles-personalizados-en-wordpress-sin-plugins/ Saludos.