it-swarm.com.de

Medienbibliothek zum Auflisten von Bildern, die nur vom Benutzer hochgeladen wurden

Ich möchte Bilder nur für vom Benutzer hochgeladene Bilder auflisten. Hier ist das Szenario:

  1. Verwendung des Bild-Uploaders im Frontend mit iframe.
  2. Ich habe upload_files cap für Benutzer auf Abonnentenebene hinzugefügt und möchte, dass sie nur Bilder sehen, die sie hochgeladen haben.
  3. Ich habe Folgendes gefunden: Q Benutzer dürfen nur Medienbibliothekselemente anzeigen, die sie hochgeladen haben? aber die akzeptierte Antwort funktioniert bei mir nicht.

    // 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. Die Frontend-Seite, die ich mit dem Bild-Uploader benutze, heißt "Eintrag".

  5. Wenn ich diesen Teil des Codes if( 'upload.php' != $pagenow ) return; entferne, funktioniert der Code. Ich glaube, ich muss diesen Teil des bedingten Codes verbessern, konnte ihn aber nicht herausfinden. Die Bedingung ist wichtig, weil ich nicht möchte, dass der Code auf anderen Seiten angewendet wird, auf denen er nicht erforderlich ist.

Also, ich brauche Hilfe, um den bedingten Teil zu verbessern, wie ich erwähnt habe. Vielen Dank!

8
Sisir

Das Medien-Upload-Formular, das ich über Thickbox abgerufen habe, war media-upload.php. Also musste ich die Bedingung auf if( 'upload.php' != $pagenow && 'media-upload.php' != $pagenow) ändern. Ich habe vergessen, in den offensichtlichen Ort zu schauen :)

// 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;
}
2
Sisir

Dies funktioniert für mich, um die von einem Benutzer in die Medienbibliothek hochgeladenen Elemente aufzulisten.

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' );

Damit können alle Benutzer mit der Funktion manage_options (normalerweise admin) alle Bilder sehen, die anderen Benutzer sehen nur ihre eigenen Bilder. Beachten Sie, dass einige Verbesserungen wie $pagenow und current_user_can vorgenommen werden können. Keine Schönheit, aber es macht den Job

4
user983248