Chcę, aby użytkownicy mogli przesyłać zdjęcia przy użyciu, add_cap('upload_files')
ale na stronie profilu w bibliotece multimediów wyświetlane są wszystkie przesłane zdjęcia. Jak mogę filtrować, że tak, że mogą jedynie przeglądać obrazy one załadowane?
Oto moje rozwiązanie na chwilę… Wykonuję proste zapytanie WP, a następnie zapętlam stronę użytkownika „Profil”
$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);
Odpowiedzi:
Zawsze możesz przefiltrować listę multimediów za pomocą
pre_get_posts
filtra, który najpierw określa stronę oraz możliwości użytkownika i ustawia parametr autora, gdy zostaną spełnione określone warunki.Przykład
Jako warunku użyłem cap stron usuwania, więc administratorzy i redaktorzy nadal widzą pełną listę multimediów.
Jest jeden mały efekt uboczny, dla którego nie widzę żadnych haczyków, a to z liczbą załączników pokazaną nad listą multimediów (która nadal będzie pokazywać całkowitą liczbę elementów multimedialnych, a nie danego użytkownika - chciałbym uważają to za drobny problem).
Pomyślałem, że mimo wszystko to opublikuję, może się przydać ..;)
źródło
Począwszy od WP 3.7 istnieje znacznie lepszy sposób przez
ajax_query_attachments_args
filtr, jak podano w dokumentacji :źródło
Oto kompletne rozwiązanie zarówno dla postów, jak i dla mediów (ten kod jest specjalnie dla autorów, ale możesz go zmienić dla dowolnej roli użytkownika). To także naprawia liczbę postów / multimediów bez włamywania się do podstawowych plików.
źródło
$_num_posts = array();
To jest zmodyfikowana wersja zaakceptowanej odpowiedzi . Ponieważ zaakceptowana odpowiedź jest skierowana tylko na pozycję menu Media po lewej stronie, użytkownicy nadal mogą zobaczyć całą bibliotekę multimediów w polu modalnym podczas przesyłania zdjęcia do posta. Ten nieznacznie zmodyfikowany kod naprawia tę sytuację. Docelowi użytkownicy zobaczą tylko własne elementy multimedialne z zakładki Biblioteka multimediów w polu modalnym, które pojawia się w poście.
To jest kod z zaakceptowanej odpowiedzi z komentarzem oznaczającym linię do edycji ...
Aby użytkownicy mogli wyświetlać tylko własne multimedia z menu Media ORAZ zakładki Biblioteka multimediów w module przesyłania, zastąp wskazaną linię tym ...
( wstawiono tutaj podział wiersza i odstępy tylko dla czytelności )
Poniższe czynności są takie same jak powyżej, ale ograniczają również ich dostęp do własnych postów z pozycji menu Posty.
( wstawiono tutaj podział wiersza i odstępy tylko dla czytelności )
Uwagi : podobnie jak w zaakceptowanej odpowiedzi posty i liczniki mediów będą błędne. Istnieją jednak rozwiązania tego problemu w niektórych innych odpowiedziach na tej stronie. Nie włączyłem ich po prostu dlatego, że ich nie przetestowałem.
źródło
Kompletny działający kod. Jedynym problemem jest błędna liczba zdjęć w bibliotece multimediów na stronie Dodaj wpis.
źródło
media-upload.php
kod, Twój kod nie działa z modalu przesyłania wygenerowanego przez stronę edycji postów. Nadal widzi wszystkie elementy biblioteki.t31os ma tam świetne rozwiązanie. Jedyną rzeczą jest to, że wciąż wyświetla się liczba wszystkich postów.
Wymyśliłem sposób, aby nie wyświetlać liczby przy użyciu jQuery.
Po prostu dodaj to do pliku funkcji.
To działa dla mnie!
źródło
Rozwiązałem swój problem dość szorstkim, ale wykonalnym rozwiązaniem.
1) Zainstalowałem wtyczkę WP Hide Dashboard, aby użytkownik widział tylko link do formularza edycji profilu.
2) W pliku szablonu autor.php wstawiłem kod, którego użyłem powyżej.
3) Następnie dla zalogowanych użytkowników wyświetliłem bezpośredni link do strony przesyłania „wp-admin / media-new.php”
4) Kolejnym problemem, który zauważyłem, było to, że po przesłaniu zdjęcia przekieruje ich na upload.php ... i będą mogli zobaczyć wszystkie pozostałe zdjęcia. Nie znalazłem haka na stronie media-new.php, więc ostatecznie włamałem się do podstawowego „media-upload.php” i przekierowałem je na stronę profilu:
Następnie zastąpiony
wp_redirect( admin_url($location) );
przezwp_redirect($userredirect);
Jednak kilka problemów. Po pierwsze, zalogowany użytkownik może nadal przejść do „upload.php”, jeśli wie, że istnieje. Nie mogą zrobić nic poza WYGLĄDEM na plikach, a 99% ludzi nawet się o tym nie dowie, ale nadal nie jest to optymalne. Po drugie, przekierowuje również administratora na stronę profilu po przesłaniu. Mogą one mieć dość prostą poprawkę, sprawdzając role użytkowników i przekierowując tylko subskrybentów.
Jeśli ktoś ma pomysły na podłączenie się do strony Media bez wchodzenia do podstawowych plików, byłbym wdzięczny. Dzięki!
źródło
admin_init
każdym żądaniu administratora działa hak. W przypadku, gdy użytkownik zażąda upload.php i chcesz uniemożliwić albo zablokowanie tego żądania (np.wp_die('Access Denied')
), Albo przekierowanie do pewnego prawidłowego miejsca na hak.Zapisz kod powyżej jako manage_your_media_only.php, spakuj go, załaduj jako wtyczkę do WP i aktywuj, to wszystko.
źródło
Jednym ze sposobów jest użycie wtyczki Role Scoper , która doskonale nadaje się również do zarządzania bardzo specyficznymi rolami i możliwościami. W rzeczywistości możesz zablokować dostęp do zdjęć w Bibliotece multimediów tylko do tych przesłanych przez każdego użytkownika. Używałem go do projektu, nad którym obecnie pracuję i działa dobrze.
źródło