¿Cómo puedo ocultar imágenes de la biblioteca multimedia a usuarios generales?
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.
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!

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!

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

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.
- 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.
- 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;
}
