Вопрос или проблема
Я хотел бы разрешить участникам загружать медиафайлы, добавив следующий код в functions.php
. Но кнопка “Добавить медиафайл” все равно не отображается.
// Разрешить участникам добавлять медиафайлы
if ( current_user_can('contributor') && ! current_user_can('upload_files') ) {
add_action('admin_init', 'allow_contributor_uploads');
function allow_contributor_uploads() {
$contributor = get_role('contributor');
$contributor->add_cap('upload_files');
}
}
Попробуйте заменить current_user_can('contributor')
на current_user_can('edit_posts')
. Согласно Codex, ‘Передача имен ролей в current_user_can() не рекомендуется, так как это не гарантирует правильную работу.’
Я бы попробовал заключить ваше условное выражение в скобки, чтобы убедиться, что оно правильно обрабатывается:
if ( current_user_can('edit_posts') && ! current_user_can('upload_files') ) {
add_action( 'admin_init', 'allow_contributor_uploads' );
}
function allow_contributor_uploads() {
$contributor = get_role('contributor');
$contributor->add_cap('upload_files');
}
Ответ или решение
Проблема, с которой вы столкнулись, заключается в том, что вы пытаетесь позволить пользователям с ролью «Конtributor» (сопоставимо с «Рецензент») загружать медиафайлы, но код, который вы используете, может быть неправильно структурирован или неправильно реализован. Давайте рассмотрим, как исправить это.
Правильный код для разрешения загрузки медиафайлов
-
Обновите условие проверки: Вместо проверки
current_user_can('contributor')
, лучше использоватьcurrent_user_can('edit_posts')
, так как эта практика более надежна и соответствует документации WordPress. -
Структурируйте код: Убедитесь, что добавление способности происходит только один раз при инициализации, и что ваше условие правильно обернуто в фигурные скобки.
Вот исправленная версия вашего кода:
// Позволить рецензентам загружать медиафайлы
add_action('admin_init', 'allow_contributor_uploads');
function allow_contributor_uploads() {
// Проверяем, является ли пользователь рецензентом и не имеет ли он уже права на загрузку файлов
if (current_user_can('edit_posts') && !current_user_can('upload_files')) {
$contributor = get_role('contributor');
// Добавляем право на загрузку файлов
$contributor->add_cap('upload_files');
}
}
Примечания
-
Добавление прав: Этот код добавляет возможность загружать файлы для всех пользователей с ролью «Конtributor». Убедитесь, что код помещен в файл
functions.php
вашей темы или в плагин, который вы используете. -
Проверка существующих прав: Если после добавления кода «Добавить медиа» все еще не отображается, попробуйте проверить, правильно ли присвоены права. Возможно, вам потребуется очистить кэш (как в браузере, так и на сервере, если используется кэширование) или протестировать вход/выход из системы.
-
Пользовательские роли: Убедитесь, что используемые вами роли пользователя правильно настроены. Если у вас есть плагины для управления ролями, они могут повлиять на права и возможности пользователей.
Заключение
Следуя этим шагам, вы сможете правильно разрешить пользователям с ролью «Конtributor» загружать медиафайлы. Если проблема сохраняется даже после реализации этих предложений, попробуйте проверить наличие конфликтов с другими плагинами или темами, которые могут вмешиваться в функционал управления правами.