get_avatar를 사용할 때 HTML IMG 태그 대신 아바타 URL을 얻으려면 어떻게해야합니까?

저작자 이미지를 업로드 할 수있는 Simple Local Avatars 라는 플러그인을 사용하고 있습니다. 내 서버에 로컬로 저장됩니다 (Gravatar 없음). 플러그인은 정상적으로 작동하고 get_avatar는 로컬 아바타를 반환합니다.

하지만 해당 아바타를 전체 HTML 태그 대신 로컬 아바타 이미지 URL이 필요합니다. RegEx 또는 SimpleXML을 사용하여 선택하는 get_avatar에 대한 래퍼 함수를 작성할 수 있습니다. URL 만 반환하지만 기존 방법이 있는지 궁금합니다.

답변

WordPress 버전 4.2 이상

버전 4.2 이후 편리한 get_avatar_url() 기능이 티켓 iv id = “b53689c920에 기능 요청 으로 도입되었습니다. “>

# 21195 몇 년 전, 이제 코어와 함께 제공됩니다 :

/** * Retrieve the avatar URL. * * @since 4.2.0 * * @param mixed $id_or_email The Gravatar to retrieve a URL for. Accepts a user_id, gravatar md5 hash, * user email, WP_User object, WP_Post object, or comment object. * @param array $args { * Optional. Arguments to return instead of the default arguments. * * @type int $size Height and width of the avatar in pixels. Default 96. * @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 "mysterman" (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. * } * @return false|string The URL of the avatar we found, or false if we couldn"t find an avatar. */ function get_avatar_url( $id_or_email, $args = null ) { $args = get_avatar_data( $id_or_email, $args ); return $args["url"]; } 

여기서 get_avatar_data() 는 새로운 도우미 함수이기도합니다.

다음 코드 부분을 포함합니다.

... CUT ... /** * Filter 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 int|object|string $id_or_email A user ID, email address, or 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 ); } ... CUT ... 

여기서 url 매개 변수를 설정하면 사용 가능한 필터가 및 get_avatar_data.

최근 4.2로 업그레이드 한 후

, 함수 이름 접두사 또는function_exists()확인 없음. 이것이 왜 이것이 중요한지에 대한 예입니다.;-)

답변

위의 답변은 포괄적 인 것처럼 보이지만 저는 래퍼 함수를 작성하고 계속 진행했습니다. 필요한 경우 여기에 있습니다 (functions.php에 입력) :

function get_avatar_url($get_avatar){ preg_match("/src="(.*?)"/i", $get_avatar, $matches); return $matches[1]; } 

다음과 같은 템플릿 파일에서 필요할 때마다 사용할 수 있습니다.

<img src="<? echo get_avatar_url(get_avatar( $curauth->ID, 150 )); ?>" align="left" class="authorimage" /> 

더 간단합니다.

사용 이 경우 HTML을 구문 분석하는 RegEx는 괜찮습니다. 이는 하나의 img 태그 만 구문 분석하므로 비용이 너무 많이 들지 않습니다.

댓글 h3>

  • 약간 변경 … get_avatar 함수는 src를 ‘ div가 아닌 ” 내에 배치합니다. > 따라서 일치는 null이됩니다. 정규식은 preg_match (‘ / src = ” (. *?) ” / i ‘, $ get_avatar, $ matches);
  • @spdaly에게 감사합니다. e 작성자 편집;)-감사합니다 aalaap
  • 자신의 질문에 답한 경우 수락 된 답변으로 표시해주세요.
  • @Darth_Vader 저는 ‘ 질문을 게시 한 이후로 다시 돌아 가지 않았으므로 ‘이 작업이 이상적인 방법인지 더 이상 확신 할 수 없습니다. 4.2+에 대한 새로운 답변이 더 낫다고 생각합니다.

Answer

필터 get_avatar는 모든 데이터를 아바타로 가져오고 마크 업 내부의 URL도 가져옵니다. WP는 아바타 이미지 인 경우 URL 만 반환하는 기능이 없다고 생각합니다.

$avatar = "<img alt="{$safe_alt}" src="{$default}" class="avatar avatar-{$size} photo avatar-default" height="{$size}" width="{$size}" />"; apply_filters("get_avatar", $avatar, $id_or_email, $size, $default, $alt); 

또한 플러그인이나 테마 내에서이 기능을 다시 작성할 수 있습니다. ,이 기능 이름이 정의 된 다른 위치에 없으면 기능이 활성화됩니다.

if ( ! function_exists( "get_avatar" ) ) : 

이미지의 URL 만 반환하는 매개 변수를 추가 할 수 있습니다. 이와 같이 매개 변수 $url TRUE를 사용하면 URL 만 얻을 수 있습니다.

/** * Retrieve the avatar for a user who provided a user ID or email address. * * @since 2.5 * @param int|string|object $id_or_email A user ID, email address, or comment object * @param int $size Size of the avatar image * @param string $default URL to a default image to use if no avatar is available * @param string $alt Alternate text to use in image tag. Defaults to blank * @param boolean $url, true for get only the url of the image, no markup * @return string <img> tag for the user"s avatar */ function get_avatar( $id_or_email, $size = "96", $default = "", $alt = false, $url = FALSE ) { if ( ! get_option("show_avatars") ) return false; if ( false === $alt) $safe_alt = ""; else $safe_alt = esc_attr( $alt ); if ( !is_numeric($size) ) $size = "96"; $email = ""; if ( is_numeric($id_or_email) ) { $id = (int) $id_or_email; $user = get_userdata($id); if ( $user ) $email = $user->user_email; } elseif ( is_object($id_or_email) ) { // No avatar for pingbacks or trackbacks $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 ) ) return false; if ( !empty($id_or_email->user_id) ) { $id = (int) $id_or_email->user_id; $user = get_userdata($id); if ( $user) $email = $user->user_email; } elseif ( !empty($id_or_email->comment_author_email) ) { $email = $id_or_email->comment_author_email; } } else { $email = $id_or_email; } if ( empty($default) ) { $avatar_default = get_option("avatar_default"); if ( empty($avatar_default) ) $default = "mystery"; else $default = $avatar_default; } if ( !empty($email) ) $email_hash = md5( strtolower( trim( $email ) ) ); if ( is_ssl() ) { $host = "https://secure.gravatar.com"; } else { if ( !empty($email) ) $host = sprintf( "http://%d.gravatar.com", ( hexdec( $email_hash[0] ) % 2 ) ); else $host = "http://0.gravatar.com"; } if ( "mystery" == $default ) $default = "$host/avatar/ad516503a11cd5ca435acc9bb6523536?s={$size}"; // ad516503a11cd5ca435acc9bb6523536 == md5("[email protected]") elseif ( "blank" == $default ) $default = includes_url("images/blank.gif"); elseif ( !empty($email) && "gravatar_default" == $default ) $default = ""; elseif ( "gravatar_default" == $default ) $default = "$host/avatar/?s={$size}"; elseif ( empty($email) ) $default = "$host/avatar/?d=$default&amp;s={$size}"; elseif ( strpos($default, "http://") === 0 ) $default = add_query_arg( "s", $size, $default ); if ( !empty($email) ) { $out = "$host/avatar/"; $out .= $email_hash; $out .= "?s=".$size; $out .= "&amp;d=" . urlencode( $default ); $rating = get_option("avatar_rating"); if ( !empty( $rating ) ) $out .= "&amp;r={$rating}"; if ( $url ) $avatar = $out; else $avatar = "<img alt="{$safe_alt}" src="{$out}" class="avatar avatar-{$size} photo" height="{$size}" width="{$size}" />"; } else { if ( $url ) $avatar = $out; else $avatar = "<img alt="{$safe_alt}" src="{$default}" class="avatar avatar-{$size} photo avatar-default" height="{$size}" width="{$size}" />"; } return apply_filters("get_avatar", $avatar, $id_or_email, $size, $default, $alt); } 

또 다른 작은 변형은 Gravatar의 규칙으로 URL을 만듭니다.

function get_gravatar_url( $email ) { $hash = md5( strtolower( trim ( $email ) ) ); return "http://gravatar.com/avatar/" . $hash; } 

저자의 이메일과 함께 소스에서이 URL을 사용하면 해당 이미지의 URL을 얻을 수 있습니다.

답변

이것이 aalaap의 답의 더 나은 버전이라고 생각합니다.

// In your template ... $avatar_url = get_avatar_url ( get_the_author_meta("ID"), $size = "50" ); // Get src URL from avatar <img> tag (add to functions.php) function get_avatar_url($author_id, $size){ $get_avatar = get_avatar( $author_id, $size ); preg_match("/src="(.*?)"/i", $get_avatar, $matches); return ( $matches[1] ); } 

답변

get_user_meta($userId, "simple_local_avatar"); 

단순 로컬 아바타 는 메타 필드를 사용하여 아바타를 저장하므로 get_user_meta를 호출하여 값을 검색 할 수 있습니다. 및 “simple_local_avatar”필드를 가져옵니다. 다음과 같은 배열이 반환됩니다.

array ( [full] => "http://...", [96] => "http://...", [32] => "http://..." ) 

Answer

alaap의 방법은 WordPress 4.2에서 더 이상 작동하지 않습니다.

해결책을 찾았습니다. 여기 있습니다. 잘 작동합니다.

 function my_gravatar_url() { // Get user email $user_email = get_the_author_meta( "user_email" ); // Convert email into md5 hash and set image size to 80 px $user_gravatar_url = "http://www.gravatar.com/avatar/" . md5($user_email) . "?s=80"; echo $user_gravatar_url; } 

템플릿에서 다음을 사용하세요.

<?php my_gravatar_url() ?> 

참고 : 루프 내에서 사용해야합니다.

Answer

아바타가 로컬로 업로드되면 WP는 src 속성이있는 img 태그를 큰 따옴표로 묶어 반환하므로 이 패턴이 더 잘 작동 함을 발견했습니다.

preg_match("/src=["\"](.*?)["\"]/i", $get_avatar, $matches); 

Answer

몇 시간 전 , 저도 그렇게하는 방법이 궁금합니다. 그러나 곧 해결책을 얻고 플러그인을 만들었습니다. get_avatar_url ($ user_id, $ size) 가 당신에게 맞는지 확인하십시오. 감사합니다 ..

플러그인 코드 :

/* Plugin Name: Get Avatar URL Plugin URI: https://github.com/faizan1041/get-avatar-url Description: get_avatar returns image, get_avatar_url will give you the image src. Author: Faizan Ali Version: 1.0 Author URI: https://github.com/faizan1041/ License: GPL v2+ */ function get_avatar_url($user_id, $size) { $avatar_url = get_avatar($user_id, $size); $doc = new DOMDocument(); $doc->loadHTML($avatar_url); $xpath = new DOMXPath($doc); $src = $xpath->evaluate("string(//img/@src)"); return $src; } function sc_get_avatar_url( $atts ) { $atts = shortcode_atts( array( "email" => "", "size" => 150 ), $atts, "avatar_url" ); return get_avatar_url($atts["email"],$atts["size"]); } add_shortcode( "avatar_url", "sc_get_avatar_url" ); 

사용법 :

함수 호출 :

get_avatar_url( get_the_author_meta( "user_email"), 150); 

단축 코드 사용 :

do_shortcode("[avatar_url email="" . get_the_author_meta( "user_email") ."" size=150 ]" ); 

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다