Ich möchte, dass Benutzer Fotos über add_cap('upload_files')
ihre Profilseite hochladen können. In der Medienbibliothek werden jedoch alle hochgeladenen Bilder angezeigt. Wie kann ich das filtern, damit sie nur die Bilder sehen können, die sie hochgeladen haben?
Hier ist meine Lösung für den Moment ... Ich mache eine einfache WP-Abfrage und dann eine Schleife auf der "Profil" -Seite des Benutzers
$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);
Antworten:
Sie können die Medienliste immer mit einem
pre_get_posts
Filter filtern, der zuerst die Seite und die Funktionen des Benutzers bestimmt und den Autor-Parameter festlegt, wenn bestimmte Bedingungen erfüllt sind.Beispiel
Ich habe das Löschen von Seiten als Bedingung verwendet, damit Administratoren und Redakteure immer noch die vollständige Medienliste sehen.
Es gibt einen kleinen Nebeneffekt, für den ich keine Haken sehen kann, und zwar mit der Anzahl der Anhänge über der Medienliste (die immer noch die Gesamtzahl der Medienelemente anzeigt, nicht die des angegebenen Benutzers - ich würde halte dies jedoch für ein kleines Problem).
Dachte, ich würde es trotzdem posten, könnte nützlich sein ..;)
quelle
Ab WP 3.7 gibt es einen viel besseren Weg über den
ajax_query_attachments_args
Filter, wie in der Dokumentation beschrieben :quelle
Hier finden Sie eine vollständige Lösung für Posts und Medien (dieser Code richtet sich speziell an Autoren, Sie können ihn jedoch für jede Benutzerrolle ändern). Dies behebt auch die Anzahl der Posts / Medien, ohne die Kerndateien zu hacken.
quelle
$_num_posts = array();
Dies ist eine modifizierte Version der akzeptierten Antwort . Da die akzeptierte Antwort nur auf das Menüelement Medien auf der linken Seite zielt, können Benutzer beim Hochladen eines Fotos in einen Beitrag immer noch die gesamte Medienbibliothek im modalen Feld sehen. Dieser leicht geänderte Code behebt diese Situation. Die Zielbenutzer sehen nur ihre eigenen Medienelemente auf der Registerkarte Medienbibliothek des Modalfelds, das in einem Beitrag angezeigt wird.
Dies ist der Code aus der akzeptierten Antwort mit einem Kommentar, der die zu bearbeitende Zeile markiert ...
Wenn Benutzer ihre eigenen Medien nur über das Menü Medien UND die Registerkarte Medienbibliothek des Upload-Modals anzeigen möchten, ersetzen Sie die angezeigte Zeile durch ...
( Zeilenumbrüche und Abstände werden hier nur zur besseren Lesbarkeit eingefügt )
Das Folgende ist dasselbe wie oben, beschränkt sie jedoch auch darauf, ihre eigenen Beiträge über den Menüpunkt Beiträge zu sehen.
( Zeilenumbrüche und Abstände werden hier nur zur besseren Lesbarkeit eingefügt )
Anmerkungen : Wie in der akzeptierten Antwort sind die Beiträge und Medienzähler falsch. In einigen anderen Antworten auf dieser Seite finden Sie jedoch Lösungen dafür. Ich habe diese nicht einfach eingebaut, weil ich sie nicht getestet hatte.
quelle
Vollständiger Arbeitscode. Das einzige Problem ist, dass die Anzahl der Bilder in der Medienbibliothek auf der Seite "Beitrag hinzufügen" falsch ist.
quelle
media-upload.php
des Inhalts funktioniert Ihr Code nicht mit dem von der Post-Edit-Seite generierten Upload-Modus. Kann immer noch alle Bibliothekselemente sehen.t31os hat da oben eine großartige Lösung. Das einzige ist, dass die Anzahl aller Posts immer noch angezeigt wird.
Ich habe einen Weg gefunden, um zu verhindern, dass die Anzahl der Zahlen mit jQuery angezeigt wird.
Fügen Sie dies einfach Ihrer Funktionsdatei hinzu.
Es funktioniert für mich!
quelle
Ich habe mein Problem mit einer ziemlich groben, aber praktikablen Lösung gelöst.
1) Ich habe das WP Hide Dashboard-Plugin installiert, sodass dem Benutzer nur ein Link zu seinem Profilbearbeitungsformular angezeigt wird.
2) In die author.php-Vorlagendatei habe ich den oben verwendeten Code eingefügt.
3) Dann habe ich für angemeldete Benutzer einen direkten Link zur Upload-Seite "wp-admin / media-new.php" angezeigt
4) Das nächste Problem, das mir auffiel, war, nachdem sie das Foto hochgeladen hatten, dass sie zu upload.php weitergeleitet wurden ... und sie alle anderen Bilder sehen konnten. Ich habe keinen Haken in der Seite media-new.php gefunden, also habe ich mich in die zentrale Datei "media-upload.php" gehackt und sie auf ihre Profilseite weitergeleitet:
Dann ersetzt
wp_redirect( admin_url($location) );
durchwp_redirect($userredirect);
Ein paar Probleme. Erstens kann der angemeldete Benutzer immer noch zu "upload.php" gehen, wenn er weiß, dass es existiert. Sie können nichts anderes tun, als die Akten anzuschauen, und 99% der Leute wissen nicht einmal davon, aber es ist immer noch nicht optimal. Zweitens wird der Administrator nach dem Hochladen auch zur Profilseite umgeleitet. Diese Probleme können relativ einfach behoben werden, indem Benutzerrollen überprüft und nur Abonnenten umgeleitet werden.
Wenn jemand Ideen hat, wie man sich in die Medienseite einbinden kann, ohne in die Kerndateien zu gehen, würde ich das begrüßen. Vielen Dank!
quelle
admin_init
Haken, der bei jeder Administratoranforderung ausgeführt wird. Wenn ein Benutzer upload.php anfordert und Sie verhindern möchten, dass Sie diese Anforderung blockieren (z. B.wp_die('Access Denied')
) oder an einen gültigen Ort pro Hook umleiten können.Speichern Sie den obigen Code als manage_your_media_only.php, komprimieren Sie ihn, laden Sie ihn als Plugin in Ihr WP hoch und aktivieren Sie ihn.
quelle
Eine Möglichkeit, dies zu tun, ist die Verwendung des Role Scoper-Plugins , das sich auch hervorragend zum Verwalten sehr spezifischer Rollen und Funktionen eignet. Sie können den Zugriff auf Bilder in der Medienbibliothek nur für die von jedem Benutzer hochgeladenen Bilder sperren. Ich habe es für ein Projekt verwendet, an dem ich gerade arbeite, und es funktioniert gut.
quelle