images – ¿Restringir a los usuarios para que solo vean los elementos de la biblioteca multimedia que hayan subido?

Pregunta:

Quiero que los usuarios puedan cargar fotos usando add_cap('upload_files') pero en su página de perfil, la Biblioteca de medios muestra todas las imágenes que se han 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 de 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);

Respuesta:

Siempre puede filtrar la lista de medios usando un filtro pre_get_posts que primero determina la página y las capacidades del usuario, y establece el parámetro de autor cuando se cumplen ciertas condiciones.

Ejemplo

add_action('pre_get_posts','users_own_attachments');
function users_own_attachments( $wp_query_obj ) {

    global $current_user, $pagenow;

    $is_attachment_request = ($wp_query_obj->get('post_type')=='attachment');

    if( !$is_attachment_request )
        return;

    if( !is_a( $current_user, 'WP_User') )
        return;

    if( !in_array( $pagenow, array( 'upload.php', 'admin-ajax.php' ) ) )
        return;

    if( !current_user_can('delete_pages') )
        $wp_query_obj->set('author', $current_user->ID );

    return;
}

Usé el límite de eliminación de páginas como condición para que los administradores y editores sigan viendo 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, lo haría aunque considere esto un problema menor).

Pensé que lo publicaría de todos modos, podría ser útil ..;)

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım