Quiero que los usuarios puedan subir fotos usando add_cap('upload_files')
pero en su página de perfil, la Biblioteca de medios muestra cada imagen que se ha subido. ¿Cómo puedo filtrar eso para que solo puedan ver las imágenes que cargaron?
Aquí está mi solución por el momento ... Estoy haciendo una simple consulta WP, luego un bucle en la página "Perfil" del usuario.
$querystr = " SELECT wposts.post_date,wposts.post_content,wposts.post_title, guid
FROM $wpdb->posts wposts
WHERE wposts.post_author = $author
AND wposts.post_type = 'attachment'
ORDER BY wposts.post_date DESC";
$pageposts = $wpdb->get_results($querystr, OBJECT);
Respuestas:
Siempre puede filtrar la lista de medios utilizando un
pre_get_posts
filtro que primero determina la página y las capacidades del usuario, y establece el parámetro del autor cuando se cumplen ciertas condiciones.Ejemplo
Utilicé el límite de eliminación de páginas como condición para que los administradores y editores todavía vean la lista completa de medios.
Hay un pequeño efecto secundario, para el que no puedo ver ningún gancho, y es con los recuentos de archivos adjuntos que se muestran arriba de la lista de medios (que aún mostrará el recuento total de elementos de medios, no el del usuario dado). Considere esto como un problema menor).
Pensé que lo publicaría de todos modos, podría ser útil ...;)
fuente
A partir de WP 3.7 hay una manera mucho mejor a través del
ajax_query_attachments_args
filtro, como se proporciona en la documentación :fuente
Aquí hay una solución completa para publicaciones y medios (este código es específicamente para autores, pero puede cambiarlo para cualquier rol de usuario). Esto también corrige el recuento de publicaciones / medios sin hackear los archivos principales.
fuente
$_num_posts = array();
Esta es una versión modificada de la respuesta aceptada . Dado que la respuesta aceptada solo se dirige al elemento del menú Medios a la izquierda, los usuarios aún pueden ver toda la biblioteca de medios dentro del cuadro modal al cargar una foto en una publicación. Este código ligeramente modificado corrige esa situación. Los usuarios seleccionados solo verán sus propios elementos multimedia desde la pestaña Biblioteca multimedia del cuadro modal que aparece dentro de una publicación.
Este es el código de la respuesta aceptada con un comentario que marca la línea para editar ...
Para que los usuarios solo vean sus propios medios desde el menú de medios Y la pestaña Biblioteca de medios del modo de carga, reemplace la línea indicada con esto ...
( los saltos de línea y el espaciado solo se insertan para facilitar la lectura aquí )
Lo siguiente es lo mismo que arriba pero también les restringe a ver sus propias publicaciones desde el elemento del menú Publicaciones.
( los saltos de línea y el espaciado solo se insertan para facilitar la lectura aquí )
Notas : como en la respuesta aceptada, las publicaciones y los contadores de medios estarán equivocados. Sin embargo, hay soluciones para esto en algunas otras respuestas en esta página. No los incorporé simplemente porque no los había probado.
fuente
Código de trabajo completo. El único problema es obtener un recuento incorrecto de imágenes en la biblioteca multimedia en la página Agregar publicación.
fuente
media-upload.php
, su código no funciona desde el modo de carga generado por la página Publicar edición. Todavía puedo ver todos los elementos de la biblioteca.t31os tiene una gran solución ahí arriba. Lo único es que todavía se muestra el número de todas las publicaciones.
Descubrí una manera de evitar que el recuento de números aparezca con jQuery.
Simplemente agregue esto a su archivo de funciones.
¡Me está funcionando!
fuente
Resolví mi problema con una solución bastante tosca pero factible.
1) Instalé el complemento WP Hide Dashboard, por lo que el Usuario solo vería un enlace a su formulario de edición de perfil.
2) En el archivo de plantilla author.php, inserté el código que usé anteriormente.
3) Luego, para los usuarios registrados, mostré un enlace directo a la página de carga "wp-admin / media-new.php"
4) El siguiente problema que noté fue que después de cargar la foto, los redirigiría a upload.php ... y podrían ver todas las demás imágenes. No he encontrado un enlace en la página media-new.php, así que terminé pirateando el núcleo "media-upload.php" y redirigiéndolos a su página de perfil:
Luego reemplazado
wp_redirect( admin_url($location) );
conwp_redirect($userredirect);
Sin embargo, hay un par de problemas. Primero, el usuario conectado aún puede ir a "upload.php", si sabe que existe. No pueden hacer nada excepto MIRAR los archivos, y el 99% de las personas ni siquiera lo sabrán, pero aún así no es óptimo. En segundo lugar, también redirige al administrador a la página de perfil después de cargarlo. Estos pueden tener una solución bastante simple al verificar los roles de los usuarios y solo redirigir a los suscriptores.
Si alguien tiene ideas sobre conectarse a la página de Medios sin entrar en los archivos principales, se lo agradecería. ¡Gracias!
fuente
admin_init
enlace que se ejecuta en cada solicitud de administrador. En caso de que un usuario solicite upload.php y desee evitar que pueda bloquear esa solicitud (por ejemplowp_die('Access Denied')
) o redirigir a algún lugar válido por enlace.Guarde el código anterior como manage_your_media_only.php, comprímalo, cárguelo como complemento en su WP y actívelo, eso es todo.
fuente
Una forma de hacerlo es utilizar el complemento Role Scoper , también es excelente para administrar funciones y funciones muy específicas. En realidad, puede bloquear el acceso a las imágenes en la Biblioteca de medios solo a las subidas por cada usuario. Lo he estado usando para un proyecto en el que estoy trabajando en este momento y funciona bien.
fuente