¿Cómo puedo ocultar imágenes de la biblioteca multimedia a usuarios generales?

20 dic 2012, 18:57:25
Vistas: 17.2K
Votos: 5

Como administrador, me gustan mucho las características y funcionalidades del gestor multimedia de WordPress 3.5.

Sin embargo, en un sitio multiusuario, todos los usuarios pueden ver todas las imágenes en la biblioteca multimedia, independientemente de quién las haya subido. Anteriormente, un script en functions.php podía ocultar/restringir el acceso.
Por ejemplo:

// Ocultar la pestaña de Biblioteca Multimedia para cada agente individual
function remove_medialibrary_tab($tabs) {
    if ( !current_user_can( 'update_core' ) ) {
        unset($tabs['library']);
        return $tabs;
    }    }
add_filter('media_upload_tabs','remove_medialibrary_tab');

Esto ya no funciona porque creo que la biblioteca multimedia ahora está basada en JavaScript.

La pregunta: ¿cómo puedo ocultar o restringir las imágenes de la biblioteca multimedia de WordPress 3.5 para que los usuarios solo vean las imágenes que ellos subieron o las adjuntas a su publicación específica?

La estructura actual es excelente para sitios como periódicos que quieren compartir imágenes entre toda su organización, pero no es ideal para sitios que necesitan controles más estrictos con acceso multiusuario independiente.

No soy programador, o como mucho un aficionado, pero se me ocurre que las opciones podrían incluir: ocultar o eliminar mediante código todos los filtros de adjuntos en el nuevo menú desplegable de la biblioteca 3.5, dejando solo la opción "subidos a esta página", o posiblemente un interruptor que permita a los administradores activar/desactivar la visibilidad de la biblioteca multimedia para usuarios generales.

Agradecería cualquier orientación o dirección sobre este tema.

1
Comentarios
Todas las respuestas a la pregunta 3
2
11

Para permitir que los usuarios actuales solo vean sus archivos adjuntos subidos, agrega el siguiente código a las acciones de tu tema:

add_filter( 'posts_where', 'devplus_wpquery_where' );
function devplus_wpquery_where( $where ){
    global $current_user;

    if( is_user_logged_in() ){
         // usuario logueado, pero ¿estamos viendo la biblioteca?
         if( isset( $_POST['action'] ) && ( $_POST['action'] == 'query-attachments' ) ){
            // aquí puedes agregar lógica adicional si lo deseas
            $where .= ' AND post_author='.$current_user->data->ID;
        }
    }

    return $where;
}

¡Espero que esto ayude!

5 jul 2013 17:49:33
Comentarios

Probé muchas opciones para que esto funcione en el front end y con ACF. ¡Esta es la primera que me funciona. Una gran solución! ¡Gracias!

Jake Jake
1 feb 2014 03:26:46

Estaba luchando para limitar el Cargador de Medios para un formulario ACF en el frontend y que solo mostrara archivos adjuntos subidos por el usuario. No conocía posts_where - ¡Parece que funciona genial! Gracias por publicarlo.

derekshirk derekshirk
16 mar 2016 20:01:12
1

Gracias @timocouckuyt, eso funciona bien pero también necesitas este código para el enlace /wp-admin/upload.php :

add_filter('pre_get_posts', 'hide_posts_media_by_other');
function hide_posts_media_by_other($query) {
global $pagenow;

if( 'upload.php' != $pagenow || !$query->is_admin ){
    return $query;
}

if( !current_user_can( 'manage_options' ) ) {
    global $user_ID;
    $query->set('author', $user_ID );
}
return $query;
}

Para el tutorial completo sobre cómo ocultar medios y publicaciones de otros usuarios, por favor revisa este tutorial: http://jeffreycarandang.com/tutorials/hide-wordpress-posts-media-uploaded-users/

Saludos, phpbits

6 abr 2014 15:14:16
Comentarios

El enlace en esta respuesta está roto @JeffreyCarandang, ¿podrías arreglarlo por favor?

osxconor osxconor
12 oct 2021 12:11:02
0

referencia de origen: https://www.wpexplorer.com/disable-image-page/

Redirección mediante función personalizada

<?php
// Ocultar adjuntos de la vista pública redirigiendo a los usuarios
function ocultar_adjuntos_redireccionando() {
    if ( is_attachment() ) {
        global $post;
        if ( $post && $post->post_parent ) {
            wp_redirect( esc_url( get_permalink( $post->post_parent ) ), 301 );
            exit;
        } else {
            wp_redirect( esc_url( home_url( '/' ) ), 301 );
            exit;
        }
    }
}
add_action( 'template_redirect', 'ocultar_adjuntos_redireccionando' );

O

Redirección mediante el archivo image.php

Tu segunda opción es deshabilitar completamente las páginas de adjuntos añadiendo una redirección de WordPress directamente en la parte superior de tu archivo image.php.

  1. Crea un nuevo archivo llamado image.php en tu tema hijo (siempre es mejor trabajar con temas hijos al editar un tema) o si estás desarrollando tu propio tema, crea un archivo image.php vacío en tu tema.
  2. Inserta el siguiente código en tu archivo image.php.
<?php
global $post;
if ( $post && $post->post_parent ) {
    wp_redirect( esc_url( get_permalink( $post->post_parent ) ), 301 );
    exit;
} else {
    wp_redirect( esc_url( home_url( '/' ) ), 301 );
    exit;
}
1 nov 2022 18:08:11