WordPress Dateitypen Uploads nach Benutzertyp einschränken

Ich versuche, alle Benutzer (außer Admins) einzuschränken, nur Bilder hochladen zu können, zB JPGs und PNGs, die allen Benutzern erlaubt sind, aber trotzdem erlauben, dass sie PDFs hochladen usw. (Oder noch besser wäre, nur unregistrierte Benutzer vom Hochladen abzuhalten) alles andere als JPGs und PNGs!)

Ich habe den folgenden functions.php Code versucht, aber es scheint immer noch Admins vom Hochladen von PDFs zu beschränken:

add_filter('upload_mimes','restict_mime'); function restict_mime($mimes) { if(!current_user_can('administrator')){ $mimes = array( 'jpg|jpeg|jpe' => 'image/jpeg', 'png' => 'image/png', ); } return $mimes; } 

Irgendwelche Ideen?

Solutions Collecting From Web of "WordPress Dateitypen Uploads nach Benutzertyp einschränken"

In Ihrem Konditional gibt es einen Syntaxerrors:

current_user_can('administrator')

Der Eingabewert wird stattdessen in ' ' , die stattdessen in ' ' werden sollen. Da 'administrator' weder eine Rolle noch eine Fähigkeit ist, wird das oben genannte immer einen falschen Wert zurückgeben

if(!current_user_can('administrator'))

gibt immer true , was den Mime-Typ für alle, einschließlich der Administratoren, einschränkt. Die richtige Form wird sein:

if(!current_user_can('administrator')) { //CODE HERE }

Der Grund, warum Ihr Code nicht funktioniert, ist, dass Sie einen Tipperrors in Ihrem Code haben. Dieser Code triggers tatsächlich einen Fehler aus. Sie können den Debug-Modus aktivieren, um den Fehler zu sehen.

Aber das stimmt nicht wirklich mit deinem Code. Was wirklich falsch ist, ist, dass Sie eine function verwenden, die eine Benutzerfunktion prüft und versucht, die Rolle eines Benutzers zu überprüfen. Dies funktioniert aufgrund der Art und Weise, wie WordPress Rollen und functionen verarbeitet, aber es ist nicht die korrekte Möglichkeit, die Rolle eines Benutzers zu überprüfen.

In der Tat wird die Verwendung einer Benutzerrolle in current_user_can() wahrscheinlich in naher Zukunft ein _doing_it_wrong() auslösen. Siehe # 38653 Führen Sie einen Fehler bei der Überprüfung eines Rollennamens als function aus . Die Verwendung von current_user_can() zum Überprüfen einer Benutzerrolle war lange Zeit falsch. Sieh diesen 2006 Pfosten, Wie man prüft, ob ein WordPress Benutzer ein “Verwalter” ist , durch WordPress Hauptentwickler Mark Jaquith

Anstelle einer Rolle sollten Sie eine function mit dieser function verwenden.

Wenn Sie die Rolle eines Benutzers überprüfen möchten, sollten Sie Folgendes tun. Es gibt wirklich keine gute Möglichkeit, zu überprüfen, welche Rolle ein Benutzer hat, da er mehrere Rollen haben kann und weil die Benutzerfunktionen nicht garantiert sind, dass sie mit den Rollen identisch sind, zu denen sie gehören.

 add_filter( 'upload_mimes', 'wpse_263936_upload_mimes' ); function wpse_263936_upload_mimes( $mimes ) { if( ! in_array( 'administrator', wp_get_current_user()->roles ) ) { $mimes = array( 'jpg|jpeg|jpe' => 'image/jpeg', 'png' => 'image/png', ); } return $mimes; } 

Wenn Sie current_user_can() weiterhin verwenden möchten, sollten Sie eine function wie ” promote_users oder ” manage_options die standardmäßig nur für die Administratorrolle gelten.

 add_filter( 'upload_mimes', 'wpse_263936_upload_mimes' ); function wpse_263936_upload_mimes( $mimes ) { if( ! current_user_can( 'promote_users' ) ) { $mimes = array( 'jpg|jpeg|jpe' => 'image/jpeg', 'png' => 'image/png', ); } return $mimes; } 

Oder Sie könnten sogar die Konstante ALLOW_UNFILTERED_UPLOADS in Ihrer wp-config.php und die function unfiltered_upload der Administratorrolle hinzufügen und danach prüfen.