Как изменить аватар пользователя?

24 янв. 2011 г., 16:51:02
Просмотры: 52K
Голосов: 5

Есть ли способ изменить аватар пользователя без использования плагинов? Почему в разделе Пользователи > Ваш профиль нет секции "Загрузка аватара"?

Я не могу использовать плагин. Я что-то упускаю или WordPress действительно заставляет использовать Gravatar? ;/

3
Комментарии

Есть ли причина, по которой вы не можете использовать плагины? Это блог на wordpress.com? (Используйте @Jan в ответе, чтобы я получил уведомление)

Jan Fabry Jan Fabry
24 янв. 2011 г. 17:59:26

@Jan: причина в том, что я помогаю своему другу создать его собственную бесплатную тему. И одна из наших целей - сделать её также свободной от плагинов.

Wordpressor Wordpressor
24 янв. 2011 г. 22:57:51

Конечно, вы всегда можете включить весь код из плагина в шаблон (через файл functions.php). Будет ли это по-прежнему "без плагинов" по вашему определению?

Jan Fabry Jan Fabry
25 янв. 2011 г. 09:24:59
Все ответы на вопрос 7
7

Аватары предназначены для управления пользователем, а не вами. Так что да, в каком-то смысле вы вынуждены использовать сервис Gravatar. Но помните, что это дает пользователю возможность использовать один и тот же аватар где угодно, а вы всегда можете ограничить отображение граватара на основе возрастных рейтингов (G, PG, PG-13, R).

Gravatar — это хостинговый сервис, поэтому в профиле нет раздела "Загрузить аватар".

Вы говорите, что "не можете использовать плагин", но на самом деле это единственный способ добавить функционал. Если вы хотите использовать что-то кроме Gravatar, вам потребуется установить плагин для его поддержки. Существует несколько плагинов, поддерживающих локальные аватары:

В противном случае я рекомендую вам объяснить пользователям, что такое граватары и как их использовать.

24 янв. 2011 г. 17:13:36
Комментарии

Это СОВЕРШЕННО НЕПРАВИЛЬНО! Мне не нужно обучать пользователей, потому что я хочу изменить аватар администратора и т.д. А я не могу этого сделать. И, насколько я помню, раньше была такая возможность? ;/ Это вынуждает меня использовать какой-то странный сайт, которым я даже не хочу пользоваться. Это ОЧЕНЬ СТРАННО. Представьте, я хочу создать блог для локальной бизнес-сети без доступа к интернету (по соображениям безопасности, конфиденциальные данные) и т.д. И это даже невозможно без плагина. Какой позор.

Wordpressor Wordpressor
24 янв. 2011 г. 17:23:04

@Wordpressor: Под "это совершенно неправильно" вы имеете в виду, что ответ EAMann неверен, или вам не нравится сама ситуация? Gravatar принадлежит Automattic, компании Мэтта Мулленвега, который решает, что будет в WordPress. Вероятно, именно поэтому они поддерживают только его "из коробки", а другие методы делегированы плагинам.

Jan Fabry Jan Fabry
24 янв. 2011 г. 17:58:28

@Wordpressor: если вы запускаете это внутри компании, вам, вероятно, также понадобится 1 LDAP для целей безопасности и единого входа. Вот ваш ключ: вам нужно одно место для "изображения пользователя" тоже. Вне приложения.

edelwater edelwater
24 янв. 2011 г. 19:07:14

@Jan Fabry: его ответ корректный, но вся политика — НЕТ. Я разрабатываю свою тему на своём ПК. У меня там только один пользователь — администратор. Я хочу изменить его аватар. Я могу его получить, отобразить, изменить его размер, но не могу его изменить. Это не круто. И указывать свою почту только ради возможности изменить собственный аватар — просто отстой.

Wordpressor Wordpressor
24 янв. 2011 г. 23:02:47

@Jan Fabry: ЛОЛ! Это ещё забавнее. Мне нужно создать дополнительное поле в админке, потому что мой пользователь должен отправить свой Gravatar ID на бэкенд. УУУХХХ! ПОТРЯСАЮЩЕ! Ненавижу тебя, Мэтт Мулленвег.

Wordpressor Wordpressor
24 янв. 2011 г. 23:06:18

@Wordpressor Для контекста Решения, а не опции — это один из краеугольных камней того, как устроены вещи в WordPress. Использование граватаров по умолчанию — решение, которое имеет достаточно смысла, достаточно гибкое и продвигает аффилированный сервис. И когда решение принято, обычно плагины предоставляют настройки или альтернативы.

Rarst Rarst
24 янв. 2011 г. 23:19:53

@Wordpressor Пожалуйста, спой случайные строки из песни Hello Dolly. Это поднимет тебе настроение ;)

Michal Mau Michal Mau
25 янв. 2011 г. 06:11:15
Показать остальные 2 комментариев
1

