Как запретить загрузку файлов для всех кроме админа?

Ссылка скопирована
1 ответ

Доброе утро.
Подскажите, надо чтобы пользователи (все кроме администратора) могли загружать только gif-файлы, а администратора это ограничение не касалось.
Что надо добавить в код?

add_filter('upload_mimes','restrict_mime');  function restrict_mime($mimes) {  $mimes = array( 'gif' => 'image/gif', ); return $mimes; }

add_filter('upload_mimes','restrict_mime'); function restrict_mime($mimes) { $mimes = array( 'gif' => 'image/gif', ); return $mimes; }

Дополнительно:

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Кирилл JS Ответ

В вашем коде ограничение применяется ко всем пользователям, потому что фильтр upload_mimes всегда возвращает только GIF. Нужно добавить проверку роли/права и не ограничивать администраторов.

add_filter( 'upload_mimes', 'site_restrict_mimes_for_non_admins' );
 
function site_restrict_mimes_for_non_admins( $mimes ) {
    if ( current_user_can( 'manage_options' ) ) {
        return $mimes;
    }
 
    return [
        'gif' => 'image/gif',
    ];
}

add_filter( 'upload_mimes', 'site_restrict_mimes_for_non_admins' ); function site_restrict_mimes_for_non_admins( $mimes ) { if ( current_user_can( 'manage_options' ) ) { return $mimes; } return [ 'gif' => 'image/gif', ]; }

manage_options обычно есть только у администраторов. Если нужно разрешить загрузку ещё редакторам или менеджерам магазина, проверяйте другую capability или список ролей.

Более строгий вариант — дополнительно проверить реальный MIME файла через wp_check_filetype_and_ext. Это полезно, потому что одно расширение .gif не гарантирует, что файл безопасный:

add_filter( 'wp_check_filetype_and_ext', function ( $data, $file, $filename, $mimes ) {
    if ( current_user_can( 'manage_options' ) ) {
        return $data;
    }
 
    $ext = strtolower( pathinfo( $filename, PATHINFO_EXTENSION ) );
 
    if ( 'gif' !== $ext ) {
        return [
            'ext'             => false,
            'type'            => false,
            'proper_filename' => false,
        ];
    }
 
    return $data;
}, 10, 4 );

add_filter( 'wp_check_filetype_and_ext', function ( $data, $file, $filename, $mimes ) { if ( current_user_can( 'manage_options' ) ) { return $data; } $ext = strtolower( pathinfo( $filename, PATHINFO_EXTENSION ) ); if ( 'gif' !== $ext ) { return [ 'ext' => false, 'type' => false, 'proper_filename' => false, ]; } return $data; }, 10, 4 );

Если задача звучит именно «запретить загрузку файлов для всех кроме админа», а не «разрешить только gif», тогда проще забрать право upload_files у нужных ролей. Но для точечного ограничения форматов фильтр upload_mimes подходит лучше.

Код добавляйте в дочернюю тему или мини-плагин. В core WordPress такие ограничения не правят.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно