Ich verwende ein Plugin namens Einfache lokale Avatare , mit dem ich Autorenbilder hochladen kann Diese werden lokal auf meinem Server gespeichert (kein Gravatar). Das Plugin funktioniert einwandfrei und get_avatar
gibt den lokalen Avatar zurück.
Ich muss diesen Avatar jedoch in verwenden verschiedene Wege und verschiedene Orte und dafür brauche ich die lokale Avatar-Bild-URL anstelle des gesamten HTML-Tags. Ich könnte eine Wrapper-Funktion für get_avatar
schreiben, die RegEx oder SimpleXML verwendet, um und auszuwählen Geben Sie nur die URL zurück, aber ich habe mich gefragt, ob es dafür eine Möglichkeit gibt.
Antwort
Gute Nachrichten für WordPress-Versionen 4.2+
Seit Version 4.2 wurde die praktische Funktion get_avatar_url()
als Funktionsanforderung in Ticket # 21195 Vor einigen Jahren wurde jetzt mit dem Kern ausgeliefert :
/** * 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"]; }
wobei
get_avatar_data()
ist ebenfalls eine neue Hilfsfunktion.
Sie enthält diesen Codeteil:
... 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 ...
wo wir sehen können, dass wenn der Parameter url
gesetzt ist, die verfügbaren Filter und get_avatar_data
.
Nach dem letzten Upgrade auf 4.2 hatte ich ein Problem mit einem Thema, das die eigene Version von get_avatar_url()
, ohne Präfix für Funktionsnamen oder function_exists()
. Dies ist also ein Beispiel dafür, warum das wichtig ist 😉
Antwort
Die obige Antwort scheint umfassend, aber ich nur schrieb eine Wrapper-Funktion und ging weiter. Hier ist es, wenn Sie es brauchen (setzen Sie dies in functions.php
):
function get_avatar_url($get_avatar){ preg_match("/src="(.*?)"/i", $get_avatar, $matches); return $matches[1]; }
und verwenden Sie es dann, wo immer Sie es benötigen, in den Vorlagendateien wie folgt:
<img src="<? echo get_avatar_url(get_avatar( $curauth->ID, 150 )); ?>" align="left" class="authorimage" />
Es ist einfach einfacher.
Verwenden RegEx zum Parsen von HTML ist in diesem Fall in Ordnung, da hier nur ein img
-Tag analysiert wird, sodass es nicht zu kostspielig ist.
Kommentare
- Eine kleine Änderung … die Funktion get_avatar fügt den src in “ nicht ‚ Die Übereinstimmung ist also null. Der reguläre Ausdruck sollte preg_match sein (‚ / src = “ (. *?) “ / i ‚, $ get_avatar, $ Matches);
- danke @spdaly – ich hoffe, das Kommentieren würde das schaffen Der Autor zum Bearbeiten;) – danke aalaap
- Wenn Sie Ihre eigene Frage beantwortet haben, markieren Sie sie bitte als akzeptierte Antwort.
- @Darth_Vader Ich habe ‚ Ich bin nicht mehr darauf zurückgekommen, seit ich die Frage gestellt habe, daher bin ich ‚ nicht mehr sicher, ob dies der ideale Weg ist, dies zu tun. Ich denke, die neue Antwort zu 4.2+ ist besser.
Antwort
Sie können den Filter get_avatar
, um alle Daten an den Avatar zu senden, auch die URL im Markup. Ich denke, WP hat keine Funktion, um nur die URL des Avatar-Bildes zurückzugeben.
$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);
Sie können diese Funktion auch innerhalb eines Plugins oder Themas umschreiben ist die Funktion nur aktiv, wenn dieser Funktionsname nicht an einer anderen Stelle definiert ist.
if ( ! function_exists( "get_avatar" ) ) :
Es ist also möglich, einen Parameter hinzuzufügen, um nur die URL des Bildes zurückzugeben. Verwenden Sie dazu den Parameter $url
mit TRUE
und Sie erhalten nur die 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&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 .= "&d=" . urlencode( $default ); $rating = get_option("avatar_rating"); if ( !empty( $rating ) ) $out .= "&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); }
Eine weitere kleine Variante ist, dass Sie Erstellen Sie die URL mit der Regel von Gravatar.
function get_gravatar_url( $email ) { $hash = md5( strtolower( trim ( $email ) ) ); return "http://gravatar.com/avatar/" . $hash; }
Verwenden Sie diese in Ihrer Quelle mit den E-Mails der Autoren, und Sie erhalten die URL des Bildes.
Antwort
Ich denke, dies ist eine bessere Version der Antwort von 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] ); }
Antwort
get_user_meta($userId, "simple_local_avatar");
Einfach Lokale Avatare verwenden Metafelder zum Speichern des Avatars, sodass Sie die Werte einfach abrufen können, indem Sie get_user_meta
aufrufen und greifen Sie auf das Feld „simple_local_avatar“ zu. Sie erhalten ein Array wie folgt:
array ( [full] => "http://...", [96] => "http://...", [32] => "http://..." )
Antwort
Die Methode von alaap funktioniert in WordPress 4.2 nicht mehr.
Ich habe eine Lösung gefunden. Hier ist es und es funktioniert gut:
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; }
in der Vorlage verwenden Sie einfach:
<?php my_gravatar_url() ?>
Hinweis: Es muss innerhalb einer Schleife verwendet werden.
Antwort
Wenn der Avatar lokal hochgeladen wurde, gibt WP das img-Tag mit dem src-Attribut in doppelten Anführungszeichen zurück Ich fand, dass dieses Muster besser funktioniert:
preg_match("/src=["\"](.*?)["\"]/i", $get_avatar, $matches);
Antwort
Vor einigen Stunden Ich habe mich gefragt, wie ich das auch machen soll. Aber sobald ich die Lösung bekommen und ein Plugin erstellt habe, überprüfen Sie bitte, ob get_avatar_url ($ user_id, $ size) für Sie funktioniert oder nicht. Danke ..
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" );
Verwendung:
Aufruf der Funktion:
get_avatar_url( get_the_author_meta( "user_email"), 150);
Verwenden des Shortcodes:
do_shortcode("[avatar_url email="" . get_the_author_meta( "user_email") ."" size=150 ]" );