Изменяем аватары пользователей по умолчанию в WordPress
Если у вас в блоге/сайте имеются комментарии то наверняка вы замечали там разные иконки и фото для профилей пользователей. Эти аватары в WordPress реализуются с помощью одного полезного сервиса, который называется Gravatar. Любой пользователь в сети может привязать свою почту к определенной картинке, после чего она будет показываться на всех сайтах в сети, которые поддерживают данную опцию. Разработчик Вордпресса просто не могли не добавить эту функциональность в систему.
Все соответствующие настройки найдете в разделе «Настройки» — «Обсуждение» в самом низу страницы. Там вы можете включить показ, определить рейтинг отображаемых иконок и задать базовое значение для юзеров без Gravatar. О последнем пункте мы сегодня и поговорим — рассмотрим как изменить WordPress аватары по умолчанию. На выбор у вас есть парочка вариантов:

Это может быть стандартный лого сервиса, а также парочка пустых и автоматических вариантов. После установки и сохранения настроек увидите заданный вариант на сайте.

Автогенерируемые картинки выглядят, в принципе, неплохо, но можно сделать ваш проект чуточку более оригинальным и добавить собственные уникальные WordPress аватары пользователей.
Алгоритм решения задачи состоит из нескольких простых шагов:
- Загрузка картинки в админку.
- Добавление сниппета/хака.
- Изменение настроек по умолчанию.
- Проверка и исправление ошибок.
1. Загружаем аватар в WordPress
Картинка в WP добавляется двумя способами: через FTP (FileZilla например) или непосредственно в системе. В первом случае сможете поместить изображение в любую директорию сайта, во втором она автоматически попадет в медиабиблиотеку (wp-content/uploads).
Изображение должно быть квадратное, у меня в шаблоне картинки больше 80х80 не выводятся, но некоторые разработчики используют размеры побольше вплоть до 250х250 (хотя я не вижу в этом особого смысла).
Рассмотрим вариант загрузки через админку, так как он для пользователей более наглядный. Выбираете в разделе «Медиафайлы» пункт «Добавить новый».

На открывшейся странице используете кнопку «Выберите файлы» либо просто перетаскиваете файл в указанное поле. Когда загрузка завершится, увидите добавленное изображение. Вам нужно кликнуть по ссылке «Изменить», которая находится справа от названия (см. рисунок выше). После этого откроется следующее окно:

Здесь вам просто нужно скопировать адрес будущего WordPress аватара, который находится в строке «Ссылка на файл».
2. Внедрение хака/сниппета
Традиционно сниппет добавляем в файл functions.php. Если вы новичок в этом деле, советую почитать детальный мануал или воспользоваться модулем Code Snippets. Код хака:
add_filter( 'avatar_defaults', 'setnew_gravatar' ); function setnew_gravatar ($avatar_defaults) { $myavatar = 'http://ваш_сайт/wp-content/uploads/new_avatar.png'; $avatar_defaults[$myavatar] = "Новый аватар"; return $avatar_defaults; }
Важно! Для переменной $myavatar нужно подставить ссылку на загруженный вами файл. В следующей строке задается название WordPress аватара по умолчанию, которое будет отображено в админке.
3. Изменение настроек
На следующем шаге требуется изменить аватар в WordPress настройках системы. Для этого заходим в раздел «Настройки» — «Обсуждение», где в самом низу страницы найдете новый элемент.

Это, пожалуй, самый простой шаг алгоритма. После этого остается зайти на сайт и проверить отображение новых иконок. Не забудьте очистить кэш в случае наличия в проекте плагинов кэширования!
4. Возможные ошибки
Признаться честно, моя первая попытка установить новые WordPress аватары пользователей не увенчалась успехом. После всех изменений на сайте продолжал отображаться стандартный логотип Gravatar. Если у вас похожая ситуация, то поищите в файлах шаблона функцию get_avatar (предположительно в comments.php или functions.php). Именно она выводит иконки аватарки. Убедитесь, что при вызове в ней не используется параметр $default, а указаны только первые два:
echo get_avatar($comment,$size='40'); ?>
В моем случае в функции данная опция была задана, поэтому и выводилась соответствующая картинка, а любые настройки внутри админки игнорировались. Это, в принципе, лишний раз показывает, что далеко не все темы изначально подходят для реализации задачи, — иногда приходится немного подправить код.
Итого. В принципе, вы видите, что изменить в WordPress аватары пользователей по умолчанию не так уж и сложно. Главное последовательно и внимательно выполняйте все шаги алгоритма и не забудьте в финале почистить кэш. Если появятся какие-то вопросы, пишите в комментах.
P.S. Постовой. Мы любим создавать сайта на WordPress, от сайта визитки до 🙂
Понравился пост? Подпишись на обновления блога по
RSS,
Email или
twitter!

