SYNCER

SYNCER

get_avatar_data() - アバター画像の情報を取得する

公開日:

get_avatar_data()は、指定したユーザーのアバター画像の情報を取得する関数です。

構文

array get_avatar_data( mixed $id_or_email, array $args = null )

パラメータ

$id_or_email

対象ユーザーのID、または、メールアドレス。

$args

初期値: null

アバター画像は、Gravatarというウェブサービスから取得しています。そのリクエストURLを調整できます。例えばサイズを変更したり、URLスキームを指定できます。

返り値

array

アバター画像の情報を含む配列。

関数

この関数内で利用している、別のWordPress関数です。

  • absint() - 数字を絶対値に変換する。
  • add_query_arg()
  • apply_filters() - フィルターイベントを発火する。
  • get_comment()
  • get_option()
  • get_user_by()
  • rawurlencode_deep()
  • set_url_scheme()
  • wp_parse_args()

フック

関数内で呼び出されるイベントです。

フィルター

  • pre_get_avatar_data
  • get_avatar_data
  • get_avatar_comment_types
  • get_avatar_url

サンプルコード

URLの調整なし

ユーザーIDだけを指定した場合です。取得できるのは、デフォルトの96pxの画像となります。

php

<?php
	// 実行
	$result = get_avatar_data( 1 ) ;

	// 結果
	var_dump( $result ) ;

結果 (出力内容) - PHP7.0.13

array(11) {
  ["size"]=>
  int(96)
  ["height"]=>
  int(96)
  ["width"]=>
  int(96)
  ["default"]=>
  string(2) "mm"
  ["force_default"]=>
  bool(false)
  ["rating"]=>
  string(1) "g"
  ["scheme"]=>
  NULL
  ["processed_args"]=>
  NULL
  ["extra_attr"]=>
  string(0) ""
  ["found_avatar"]=>
  bool(true)
  ["url"]=>
  string(81) "https://secure.gravatar.com/avatar/077e201764e814b4838cd3aabcd2717f?s=96&d=mm&r=g"
}

URLの調整あり

第2引数で、GravatarへのリクエストURLを調整できます。例えば、サイズ(size)を調整してみました。URLが先ほどとは変わっていることに注目して下さい。もちろん、取得できる画像がこのサイズになっています。

php

<?php
	// 実行
	$result = get_avatar_data( 1, [
		"size" => 48 ,
	] ) ;

	// 結果
	var_dump( $result ) ;

結果 (出力内容) - PHP7.0.13

array(11) {
  ["size"]=>
  int(48)
  ["height"]=>
  int(48)
  ["width"]=>
  int(48)
  ["default"]=>
  string(2) "mm"
  ["force_default"]=>
  bool(false)
  ["rating"]=>
  string(1) "g"
  ["scheme"]=>
  NULL
  ["processed_args"]=>
  NULL
  ["extra_attr"]=>
  string(0) ""
  ["found_avatar"]=>
  bool(true)
  ["url"]=>
  string(81) "https://secure.gravatar.com/avatar/077e201764e814b4838cd3aabcd2717f?s=48&d=mm&r=g"
}

ソースコード

wp-includes/link-template.php

/**
 * Retrieves default data about the avatar.
 *
 * @since 4.2.0
 *
 * @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 {
 *     Optional. Arguments to return instead of the default arguments.
 *
 *     @type int    $size           Height and width of the avatar image file in pixels. Default 96.
 *     @type int    $height         Display height of the avatar in pixels. Defaults to $size.
 *     @type int    $width          Display width of the avatar in pixels. Defaults to $size.
 *     @type string $default        URL for the default image or a default type. Accepts '404' (return
 *                                  a 404 instead of a default image), 'retro' (8bit), 'monsterid' (monster),
 *                                  'wavatar' (cartoon face), 'indenticon' (the "quilt"), 'mystery', 'mm',
 *                                  or 'mysteryman' (The Oyster Man), 'blank' (transparent GIF), or
 *                                  'gravatar_default' (the Gravatar logo). Default is the value of the
 *                                  'avatar_default' option, with a fallback of 'mystery'.
 *     @type bool   $force_default  Whether to always show the default image, never the Gravatar. Default false.
 *     @type string $rating         What rating to display avatars up to. Accepts 'G', 'PG', 'R', 'X', and are
 *                                  judged in that order. Default is the value of the 'avatar_rating' option.
 *     @type string $scheme         URL scheme to use. See set_url_scheme() for accepted values.
 *                                  Default null.
 *     @type array  $processed_args When the function returns, the value will be the processed/sanitized $args
 *                                  plus a "found_avatar" guess. Pass as a reference. Default null.
 *     @type string $extra_attr     HTML attributes to insert in the IMG element. Is not sanitized. Default empty.
 * }
 * @return array $processed_args {
 *     Along with the arguments passed in `$args`, this will contain a couple of extra arguments.
 *
 *     @type bool   $found_avatar True if we were able to find an avatar for this user,
 *                                false or not set if we couldn't.
 *     @type string $url          The URL of the avatar we found.
 * }
 */
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 Gravatar 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'] ) && ! is_null( $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 = $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 ( strpos( $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 ) {
		/**
		 * Filters the list of allowed comment types for retrieving avatars.
		 *
		 * @since 3.0.0
		 *
		 * @param array $types An array of content types. Default only contains 'comment'.
		 */
		$allowed_comment_types = apply_filters( 'get_avatar_comment_types', array( 'comment' ) );
		if ( ! empty( $id_or_email->comment_type ) && ! in_array( $id_or_email->comment_type, (array) $allowed_comment_types ) ) {
			$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 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_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 Gravatar 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 );
}

参考リンク