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

9

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

  1. Verwenden des Bild-Uploaders am Frontend mit iframe.
  2. Ich habe upload_filesBenutzern auf Abonnentenebene eine Obergrenze hinzugefügt und möchte, dass sie nur Bilder sehen, die sie hochgeladen haben.
  3. Ich habe festgestellt, dass F Benutzer nur Medienbibliothekselemente anzeigen dürfen, 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 verwende, heißt "Eintrag".

  5. Wenn ich diesen Teil des Codes entferne, if( 'upload.php' != $pagenow ) return;funktioniert der Code. Ich denke, 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 benötigt wird.

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

Sisir
quelle
1
Wenn Sie Code kopieren / einfügen, gehen Sie wie folgt vor: Wenn Sie Ihren Code nur in einen Funktionsnamen eingeschlossen haben, fügen Sie bitte die richtige Anzahl von Leerzeichen hinzu, damit er functionnicht mit dem fn-Inhalt übereinstimmt.
Kaiser

Antworten:

5

Dies funktioniert bei mir, um die von einem Benutzer hochgeladenen Elemente in der Medienbibliothek 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' );

Es ermöglicht allen Benutzern mit der manage_optionsFähigkeit (normalerweise Administrator), alle Bilder zu sehen, die anderen Benutzer sehen nur ihre eigenen Bilder. Beachten Sie, dass einige Verbesserungen wie $pagenowund vorgenommen werden können current_user_can. Keine Schönheit, aber es macht den Job

user983248
quelle
2
Idealerweise würden Sie versuchen, einen Teil des wp_upload_dir()Ergebnisses zu vergleichen .
Kaiser
2

Das Medien-Upload-Formular, das ich über Thickbox aufgerufen habe, war media-upload.php. Also musste ich die Bedingung auf ändern if( 'upload.php' != $pagenow && 'media-upload.php' != $pagenow). 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;
}
Sisir
quelle