Оцените статью:
(голосов — 3, средний балл: 5,00 из 7)
Категории: Хаки и секреты;
Теги: аватар, комментирование, полезное для блога, пользователи.
Похожие статьи:
- WordPress дайджест №3 — полезные плагины и хаки
- Получение и отображение первой картинки поста
- Отделяем трекбеки от комментариев в wordpress
- Восстанавливаем таблицу wp_options через phpMyAdmin
- Email уведомления в WordPress при публикации/отклонении постов
Смена картинки через админ панель WordPress
Как реализовать смену картинки через админ панель в WordPress, чтобы в будущем клиент сам мог менять картинки? Не могу найти решения такого вопроса, может есть какой-то плагин?
Отслеживать
5,103 2 2 золотых знака 10 10 серебряных знаков 25 25 бронзовых знаков
задан 27 апр 2022 в 21:04
Advanced Custom Fields, Carbon Fields, Toolset, Meta Box и прочие аналоги.
27 апр 2022 в 21:46
Ну и не за чем дублировать вопрос
27 апр 2022 в 21:47
Где «менять»? В большинстве случаев это есть из коробки.
28 апр 2022 в 6:56
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Если имеется в виду смена аватара пользователя, то, вероятно, поможет вот это: WP User Avatar (плагин)
Отслеживать
ответ дан 27 апр 2022 в 22:03
VASILY BABKIN VASILY BABKIN
1 1 1 бронзовый знак
Спасибо за ответ, но нет, получается у меня в верстке которую «натянул» есть картинки, которые клиент желает изменить в будущем, с тем как реализовать смену текста разобрался, а изображенией — нет(
27 апр 2022 в 22:26
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.21.1314
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Добавляем и удаляем поля в блоке «Контакты» в профилях пользователей
В текущей версии WordPress на момент написания этого поста в блоке «Контакты» есть всего два поля – «Email» и «Сайт», поэтому в этом уроке я покажу вам, как добавить туда свои собственные поля.
Также рекомендую вам свой видеокурс по натяжке готовой HTML-вёрстки на WordPress.
Добавление полей в блок «Контакты»
Вообще у меня на сайте есть полноценный урок по добавлению полей в профили пользователя.
Но так как страницу вконтакте или скайп (а также номер сотового) в профиле нужно отображать под вкладкой «Контакты» а не под «Дополнительная информация» то лучше всего воспользоваться хуком user_contactmethods .
/** * @snippet Добавление полей в блок "Контакты" в профилях пользователей * @author Миша Рудрастых * @url https://misha.agency/wordpress/addtitional-methods-user-profiles.html */ add_filter( 'user_contactmethods', 'true_add_contacts', 25 ); function true_add_contacts( $contactmethods ) { $contactmethods[ 'vk' ] = 'Ваша страница вконтакте'; $contactmethods[ 'mobile' ] = 'Номер сотового'; $contactmethods[ 'skype' ] = 'Скайп'; return $contactmethods; }
В результате чего у вас получится:

Для того, чтобы получить значения полей, вы можете воспользоваться функциями get_the_author_meta() и get_user_meta(). Например так:
$user_skype = get_the_author_meta( 'skype', $user_id ); $user_skype = get_user_meta( $user_id, 'skype', true );
Удаление стандартных полей из блока «Контакты» (старые версии WordPress)
И сразу же бросаются в глаза стандартные вордпрессовские поля, я имею ввиду AIM, Yahoo IM, Jabber / Google Talk. Но в свежих версиях WordPress этих полей и так нет!

Почему-то мне кажется, что мало кто их использует (именно поэтому их и удалили в последующих версиях WordPress), а теперь избавимся от них:
add_filter('user_contactmethods', 'true_hide_contacts', 10, 1); function true_hide_contacts( $contactmethods ) { unset( $contactmethods[ 'aim' ] ); unset( $contactmethods[ 'jabber' ] ); unset( $contactmethods[ 'yim' ] ); return $contactmethods; }
Миша
Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.
Пишите, если нужна помощь с сайтом или разработка с нуля.
Комментарии — 48
Nexxt2008 16 Июн 2012
Как добавить поля в профиль для пользователей определенной роли?
Например чтоб отображались поля «Ваша страница вконтакте», «Номер сотового», «Скайп» в профиле только подписчиков.
Миша 16 Июн 2012
вот готовое условие для подписчиков:
if(current_user_can('subscriber')){ }
хотя честно говоря, не знаю будет ли это распространяться для тех, у кого больше прав, не пробовал
пиши, если что)
Nexxt2008 17 Июн 2012
Это условие работает для текущей роли. Если под администратором просматривать подписчиков, то дополнительные поля не отображаются в профилях подписчиков.
Миша 18 Июн 2012
да-да, согласен что для текущей, чото я тупанул, тогда смотри как будет:
function show_profile_fields( $user ) { if($user->level == 0){ // Level 0 - значит подписчик } }
подробнее это функция расписана в другом посте, ссылка есть в начале этой статьи
Миша 18 Июн 2012
возможно цифру в условии придется взять в кавычки)
Марат 14 Июл 2012
Привет, Миша.
Как можно удалить поля из профиля но из других групп? Например, биография или имя пользователя.
И можно ли менять местами их? Например, мои добавленные поля поставить выше стандартных?
Спасибо.
Миша 15 Июл 2012
Привет, Марат, я как раз недавно столкнулся с этой проблемой, увы, там не предусмотрено никаких хуков, чистый HTML, так что удалить поля ты сможешь только при помощи CSS или jQuery
Миша 15 Июл 2012
либо придется править файлы движка WordPress) но обычно когда доходит до этого, я просто ищу другое решение
Александр 9 Авг 2012
Добрый день! Сейчас работаю над этой проблемой. у меня установлен плагин »
theme-my-profile » не подскажите, а как удалить ненужные поля в профиле, например «last name»? пробовал идалять их из движка путь — wp-admin-user-edit, не помогает(версия 3.4.1)
Миша 10 Авг 2012
из движка не нужно удалять уж 🙂
но вроде такие поля как email и last name можно вырезать только в файлах движка
Михаил 7 Сен 2012
Не подскажите, каким образом можно удалить в профиле «Отображать как»? Пользователи меняют это значение и в результате один и тот же человек в одних комментариях зовется по-одному, а в других по-другому. Хотелось бы жестко прикрутить к логину при регистрации.
Flora 19 Сен 2012
Очень актуальные вопросы насчёт удаления Биографии и Отображать как. )
Как спрятать биографию, если нельзя удалить, может кто подскажет.
Вот нашла на одном сайте рекомендацию и попробовала — добавила в файл style.css следующие строчки:
[code lang=»css»]tr > th > label[for=»description»]
td > #description
#description + br + .description [/cc] у меня не скрылось лично. может есть ещё варианты?))
Миша 19 Сен 2012
если на css:
#description { display: none; } label[for="description"] { display: none; }
можно ещё и на jQuery, если надо, скину код))
Миша 19 Сен 2012
знаешь куда эти стили вставлять же?
Alex23 21 Янв 2013
Привет, можешь подсказать куда это вставлять?
Миша 21 Янв 2013
привет, попробуй вот так:
function add_styles_in_admin(){ ?> #description < display: none; >label[for="description"] < display: none; > } add_action('admin_head','add_styles_in_admin');
BASoftWARe 3 Окт 2012
Добрый времени суток. Миша могли бы вы мне посоветовать как реализовать в теме в functions.php возможность изменить фон а заодно и css для стандартной формы входа? Сразу разъясню у меня там в functions.php есть уже такая возможность как замена ВП логотипа на свой который всегда лежит в теме. То есть мне не надо менять ядро cms, хотя это для меня не проблема но как вы сами понимаете после обновления всё придется делать по новой (можно конечно копировать редактированные файлы обратно после обновы), но если там произошли большие изменения и старый файл может привести к ошибкам? Тогда надо снова ручками править код.
Вот пример кода который реализовывает подмену стандартного логотипа в форме входа-регистрации на мой:
add_action("login_head", "my_login_head"); function my_login_head() { echo " "; }
Миша 4 Окт 2012
конечно файлы двига не трогаем, тут вопросов быть не должно)
замену через админку — сделать какую-нибудь страницу где лого будет загружаться и url прописываться в настройках, потом в твоем коде надо будет поправить строчку
background: url('".get_option(custom.png)."') no-repeat scroll center top transparent;
Сергей 25 Июн 2013
Приветствую Миша. Подскажите мне пожалуйста, как быть. Мне нужно изменить поля регистрационной формы, добавив одни и удалив другие. С помощью хуков это делается влет, но форум Mingle Forum «не берет» эти изменения. Помогут ли мне в этом плагины — сомневаюсь, а устанавливать не берусь, потому что они не просто корректируют данные, а делают всё своё. Дайте мне пожалуйста дельный совет.
Миша 27 Июн 2013
но форум Mingle Forum
ну, тут уже надо рыться в этом функционале и смотреть. Делный совет: использовать редактор с возможностью поиска по файлам например notepad++, тогда можно будет быстро найти нужные участки кода
Елена 21 Мар 2014
Здравствуйте!
С помощью описанного Вами кода удалила aim, jabber, yim
У меня там ещё болтается Гугл+ и ненавистное мне поле «Сайт».
Для гугл+ по аналогии написала
unset($contactmethods['googleplus']);
но это не помогло, поле всё равно осталось видимое. Как удалить Гугл+ и «Сайт»? На всякий случай сайт: http://psyhelp24.ru/ Спасибо!
Миша 28 Мар 2014
Добрый день!
гугл+ скорее всего был добавлен через какой-то плагин или тему в коде — надо смотреть там. для удаления поля сайт можно попробовать следующее:
function true_remove_website_field () { echo ""; } add_action( 'admin_head-user-edit.php', 'true_remove_website_field' );
Сергей 14 Май 2014
Добрый день.
А как потом получить доступ к этой информации? Мне нужно после текста записи вывести контактную информацию автора..
Сергей 16 Май 2014
Я сделал реализовал это таким
И также для facebook.. Не уверен что правильно.. Но работает.. Если не сложно подскажите пожалуйста еще один момент или киньте силку.. Мне нужно реализовать новый тип страниц. В них должен быть заголовок, текст, дата и набор цифр.. Список всех статей должен быть по адресу mysite.ru/test/ и сами стати по адресу mysite.ru/test/lala
Как сделать чтобы при наборе mysite.ru/test/ для вывода использовался файл test-archive.php, a для mysite.ru/test/lala test-single.php
Произвольная картинка для аватара по умолчанию
Короткая заметка о том, как установить произвольную картинку в качестве аватарки по дефолту. Вариантов это сделать как минимум три. Какой из них лучше подойдет в конкретной ситуации написано ниже. Сервис gravatar не особо популярный, особенно в рунете. Поэтому много комментариев остаются без авы. Для таких случаев, чтобы пустышки не были одинаковыми, в настройках WordPress можно установить динамические аватарки (всяких монстриков). Но иногда, нужно быть «в бренде» своего сайта и по умолчанию установить произвольную аватарку. Этот пост именно для таких случаев. Обратите внимание, что установленная дефолтная картинка будет показана только в том случае, если у пользователя нет аватарки. А то при тестировании бывает путаница.
Вариант 1: добавить настройку (новый дефолтный аватар) в админ-панель
Код ниже добавит еще один, дополнительный вариант аватарки при выборе дефолтной авы в админ-панели, в настройках обсуждения.
## Добавляет еще один вариант аватарки по умолчанию в настройки обсуждения ## Файл аватарки 'def-avatar.jpg' нужно залить в папку темы 'img' add_filter( 'avatar_defaults', 'add_default_avatar_option' ); function add_default_avatar_option( $avatars )< $url = get_stylesheet_directory_uri() . '/img/def-avatar.jpg'; $avatars[ $url ] = 'Аватар сайта'; return $avatars; >
В результате получим:
Заметка: какой на текущий момент выбран аватар по умолчанию можно узнать получив значение опции ‘avatar_default’ — get_option(‘avatar_default’) .
Недостаток этого метода в том, что нельзя просто установить код, а нужно еще «сходить» в админку и включить аватарку по умолчанию. Такой подход может быть просто неприемлем, когда нужно жестко выставить аву, чтобы её нельзя было поменять. Или, когда нужно, чтобы указанная ава была по умолчанию всегда, независимо от того кто и что там поставил в настройках. Специально для таких случаев я написал второй вариант. А оказалось это кстати, не так просто как я ожидал, но это никому не нужная лирика, поэтому её пропустим.
Вариант 2: указать аватарку по умолчанию «на лету», через фильтр
Этот вариант выставляет аву по умолчанию сразу же после вставки кода и не дает возможность изменить настройку авы в админ-панели. Хук учитывает параметр default указанный в функциях вывода или получения аватара. Т.е. например, если вызывать функцию get_avatar() с параметром default , то будет выставлен аватар указанный в параметре default , а не тот что указан в хуке.
## Устанавливает аватар по умолчанию ## Файл аватарки 'def-avatar.jpg' нужно поместить в папку темы 'img' add_filter( 'pre_get_avatar_data', 'replace_default_avatar' ); function replace_default_avatar( $args )< // админка и страница обсуждения, где настраивается ава по умолчанию. // if( is_admin() && get_current_screen()->base === 'options-discussion' ) return $args; static $defava; if( $defava === null ) $defava = get_option( 'avatar_default', 'mystery' ); // ускоримся // Если используется ава по умолчанию, чтобы работал параметр 'default' // если он установлен для функций аватарок if( ! $args['default'] || $defava == $args['default'] ) < $args['default'] = get_stylesheet_directory_uri() . '/img/def-avatar.jpg'; >return $args; >
Вариант 3: указать ссылку на дефолтный аватар при вызове функции
Это пожалуй самый не гибкий вариант. Не помню, чтобы я его когда-то использовал. Но он определенно может пригодится. Для того, чтобы получить аватар или его данные есть три функции:
- get_avatar() — Получает
html код аватара комментатора.
- get_avatar_data() — Получает массив данных об аватаре.
- get_avatar_url() — Получает URL аватарки по переданному email, ID или объекту пользователя.
В каждой из них можно указать параметр default и таким образом установить URL аватарки по умолчанию. Приведу по примеру для каждой функции, где указывается параметр default :
echo get_avatar( 'email@gmail.com', 48, 'http://example.com/default-avatar.png');
$ava_data = get_avatar_data( 'email@gmail.com', array( 'size' => 48, 'default' => 'http://example.com/default-avatar.png', ) ); echo $ava_data['url'];
$url = get_avatar_url( 'email@gmail.com', array( 'size' => 48, 'default' => 'http://example.com/default-avatar.png', ) ); echo $url;
Плагины для аватарок в WordPress
В заключении несколько плагинов по теме:
- Avatar Manager — добавляет поле загрузки аватарки в профиль. Так каждый пользователь может установить свой аватар мимо сервиса gravatar. Выводиться аватар привычно через функцию get_avatar() .
- Basic User Avatars — добавляет возможно загружать аватар в профиле пользователя. Есть поддержка загрузки из фронт-энда. Поддержка bbPress support.
- WP First Letter Avatar — Устанавливает в качестве аватарки первую букву имени автора. Поддерживается и кириллица, латиница и цифры.
- Add New Default Avatar — простенький плагин (аналог варианта 2 из этой статьи) — добавляет опцию дефолтной авы в настройки.
Ни один из этих плагинов я не пробовал в работе и близко не рассматривал, поэтому по качеству и т.д. сказать нечего.
