Cuando gestionas un sitio de WordPress con varios autores y editores, todos ellos comparten una única biblioteca de medios. Esto puede convertirse en un verdadero caos, ya que cualquier creador puede accidentalmente borrar o modificar una imagen que no le pertenece. Sin embargo, existe una solución sencilla y eficaz para este problema. Con un código de apenas unas líneas, puedes restringir el acceso a la biblioteca de medios, de manera que solo los administradores tengan acceso completo. Todos los demás usuarios solo podrán ver y gestionar sus propios archivos.

El siguiente código tienes que agregarlo en el functions.php de tu tema hijo o utilizar un plugin como CODE SNIPPETS.
/**
* Restringir acceso a la biblioteca de medios para que solo los administradores tengan acceso completo.
* Los demás roles solo pueden ver sus propios archivos.
*/
function custom_restrict_media_library_by_role($query) {
// Obtener el ID del usuario actual
$current_user = wp_get_current_user();
// Verificar que el usuario no sea administrador
if ( !in_array('administrator', $current_user->roles) ) {
// Limitar la consulta para mostrar solo las imágenes subidas por el usuario actual
$query->set('author', $current_user->ID);
}
}
// Enganchar la función al gancho 'pre_get_posts' para modificar la consulta
add_action('pre_get_posts', 'custom_restrict_media_library_by_role');
Lenguaje del código: PHP (php)
Entendiendo el Código
- Función
custom_restrict_media_library_by_role:- Esta función se ejecuta cuando WordPress realiza consultas a la biblioteca de medios. Toma un parámetro
$query, que representa la consulta de WordPress.
- Esta función se ejecuta cuando WordPress realiza consultas a la biblioteca de medios. Toma un parámetro
- Obtención del Usuario Actual:
wp_get_current_user()se utiliza para obtener el objeto del usuario actualmente autenticado en WordPress, representado por$current_user.
- Verificación del Rol:
- Se verifica si el usuario actual no tiene el rol de ‘administrator’ (administrador). Esto se realiza con
!in_array('administrator', $current_user->roles). Si el usuario es administrador, no se aplica ninguna restricción adicional.
- Se verifica si el usuario actual no tiene el rol de ‘administrator’ (administrador). Esto se realiza con
- Limitación de la Consulta:
- Si el usuario no es administrador, se limita la consulta para que solo recupere las imágenes subidas por el usuario actual. Esto se logra mediante
$query->set('author', $current_user->ID), donde'author'es el parámetro de consulta que limita los resultados al autor (usuario) específico.
- Si el usuario no es administrador, se limita la consulta para que solo recupere las imágenes subidas por el usuario actual. Esto se logra mediante
- Enganche de la Función:
add_action('pre_get_posts', 'custom_restrict_media_library_by_role')asegura que la funcióncustom_restrict_media_library_by_rolese ejecute antes de que WordPress realice la consulta a la biblioteca de medios (pre_get_postses el gancho de acción utilizado para modificar consultas antes de que se ejecuten).
Funcionamiento:
- Cuando un usuario intenta acceder a la biblioteca de medios en WordPress, WordPress realiza una consulta para obtener los elementos que se mostrarán.
- La función
custom_restrict_media_library_by_roleinterviene antes de que se ejecute la consulta (pre_get_posts) y verifica el rol del usuario. - Si el usuario no es un administrador, se modifica la consulta para limitarla a mostrar solo los archivos (imágenes en este caso) que fueron subidos por ese usuario específico.
- Esto asegura que los usuarios que no son administradores solo puedan ver y administrar sus propios archivos en la biblioteca de medios, manteniendo la seguridad y la organización de los recursos multimedia en el sitio.
Este enfoque es útil en sitios con múltiples colaboradores, donde es crucial evitar que los usuarios accedan y modifiquen archivos que no les corresponden, al tiempo que permite a los administradores mantener el control total sobre la biblioteca de medios.
Nos vemos en el siguiente tutorial.
Un saludo.




Deja tus opiniones o dudas en los comentarios.