✅Cómo Restringir la Biblioteca de Medios en WordPress por Usuario (Sin Plugins)

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.

restringir acceso biblioteca de medios wordpress

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

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. Enganche de la Función:
    • add_action('pre_get_posts', 'custom_restrict_media_library_by_role') asegura que la función custom_restrict_media_library_by_role se ejecute antes de que WordPress realice la consulta a la biblioteca de medios (pre_get_posts es 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_role interviene 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.

Compartir Artículo