WordPress как на ладони
WordPress темы и плагины за 250 рублей wordpress jino

get_avatar() WP 2.5.0

Получает html код аватара (<img>) комментатора, если пользователь авторизирован или указал email при комментировании.

Этот Тег шаблона должен использоваться внутри Цикла комментариев или ему обязательно нужно передать первый параметр!

Если нужно воздействовать на эту функцию, то используйте фильтр get_avatar.

Это pluggable функция — т.е. её можно заменить из плагина. Это значит, что она будет работать (подключается) только после подключения всех плагинов, а до этого момента функция еще не определена... Поэтому нельзя вызывать эту и зависящие от неё функции прямо из кода плагина. Их нужно вызывать через хук plugins_loaded или позднее, например хук init.

Замена функции (переопределение) — в плагине можно создать функцию с таким же названием, тогда она заменит текущую функцию.

Работает на основе: get_avatar_url(), get_avatar_data()
✈ 1 раз = 0.000196с = быстро | 50000 раз = 4.98с = быстро PHP 7.1.0, WP 4.7.1
Хуки из функции:
Возвращает

Строку/false. HTML тег <img>. false если не удалось отправить запрос. Если нет аватара, но запрос отправился, то вернет аватарку по дефолту - не false.

Использование

<?php echo get_avatar( $id_or_email, $size, $default, $alt, $args ); ?>
$id_or_email(строка/объект/число) (обязательный)

ID юзера, email комментатора, для которого нужно получить аватар. Или можно указать объекты: WP_User, WP_Post, WP_Comment.

В большинстве шаблонов в этом параметре можно указывать переменную $comment. Если эта переменная не работает (вызывает ошибку), то заранее запишите в нее email комментатора, делается это так:

$comment = get_the_author_meta('user@email.com');

По умолчанию: нет

$size(число)
Размер картинки. Указанное число станет шириной и высотой в пикселях.
По умолчанию: 96
$default(строка)
УРЛ на картинку по умолчанию, для пользователей, которые не имеют аватарки в сервисе gravatar.
По умолчанию: нет
$alt(строка)
Текст для атрибута ссылки 'alt'.
По умолчанию: ''
$args(массив)

Дополнительные аргументы для получения аватара:

  • height - Число. Высота в пикселях. По умолчанию $size.
  • width - Число. Ширина в пикселях. По умолчанию $size.
  • force_default - Логический. Всегда показывать дефолтную картинку и никогда аватар.
  • rating - Строка. Минимальный рейтинг аватара для отображения. Может быть: 'G', 'PG', 'R', 'X'. По умолчанию значение опции 'avatar_rating'.
  • scheme - Строка. Схема URL которая будет использоваться. Смотрите set_url_scheme().
  • class - Массив/строка. Дополнительные классы для тега img.
  • force_display - Логический. Всегда показывать аватар? Игнорирует опцию show_avatars.
  • extra_attr - Строка. Дополнительные HTML атрибуты для тега IMG. Не очищаются перед выводом на экран.

По умолчанию: null

Примеры

#1. Выведем Аватар текущего комментатора:

<?php echo get_avatar( $comment, 32 ); ?>

Получим:

<img alt='' src='http://0.gravatar.com/avatar/ad516503a11cd5ca435acc9bb6523536?s=32' class='avatar avatar-32 photo avatar-default' height='32' width='32' />

#2 Вывод аватара автора текущего поста

<?php echo get_avatar( get_the_author_meta('user_email'), 32 ); ?>

#3 Добавление атрибута stylе

Параметр 'extra_attr' позволяет добавлять любые атрибуты тега IMG:

<?php echo get_avatar( $current_user->user_email, 30, '', '', array('class'=>'pull-left', 'extra_attr'=>'style="margin: -4px 7px;"') ); ?>

<!--
получим:
<img alt="" src="http://1.gravatar.com/avatar/155e695ab2987ee3c482c1e3e690683b?s=30&d=mm&r=g" class="avatar avatar-30 photo pull-left" height="30" width="30" style="margin: -4px 7px;">
-->

#4 Вариант аватарки по умолчанию в настройки обсуждения

Это код добавления еще одной картинки (опции) в настройках обсуждения, которую можно выбрать как аватарку по умолчанию... Такая аватарка храниться в опции get_option('avatar_default').

## Добавляет еще один вариант аватарки по умолчанию в настройки обсуждения
## Файл аватарки '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;
}

В результате получим такую дополнительную опцию:

optsiya-avatarka-po-umolchaniyu

#5 Аватар по умолчанию через хук

Если для прошлого варианта, нужно добавить хук, потом зайти в настройки и выбрать дефолтный аватар, то этот вариант установит аватарку по дефолту сразу же...

Этот вариант устанавливает аватар по умолчанию «налету», для всех функций: get_avatar(), get_avatar_url() и get_avatar_data(). Дефолтный аватар будет установлен только если в функции уже не указан дефолтный аватар, т.е. не установлен параметр '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;
}

Код get avatar: wp-includes/pluggable.php VER 4.9.6

<?php
function get_avatar( $id_or_email, $size = 96, $default = '', $alt = '', $args = null ) {
	$defaults = array(
		// get_avatar_data() args.
		'size'          => 96,
		'height'        => null,
		'width'         => null,
		'default'       => get_option( 'avatar_default', 'mystery' ),
		'force_default' => false,
		'rating'        => get_option( 'avatar_rating' ),
		'scheme'        => null,
		'alt'           => '',
		'class'         => null,
		'force_display' => false,
		'extra_attr'    => '',
	);

	if ( empty( $args ) ) {
		$args = array();
	}

	$args['size']    = (int) $size;
	$args['default'] = $default;
	$args['alt']     = $alt;

	$args = wp_parse_args( $args, $defaults );

	if ( empty( $args['height'] ) ) {
		$args['height'] = $args['size'];
	}
	if ( empty( $args['width'] ) ) {
		$args['width'] = $args['size'];
	}

	if ( is_object( $id_or_email ) && isset( $id_or_email->comment_ID ) ) {
		$id_or_email = get_comment( $id_or_email );
	}

	/**
	 * Filters whether to retrieve the avatar URL early.
	 *
	 * Passing a non-null value will effectively short-circuit get_avatar(), passing
	 * the value through the {@see 'get_avatar'} filter and returning early.
	 *
	 * @since 4.2.0
	 *
	 * @param string $avatar      HTML for the user's avatar. Default null.
	 * @param mixed  $id_or_email The Gravatar to retrieve. Accepts a user_id, gravatar md5 hash,
	 *                            user email, WP_User object, WP_Post object, or WP_Comment object.
	 * @param array  $args        Arguments passed to get_avatar_url(), after processing.
	 */
	$avatar = apply_filters( 'pre_get_avatar', null, $id_or_email, $args );

	if ( ! is_null( $avatar ) ) {
		/** This filter is documented in wp-includes/pluggable.php */
		return apply_filters( 'get_avatar', $avatar, $id_or_email, $args['size'], $args['default'], $args['alt'], $args );
	}

	if ( ! $args['force_display'] && ! get_option( 'show_avatars' ) ) {
		return false;
	}

	$url2x = get_avatar_url( $id_or_email, array_merge( $args, array( 'size' => $args['size'] * 2 ) ) );

	$args = get_avatar_data( $id_or_email, $args );

	$url = $args['url'];

	if ( ! $url || is_wp_error( $url ) ) {
		return false;
	}

	$class = array( 'avatar', 'avatar-' . (int) $args['size'], 'photo' );

	if ( ! $args['found_avatar'] || $args['force_default'] ) {
		$class[] = 'avatar-default';
	}

	if ( $args['class'] ) {
		if ( is_array( $args['class'] ) ) {
			$class = array_merge( $class, $args['class'] );
		} else {
			$class[] = $args['class'];
		}
	}

	$avatar = sprintf(
		"<img alt='%s' src='%s' srcset='%s' class='%s' height='%d' width='%d' %s/>",
		esc_attr( $args['alt'] ),
		esc_url( $url ),
		esc_url( $url2x ) . ' 2x',
		esc_attr( join( ' ', $class ) ),
		(int) $args['height'],
		(int) $args['width'],
		$args['extra_attr']
	);

	/**
	 * Filters the avatar to retrieve.
	 *
	 * @since 2.5.0
	 * @since 4.2.0 The `$args` parameter was added.
	 *
	 * @param string $avatar      &lt;img&gt; tag for the user's avatar.
	 * @param mixed  $id_or_email The Gravatar to retrieve. Accepts a user_id, gravatar md5 hash,
	 *                            user email, WP_User object, WP_Post object, or WP_Comment object.
	 * @param int    $size        Square avatar width and height in pixels to retrieve.
	 * @param string $default     URL for the default image or a default type. Accepts '404', 'retro', 'monsterid',
	 *                            'wavatar', 'indenticon','mystery' (or 'mm', or 'mysteryman'), 'blank', or 'gravatar_default'.
	 *                            Default is the value of the 'avatar_default' option, with a fallback of 'mystery'.
	 * @param string $alt         Alternative text to use in the avatar image tag. Default empty.
	 * @param array  $args        Arguments passed to get_avatar_data(), after processing.
	 */
	return apply_filters( 'get_avatar', $avatar, $id_or_email, $args['size'], $args['default'], $args['alt'], $args );
}

Cвязанные функции

Из метки: avatar (аватар)

Еще из раздела: Комментарии

Еще из тегов шаблона: Комментарии

25 комментов
Полезные 5 Все
  • Ablay2009

    Здравствуйте! Не подскажете, как получить только ссылку на аватар пользователя? Нужно сделать его (аватар) фоном блока.

    Ответить6.1 лет назад #
    • Kama5325

      Аватар можно получить по ссылке:

      $avatar = "http://www.gravatar.com/avatar/'. md5($mail) .'?s=32&default=http://<сслыка_на_картинку_по_уполчанию>";

      где, $mail - мыло пользователя, а 32 размер аватарки.

      Ответить6.1 лет назад #
  • @ Алексей

    Подскажите пожалуйста, 3 дня уже бьюсь не могу придумать. Как в wordpress вывести в блоке аватарки всех зареганых пользователей?

    Ответить5.10 лет назад #
    • Kama5325

      Получаете мылы всех пользователей и из них делаете аватарки:

      $blogusers = get_users();
      foreach ($blogusers as $user) {
      	$mail = md5($user->user_email);
      	echo '<img src="http://www.gravatar.com/avatar/'. $mail .'?s=32&default=http://<сслыка_на_картинку_по_уполчанию>" />';
      }

      параметры get_users() смотрите по ссылке ?.

      Ответить5.10 лет назад #
  • Роман

    У меня все изображения пользователей в виде битой картинки с крестом, хотя мой аватар админа выводиться корректно. Пробовал разные дефолтные настройки монстров - не помогает. Складывается впечатление, что граватар не находит изображение по мыло пользователя и выдает битую картинку не пытаясь заменить на выбранную заглушку. Как это устранить?

    Ответить5.5 лет назад #
    • Роман

      Код появляется следующий:

      <img alt="" src="http://1.gravatar.com/avatar/935caaf66e8f42b60f0ae134388d697c?s=40&d=%3Cpath_to_url%3E&r=G" class="avatar avatar-40 photo" height="40" width="40">
      Ответить5.5 лет назад #
      • Otshelnik-Fm191 cайт: otshelnik-fm.ru

        У меня такое было когда я тестировал на локальной машине. Когда вынес в интернет - граватар стал отдавать картинки

        Ответить5.5 лет назад #
  • Квазиморда cайт: vsmirnov.ru

    Боюсь, вызов

    $comment = get_the_author_meta('user_email');

    у меня выбирает мой e-mail из админки, а вовсе не автора коммента. А переменная $comment - не доступна. Как быть, не подскажете ли?

    Ответить3.2 года назад #
    • Квазиморда cайт: vsmirnov.ru

      Наверное я начал не с того. )) У меня на сайте установлен плагин "Simple Local Avatars". С его помощью пользователи сайта загрузили какие-то свои аватарки. Я читал о том, что если такие аватарки есть, то должны в комментах выводиться именно они, а уж если нету, то - граватары. Так вот, у тех пользователей сайта, у кого аватарки есть, всё-равно выводятся серые человечки вместо локальных аватарок. Подскажите пожалуйста, в какую сторону копать? )

      1
      Ответить3.2 года назад #
      • Квазиморда cайт: vsmirnov.ru

        Прошу прощения, что буквально засыпал своими вопросами и комментами, но проблему решил.

        Прежде всего, был не прав, когда написал, что $comment не работает. Просто не подумал, что это объект со свойствами. Написал код вот так:

        comment_author_email; ?>

        И всё самым неприличным образом заработало.

        Спасибо, Тимур за ваши статьи. ))

        Ответить3.2 года назад #
  • Скажите пожалуйста, а в какой форме определяется параметр $default? В смысле как это пишется? Просто $default = http://адрес, или $default = 'http://адрес'? Или вообще не так?

    Ответить3 года назад #
  • Игнат cайт: begunemogu.ru

    Спасибо за статью. Очень помогла разобраться. smile

    Ответить2.9 года назад #
  • Петр

    Скажите, как вывести аватарку пользователя, который авторизовался через фейсбук (или другую соц. сеть)? Нужно, чтобы вывелось его изображение, которое пользователь использует в самом фейсбуке.
    Функция get_avatar в данном случае не работает.
    Подскажите пожалуйста?

    Ответить2.5 года назад #
    • Kama5325

      функцию get_avatar() можно переопределить в плагине, для этого просто создайте плагин и в нем создайте функцию:

      function get_avatar(){
      	// код
      }

      Скопируйте в нее код самой get_avatar() и дополните его так чтобы если пользователь вошел через ФБ отдавался соответ. аватар.

      Подробнее о том как получить фото юзера ФБ читайте в сети, там должно быть...

      Ответить2.5 года назад #
  • Подскажите, а как сменить аватар непосредственно в самом фронт-енде? То есть не из админки, а на спец. странице? Нашел только как вывести аватар, а вот как сменить его - нет. Спасибо smile

    Ответить2.1 года назад #
    • Otshelnik-fm191 cайт: otshelnik-fm.ru

      Ставьте спец плагины. Я использую WP-Recall, но он не только для смены аватарки из фронта.

      Ответить2.1 года назад #
      • Спасибо за ответ! Но ради только одной аватарки ставить такой громоздкий плагин не совсем целесообразно. Может есть какое нить кастомное решение, без плагинов?

        Ответить2.1 года назад #
    • Даже в админке нельзя сменить аватар, только гравар. Наверное нужно создавать кастомное поле в таблице с ссылкой на изображение.

      Ответить2.1 года назад #
      • Kama5325

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

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

        Ответить2.1 года назад #
        • Нашел туториал на английском по созданию плагина для установки аватарок, попробую вытянуть оттуда код, что бы была возможность загружать на определенной странице аватарку. Можно, конечно, поставить и плагин, он не особо большой, но хотелось бы реализовать одну маленькую функцию без лишнего функционала. Очень удивлен, что у WP нет никаких функций по работе с аватарками.

          1
          Ответить2.1 года назад #
  • Devvver cайт: devvver.ru

    Столкнулся с проблемой из-за этой функции. Она грузит картинку с http, как поменять на https:// ?

  • Максим

    Добрый день, тут в описании параметров небольшая ошибка, наткнулся на неё когда дебажил свой код, первый параметр который передается в функции не может быть id комментария, там можно использовать id пользователя или другие допустимые объекты

    1
    Ответить3 месяца назад #

Здравствуйте, !