Я хочу, чтобы пользователи могли загружать фотографии с помощью, add_cap('upload_files')
но на странице своего профиля в библиотеке мультимедиа отображаются все загруженные изображения. Как я могу отфильтровать это так, чтобы они могли только просматривать загруженные ими изображения ?
Вот мое решение на данный момент ... Я делаю простой запрос WP, а затем цикл на странице "Профиль" пользователя
$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);
Ответы:
Вы всегда можете отфильтровать список мультимедиа, используя
pre_get_posts
фильтр, который сначала определяет страницу и возможности пользователя, и устанавливает параметр author, когда выполняются определенные условия.пример
Я использовал ограничение удаления страниц в качестве условия, чтобы администраторы и редакторы по-прежнему видели полный список СМИ.
Есть один небольшой побочный эффект, для которого я не вижу никаких хуков, и это с количеством вложений, показанным над списком мультимедиа (которое по-прежнему будет показывать общее количество элементов мультимедиа, а не данного пользователя - я бы считают это незначительной проблемой, хотя).
Думаю, я все равно выложу, может быть полезно ..;)
источник
Начиная с WP 3.7, через
ajax_query_attachments_args
фильтр существует гораздо лучший способ , как указано в документации :источник
Вот полное решение для постов и медиа (этот код специально для авторов, но вы можете изменить его для любой роли пользователя). Это также исправляет количество записей / медиа без взлома основных файлов.
источник
$_num_posts = array();
Это модифицированная версия принятого ответа . Поскольку принятый ответ относится только к элементу меню «Медиа» слева, пользователи все равно могут видеть всю медиатеку внутри модального поля при загрузке фотографии в публикацию. Этот слегка измененный код исправляет эту ситуацию. Целевые пользователи будут видеть только свои собственные элементы мультимедиа на вкладке «Библиотека мультимедиа» модального поля, которое появляется в сообщении.
Это код из принятого ответа с комментарием, отмечающий строку для редактирования ...
Чтобы пользователи могли просматривать только свои собственные медиафайлы из меню «Медиа» И вкладки «Медиатека» модального окна загрузки, замените указанную строку этой ...
( разрывы строк и интервалы вставляются только для удобства чтения здесь )
Ниже приведено то же, что и выше, но оно также ограничивает просмотр их собственных сообщений из пункта меню «Сообщения».
( разрывы строк и интервалы вставляются только для удобства чтения здесь )
Примечания : как и в принятом ответе, сообщения и счетчики будут неверными. Однако, есть решения для этого в некоторых других ответах на этой странице. Я не включил их просто потому, что не проверял их.
источник
Полный рабочий код. Единственная проблема заключается в неправильном подсчете изображений в библиотеке мультимедиа на странице добавления поста.
источник
media-upload.php
, ваш код не работает из модальности загрузки, созданной на странице редактирования сообщения. Можно еще увидеть все элементы библиотеки.У t31os есть отличное решение. Единственное, что количество всех постов по-прежнему отображается.
Я нашел способ, как предотвратить подсчет числа с помощью jQuery.
Просто добавьте это в свой функциональный файл.
Это работает для меня!
источник
Я решил свою проблему с помощью довольно грубого, но работоспособного решения.
1) Я установил плагин WP Hide Dashboard, чтобы пользователь мог видеть только ссылку на форму редактирования своего профиля.
2) В файл шаблона author.php я вставил код, который использовал выше.
3) Затем для зарегистрированных пользователей я отобразил прямую ссылку на страницу загрузки «wp-admin / media-new.php».
4) Следующая проблема, которую я заметил, заключалась в том, что после того, как они загрузили фотографию, она перенаправила бы их на upload.php ... и они могли видеть все остальные фотографии. Я не нашел хука на странице media-new.php, поэтому в итоге я взломал ядро «media-upload.php» и перенаправил их на страницу своего профиля:
Затем заменить
wp_redirect( admin_url($location) );
наwp_redirect($userredirect);
Пара вопросов, хотя. Во-первых, вошедший в систему пользователь все еще может перейти к «upload.php», если он знает, что он существует. Они ничего не могут сделать, кроме как СМОТРЕТЬ на файлы, и 99% людей даже не узнают об этом, но это все еще не оптимально. Во-вторых, он также перенаправляет администратора на страницу профиля после загрузки. Это может быть довольно просто исправить, проверяя роли пользователей и перенаправляя только подписчиков.
Если у кого-то есть идеи о подключении к странице «Медиа», не вдаваясь в основные файлы, я был бы признателен за это. Спасибо!
источник
admin_init
ловушка, которая запускается на каждый запрос администратора. В случае, если пользователь запрашивает upload.php, и вы хотите предотвратить, вы можете либо заблокировать этот запрос (напримерwp_die('Access Denied')
), либо перенаправить в какое-то действительное место на ловушку.Сохраните приведенный выше код как manage_your_media_only.php, заархивируйте его, загрузите как плагин на свой WP и активируйте, вот и все.
источник
Один из способов сделать это - использовать плагин Role Scoper , он также отлично подходит для управления очень специфическими ролями и возможностями. Вы можете заблокировать доступ к изображениям в библиотеке мультимедиа только для тех, которые загружены каждым пользователем. Я использовал его для проекта, над которым я сейчас работаю, и он работает хорошо.
источник