Если вы хотите заменить стандартный граватар на свой собственный, вы можете добавить этот код в файл functions.php (или, что лучше, в custom-functions.php, если ваша тема поддерживает это).

add_filter( 'avatar_defaults', 'customgravatar' );

function customgravatar ($avatar_defaults) {
$myavatar = get_home_url('Template_directory') . '/images/mycustomgravatar.jpg';
$avatar_defaults[$myavatar] = "Мой Логотип";
return $avatar_defaults;
}

Создайте файл изображения и загрузите его в директорию с изображениями вашего сайта. "Мой Логотип" - это метка для опции в разделе "Обсуждение" вашей панели управления. Таким образом, любой пользователь, у которого нет граватара, получит логотип вашего сайта вместо стандартного.

25 янв. 2011 г. 03:46:27
Комментарии

Я использую этот код уже много лет, но мне нужно добавить атрибут ALT для граватаров. Не уверен, куда именно его вставить, чтобы не сломать код.

japanworm japanworm
23 мая 2015 г. 17:17:13
4

Для работы хука avatar_defaults требуется немного больше кода, чем в ответе Рэя Митчелла. Я нашел этот код на страницах WordPress Codex, и он отлично работает благодаря нормализованному ID пользователя, передаваемому в хук аватара по умолчанию (этот код работает как с простым ID пользователя или email, так и с самим объектом пользователя).

    // Применяем фильтр
add_filter( 'get_avatar' , 'my_custom_avatar' , 1 , 5 );

function my_custom_avatar( $avatar, $id_or_email, $size, $default, $alt ) {
    $user = false;

    if ( is_numeric( $id_or_email ) ) {

        $id = (int) $id_or_email;
        $user = get_user_by( 'id' , $id );

    } elseif ( is_object( $id_or_email ) ) {

        if ( ! empty( $id_or_email->user_id ) ) {
            $id = (int) $id_or_email->user_id;
            $user = get_user_by( 'id' , $id );
        }

    } else {
        $user = get_user_by( 'email', $id_or_email );   
    }

    if ( $user && is_object( $user ) ) {

        if ( $user->data->ID == '1' ) {
            $avatar = 'ВАШ_НОВЫЙ_URL_ИЗОБРАЖЕНИЯ';
            $avatar = "<img alt='{$alt}' src='{$avatar}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
        }

    }

    return $avatar;
}
28 нояб. 2016 г. 14:17:28
Комментарии

Предназначен ли $default быть аватаром по умолчанию, если условия в этих if-операторах не выполняются?

nu everest nu everest
12 дек. 2016 г. 05:46:58

Как указано в кодексе, $default — это URL аватара по умолчанию, когда аватар не выбран. По умолчанию WordPress использует "Mystery man"

jilt jilt
12 дек. 2016 г. 11:28:37

https://codex.wordpress.org/Function_Reference/get_avatar для получения дополнительной информации

jilt jilt
12 дек. 2016 г. 11:29:28

Я знаю, что это старо, но я потратил последние несколько дней в поисках решения, и ваш вариант сработал для меня. Спасибо!

730wavy 730wavy
5 июл. 2020 г. 23:42:04
0

Я знаю, что на одном из сайтов проекта мне удалось создать поле на странице редактирования профиля пользователя для указания пути к изображению (загруженному через медиабиблиотеку, если я правильно помню), которое можно было использовать в качестве аватара. Без использования плагинов.

25 янв. 2011 г. 07:29:42
0

Я заметил, что это зависит от того, какая тема активирована. Например, в теме Mantra такой опции нет, но она есть в стандартной теме Buddypress.

30 окт. 2012 г. 13:00:19
0

Вы можете это сделать... Вам нужно добавить изображение в медиатеку. Скопируйте URL этого медиафайла и вставьте/привяжите его к URL вашего пользовательского аватара в разделе редактирования пользователя. ГОТОВО!

18 янв. 2016 г. 13:43:08
0

Добавьте ваш файл avatar.jpg в папку images дочерней темы и следующий код в файл функций дочерней темы:

add_filter( 'get_avatar' , 'add_custom_avatar' , 1 , 5 );

function add_custom_avatar( $avatar, $id_or_email, $size, $default, $alt ) {
    $user = false;

    if ( is_numeric( $id_or_email ) ) {

        $id = (int) $id_or_email;
        $user = get_user_by( 'id' , $id );

    } elseif ( is_object( $id_or_email ) ) {

        if ( ! empty( $id_or_email->user_id ) ) {
            $id = (int) $id_or_email->user_id;
            $user = get_user_by( 'id' , $id );
        }

    } else {
        $user = get_user_by( 'email', $id_or_email );   
    }

    if ( $user && is_object( $user ) ) {

        if ( $user->data->ID == '1' ) {
            $avatar = sprintf( '%s/images/avatar.jpg', get_stylesheet_directory_uri() );
            $avatar = "<img alt='{$alt}' src='{$avatar}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
        }

    }

    return $avatar;
}
5 мар. 2017 г. 14:24:59