Biblioteca multimedia para enumerar imágenes que solo el usuario ha subido

9

Quiero enumerar imágenes solo para la imagen cargada por el usuario. Aquí está el escenario:

  1. Usando el cargador de imágenes en el front end usando iframe.
  2. He agregado upload_fileslímite a los usuarios de nivel de suscriptor y quiero que vean solo las imágenes que han subido.
  3. He encontrado esto Q ¿ Restringir a los usuarios para ver solo los elementos de la biblioteca de medios que han subido? Pero la respuesta aceptada no funciona para mí.

    // Code originally by @t31os
    add_action('pre_get_posts','users_own_attachments');
    
    function users_own_attachments( $wp_query_obj ) 
    {
        global $current_user, $pagenow;
    
        if( !is_a( $current_user, 'WP_User') )
            return;
    
        if( 'upload.php' != $pagenow )
            return;
    
        if( !current_user_can('delete_pages') )
            $wp_query_obj->set('author', $current_user->id );
    
        return;
    }
    
  4. La página frontend que estoy usando el cargador de imágenes se llama "Entrada".

  5. Si elimino esta parte del código, if( 'upload.php' != $pagenow ) return;el código funciona. Creo que tengo que mejorar esa parte del código condicional pero no pude resolverlo. El condicional es importante porque no quiero que el código se aplique en otras páginas donde no es necesario.

Entonces, necesito ayuda para mejorar la parte condicional como mencioné. ¡Gracias!

Sisir
fuente
1
Si está copiando / pegando código, haga lo siguiente: Si solo envolvió su código en un nombre de función, agregue la cantidad adecuada de espacios para functionque no se alinee con el contenido fn.
Kaiser

Respuestas:

5

Esto funciona para mí para enumerar los elementos cargados por un usuario en la biblioteca de medios.

function users_my_media_only( $wp_query ) {
    if ( false !== strpos( $_SERVER[ 'REQUEST_URI' ], '/wp-admin/upload.php' ) ) {
        $current_user = wp_get_current_user();
        $current_user = $current_user->ID;
        if ( ! current_user_can( 'manage_options' ) ) {
            global $current_user;
            $wp_query->set( 'author', $current_user->id );
        }
    }
}
add_filter('parse_query', 'users_my_media_only' );

Permitirá a todos los usuarios con la manage_optionscapacidad (generalmente administrador) ver todas las imágenes, los demás usuarios solo verán sus propias imágenes. Tenga en cuenta que se pueden hacer algunas mejoras como $pagenowy current_user_can. No es una belleza pero hace el trabajo

usuario983248
fuente
2
Lo ideal sería intentar comparar con alguna parte del wp_upload_dir()resultado.
Kaiser
2

El formulario de carga de medios que estaba extrayendo a través de thickbox era media-upload.php. Entonces, tuve que cambiar el condicional a if( 'upload.php' != $pagenow && 'media-upload.php' != $pagenow). Olvidé mirar en el lugar obvio :)

// Code originally by @t31os
add_action('pre_get_posts','users_own_attachments');

function users_own_attachments( $wp_query_obj ) 
{
    global $current_user, $pagenow;

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

    if( 'upload.php' != $pagenow && 'media-upload.php' != $pagenow)
        return;

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

    return;
}
Sisir
fuente