Hoe krijg ik de avatar-URL in plaats van een HTML IMG-tag wanneer ik get_avatar gebruik?

Ik “gebruik een plug-in met de naam Eenvoudige lokale avatars waarmee ik auteursafbeeldingen kan uploaden die lokaal op mijn server zijn opgeslagen (geen Gravatar). De plug-in werkt prima en get_avatar retourneert de lokale avatar.

Ik moet die avatar echter gebruiken in verschillende manieren en verschillende plaatsen en daarvoor heb ik de lokale avatar-afbeeldings-URL nodig in plaats van de hele HTML-tag. Ik zou een wrapper-functie kunnen schrijven voor get_avatar die RegEx of SimpleXML gebruikt om uit te kiezen en retourneer alleen de URL, maar ik vroeg me af of er een bestaande manier is om dit te doen.

Answer

Goed nieuws voor WordPress versies 4.2+

Sinds versie 4.2 de handige get_avatar_url() functie, geïntroduceerd als een feature request in ticket # 21195 enkele jaren geleden, wordt nu geleverd met de kern :

/** * 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"]; } 

waarbij

get_avatar_data()is ook een nieuwe hulpfunctie.

Het bevat dit codegedeelte:

... 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 ... 

waar we kunnen zien dat wanneer de parameter url is ingesteld, de beschikbare filters en get_avatar_data.

Na onlangs upgraden naar 4.2, had ik een probleem met een thema dat zijn eigen versie van get_avatar_url(), zonder enige functienaamvoorvoegsel of een function_exists() controle. Dus dit is een voorbeeld van waarom dat belangrijk is 😉

Antwoord

Het antwoord hierboven lijkt alomvattend, maar ik schreef een wrapper-functie en ging verder. Hier is het als je het nodig hebt (plaats dit in functions.php):

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

en gebruik het dan waar je het nodig hebt in de sjabloonbestanden, zoals deze:

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

Het is gewoon eenvoudiger.

Gebruiken RegEx om HTML in dit geval te parseren is oké, omdat dit slechts één img tag parseert, dus het zal “niet te duur zijn.

Reacties

  • Een kleine verandering … de get_avatar functie plaatst de src binnen ” niet ‘ zodat de overeenkomst null is. De regex moet preg_match (‘ / src = ” (. *?) ” / i ‘, $ get_avatar, $ matches);
  • bedankt @spdaly – ik hoop dat commentaar het e auteur om te bewerken;) – bedankt aalaap
  • Als je je eigen vraag hebt beantwoord, markeer deze dan als het geaccepteerde antwoord.
  • @Darth_Vader Ik heb ‘ ben hier niet meer op teruggekomen sinds ik de vraag heb gepost, dus ik ‘ ben er niet meer zeker van of dit de ideale manier is om het te doen. Ik denk dat het nieuwe antwoord over 4.2+ beter is.

Antwoord

Je kunt het filter get_avatar voor het ophalen van alle gegevens naar de avatar, ook de url binnen de opmaak. Ik denk dat WP geen functie heeft om alleen de URL te retourneren als de avatarafbeelding.

$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); 

Je kunt deze functie ook herschrijven in een plug-in of thema , de functie is alleen actief, als deze functienaam niet op een andere plaats is gedefinieerd.

if ( ! function_exists( "get_avatar" ) ) : 

Het is dus mogelijk om een parameter toe te voegen om alleen de url van de afbeelding te retourneren, gebruik op deze manier de parameter $url met TRUE en je krijgt alleen de 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); } 

Een andere kleine variant is dat je maak de url aan met de regel van Gravatar.

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

gebruik dit op je bron met de e-mails van auteurs en je krijgt de url van hun afbeelding.

Answer

Ik denk dat dit een betere versie is van het antwoord van 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] ); } 

Antwoord

get_user_meta($userId, "simple_local_avatar"); 

Eenvoudig Lokale avatars gebruikt metavelden om de avatar op te slaan, dus u kunt de waarde (n) eenvoudig ophalen door get_user_meta te bellen en grijp het veld “simple_local_avatar”. Je “krijgt een array als volgt terug:

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

Antwoord

alaap “s methode werkt niet meer in WordPress 4.2

Ik kwam met een oplossing. Hier is het en het werkt goed:

 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; } 

gebruik in Template gewoon:

<?php my_gravatar_url() ?> 

Opmerking: het moet binnen een lus worden gebruikt.

Answer

Wanneer de avatar lokaal is geüpload, retourneert WP de img-tag met het src-attribuut tussen dubbele aanhalingstekens, dus Ik vond dat dit patroon beter werkte:

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

Antwoord

Een paar uur geleden , Ik vroeg me af hoe ik dat ook moest doen. Maar al snel kreeg ik de oplossing en maakte ik een plug-in, controleer of get_avatar_url ($ user_id, $ size) voor jou werkt of niet. Bedankt ..

Plugin-code:

/* 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" ); 

Gebruik:

De functie aanroepen:

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

Shortcode gebruiken:

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

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *