WordPress как на ладони

get_avatar_data()WP 4.2.0

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

Эта функция не проверят если ли реально аватар, она просто собирает URL на сервис gravatar.com. Чтобы проверить если ли у email аватар, вам нужно отдельно обработать полученный URL. Нужно указать в default 404, затем получить URL и попробовать получить картинку по этому URL через get_headers(). Если ответ вернет 404, то аватарки у email нет.

Смотрите также функцию get_avatar().

Основа для: get_avatar_url(), get_avatar()

Возвращает

Массив. Массив данных полученного аватара. Массив будет содержать все переданные в параметр $args данные а также дополнительные поля:

  • 'found_avatar' - (логический) true - если аватар пользователя найден, false или пусто - если не найден.

  • 'url' - (строка) УРЛ найденного аватара.

Возвращаемый параметр 'found_avatar' определен всегда, когда удалось получить картинку аватара, даже если параметр default=404. 'found_avatar' не указывает на то, есть ли у пользователя реальный аватар.

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

get_avatar_data( $id_or_email, $args );
$id_or_email(смешанный) (обязательный)

Идентификатор по которому будет определяться аватар. Может быть:

  • email - asd@asd.ru
  • gravatar md5 хэш (md5 хэш мыла)
  • ID пользователя - получит аватар пользователя по мылу
  • WP_User объект - получит аватар пользователя по мылу
  • WP_Post объект - получит аватар автора поста
  • WP_Comment объект - получит аватар комментатора
$args(массив)

Параметры получаемого аватара. По умолчанию:

  • size(число)
    Высота и ширина аватара в пикселях.
    По умолчанию: 96
  • default(строка)
    УРЛ на картинку по умолчанию - если не удалось получить аватар. Вместо УРЛ можно указать следующие значения:

    • 404 - вернет 404 вместо дефолтной картинки.
    • retro - пиксельная картинка 8bit:
    • monsterid - монстрик:
    • wavatar - мульт лицо:
    • indenticon - картинка-узор:
    • mystery, 'mm' или 'mysterman' - неизвестный человек:
    • blank - прозрачная GIF картинка.
    • gravatar_default - логотип Gravatar:

    По умолчанию: значение опции 'avatar_default' или 'mystery'

  • force_default(логический)
    Ставим true, если нужно всегда показывать дефолтную картинку и не показывать аватары совсем.
    По умолчанию: false

  • rating(строка)
    Максимально допустимый рейтинг выводимой аватарки. Может быть:

    • G — Подходит для любой аудитории;
    • PG — Может содержать оскорбительные элементы, обычно для аудитории старше 13 лет;
    • R — Рассчитан на взрослую аудиторию старше 17 лет;
    • X — Для ещё более зрелой аудитории;

    По умолчанию: значение опции 'avatar_rating'

  • scheme(строка)
    Схема УРЛ, которая будет использоваться. Может быть: 'http', 'https', 'login', 'login_post', 'admin', or 'relative'. Подробнее смотрите функцию set_url_scheme().
    По умолчанию: null

  • processed_args(массив)
    Дополнительные опции для передачи. При фильтрации и возврате данных функцией get_avatar_data() эти параметры будут добавлены в возвращаемый массив.
    По умолчанию: null

  • extra_attr(строка)
    HTML атрибуты для добавления к элементу IMG. Не очищаются.
    По умолчанию: ''

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

Примеры

0

#1 Получим данные аватарки по email юзера

$ava_data = get_avatar_data( 'asd@dsf.df', array(
	'size' => 48,
	'default'=>'identicon',
) );

/*
Array
(
	[size] => 48
	[height] => 48
	[width] => 48
	[default] => identicon
	[force_default] => 
	[rating] => g
	[scheme] => 
	[processed_args] => 
	[extra_attr] => 
	[found_avatar] => 1
	[url] => http://1.gravatar.com/avatar/4b508f04b661ba693130539bd29f5c0d?s=48&d=identicon&r=g
)
*/
0

#2 Получим данные аватара текущего пользователя

$ava_data = get_avatar_data( wp_get_current_user(), array(
	'size' => 24,
	'default'=>'wavatar',
) );

/*
Array
(
	[size] => 24
	[height] => 24
	[width] => 24
	[default] => wavatar
	[force_default] => 
	[rating] => g
	[scheme] => 
	[processed_args] => 
	[extra_attr] => 
	[found_avatar] => 1
	[url] => http://1.gravatar.com/avatar/155e695ab2251ee3c482c1e3e690683b?s=24&d=wavatar&r=g
)
*/
0

#3 Получим данные аватара автора текущей статьи

global $post;
$ava_data = get_avatar_data( $post, "size=52&default=monsterid");

/*
Array
(
	[size] => 52
	[height] => 52
	[width] => 52
	[default] => monsterid
	[force_default] => 
	[rating] => g
	[scheme] => 
	[processed_args] => 
	[extra_attr] => 
	[found_avatar] => 1
	[url] => http://1.gravatar.com/avatar/155e695ab2251ee3c482c1e3e690683b?s=52&d=monsterid&r=g
)
*/
0

#4 Передадим дополнительные параметры

$ava_data = get_avatar_data( 'asd@sd.sd', array(
	'processed_args' => array(10,'foo'),
	'extra_attr' => 'style="foo"',
));

print_r( $ava_data );

/*
Array
(
	[size] => 24
	[height] => 24
	[width] => 24
	[default] => mm
	[force_default] => 
	[rating] => x
	[scheme] => 
	[processed_args] => Array
		(
			[0] => 10
			[1] => foo
		)

	[extra_attr] => style="foo"
	[found_avatar] => 1
	[url] => http://1.gravatar.com/avatar/4420889f9734a17a5168dbec7891a4c9?s=24&d=mm&r=x
)
*/

Список изменений

С версии 4.2.0 Введена.

Код get_avatar_data() WP 6.5.2

function get_avatar_data( $id_or_email, $args = null ) {
	$args = wp_parse_args(
		$args,
		array(
			'size'           => 96,
			'height'         => null,
			'width'          => null,
			'default'        => get_option( 'avatar_default', 'mystery' ),
			'force_default'  => false,
			'rating'         => get_option( 'avatar_rating' ),
			'scheme'         => null,
			'processed_args' => null, // If used, should be a reference.
			'extra_attr'     => '',
		)
	);

	if ( is_numeric( $args['size'] ) ) {
		$args['size'] = absint( $args['size'] );
		if ( ! $args['size'] ) {
			$args['size'] = 96;
		}
	} else {
		$args['size'] = 96;
	}

	if ( is_numeric( $args['height'] ) ) {
		$args['height'] = absint( $args['height'] );
		if ( ! $args['height'] ) {
			$args['height'] = $args['size'];
		}
	} else {
		$args['height'] = $args['size'];
	}

	if ( is_numeric( $args['width'] ) ) {
		$args['width'] = absint( $args['width'] );
		if ( ! $args['width'] ) {
			$args['width'] = $args['size'];
		}
	} else {
		$args['width'] = $args['size'];
	}

	if ( empty( $args['default'] ) ) {
		$args['default'] = get_option( 'avatar_default', 'mystery' );
	}

	switch ( $args['default'] ) {
		case 'mm':
		case 'mystery':
		case 'mysteryman':
			$args['default'] = 'mm';
			break;
		case 'gravatar_default':
			$args['default'] = false;
			break;
	}

	$args['force_default'] = (bool) $args['force_default'];

	$args['rating'] = strtolower( $args['rating'] );

	$args['found_avatar'] = false;

	/**
	 * Filters whether to retrieve the avatar URL early.
	 *
	 * Passing a non-null value in the 'url' member of the return array will
	 * effectively short circuit get_avatar_data(), passing the value through
	 * the {@see 'get_avatar_data'} filter and returning early.
	 *
	 * @since 4.2.0
	 *
	 * @param array $args        Arguments passed to get_avatar_data(), after processing.
	 * @param mixed $id_or_email The avatar to retrieve. Accepts a user ID, Gravatar MD5 hash,
	 *                           user email, WP_User object, WP_Post object, or WP_Comment object.
	 */
	$args = apply_filters( 'pre_get_avatar_data', $args, $id_or_email );

	if ( isset( $args['url'] ) ) {
		/** This filter is documented in wp-includes/link-template.php */
		return apply_filters( 'get_avatar_data', $args, $id_or_email );
	}

	$email_hash = '';
	$user       = false;
	$email      = false;

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

	// Process the user identifier.
	if ( is_numeric( $id_or_email ) ) {
		$user = get_user_by( 'id', absint( $id_or_email ) );
	} elseif ( is_string( $id_or_email ) ) {
		if ( str_contains( $id_or_email, '@md5.gravatar.com' ) ) {
			// MD5 hash.
			list( $email_hash ) = explode( '@', $id_or_email );
		} else {
			// Email address.
			$email = $id_or_email;
		}
	} elseif ( $id_or_email instanceof WP_User ) {
		// User object.
		$user = $id_or_email;
	} elseif ( $id_or_email instanceof WP_Post ) {
		// Post object.
		$user = get_user_by( 'id', (int) $id_or_email->post_author );
	} elseif ( $id_or_email instanceof WP_Comment ) {
		if ( ! is_avatar_comment_type( get_comment_type( $id_or_email ) ) ) {
			$args['url'] = false;
			/** This filter is documented in wp-includes/link-template.php */
			return apply_filters( 'get_avatar_data', $args, $id_or_email );
		}

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

	if ( ! $email_hash ) {
		if ( $user ) {
			$email = $user->user_email;
		}

		if ( $email ) {
			$email_hash = md5( strtolower( trim( $email ) ) );
		}
	}

	if ( $email_hash ) {
		$args['found_avatar'] = true;
		$gravatar_server      = hexdec( $email_hash[0] ) % 3;
	} else {
		$gravatar_server = rand( 0, 2 );
	}

	$url_args = array(
		's' => $args['size'],
		'd' => $args['default'],
		'f' => $args['force_default'] ? 'y' : false,
		'r' => $args['rating'],
	);

	if ( is_ssl() ) {
		$url = 'https://secure.gravatar.com/avatar/' . $email_hash;
	} else {
		$url = sprintf( 'http://%d.gravatar.com/avatar/%s', $gravatar_server, $email_hash );
	}

	$url = add_query_arg(
		rawurlencode_deep( array_filter( $url_args ) ),
		set_url_scheme( $url, $args['scheme'] )
	);

	/**
	 * Filters the avatar URL.
	 *
	 * @since 4.2.0
	 *
	 * @param string $url         The URL of the avatar.
	 * @param mixed  $id_or_email The avatar 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_data(), after processing.
	 */
	$args['url'] = apply_filters( 'get_avatar_url', $url, $id_or_email, $args );

	/**
	 * Filters the avatar data.
	 *
	 * @since 4.2.0
	 *
	 * @param array $args        Arguments passed to get_avatar_data(), after processing.
	 * @param mixed $id_or_email The avatar to retrieve. Accepts a user ID, Gravatar MD5 hash,
	 *                           user email, WP_User object, WP_Post object, or WP_Comment object.
	 */
	return apply_filters( 'get_avatar_data', $args, $id_or_email );
}
3 комментария
    Войти