Как изменить аватар пользователя?
Есть ли способ изменить аватар пользователя без использования плагинов? Почему в разделе Пользователи > Ваш профиль нет секции "Загрузка аватара"?
Я не могу использовать плагин. Я что-то упускаю или WordPress действительно заставляет использовать Gravatar? ;/

Аватары предназначены для управления пользователем, а не вами. Так что да, в каком-то смысле вы вынуждены использовать сервис Gravatar. Но помните, что это дает пользователю возможность использовать один и тот же аватар где угодно, а вы всегда можете ограничить отображение граватара на основе возрастных рейтингов (G, PG, PG-13, R).
Gravatar — это хостинговый сервис, поэтому в профиле нет раздела "Загрузить аватар".
Вы говорите, что "не можете использовать плагин", но на самом деле это единственный способ добавить функционал. Если вы хотите использовать что-то кроме Gravatar, вам потребуется установить плагин для его поддержки. Существует несколько плагинов, поддерживающих локальные аватары:
В противном случае я рекомендую вам объяснить пользователям, что такое граватары и как их использовать.

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

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

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

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

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

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

Если вы хотите заменить стандартный граватар на свой собственный, вы можете добавить этот код в файл 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;
}
Создайте файл изображения и загрузите его в директорию с изображениями вашего сайта. "Мой Логотип" - это метка для опции в разделе "Обсуждение" вашей панели управления. Таким образом, любой пользователь, у которого нет граватара, получит логотип вашего сайта вместо стандартного.

Для работы хука 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;
}

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

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

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

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

Добавьте ваш файл 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;
}
