Get_avatar का उपयोग करते समय मुझे HTML IMG टैग के बजाय अवतार URL कैसे मिलता है?


28

मैं सरल स्थानीय अवतारों नामक एक प्लगइन का उपयोग कर रहा हूं जो मुझे लेखक छवियों को अपलोड करने देता है जो मेरे सर्वर पर स्थानीय रूप से संग्रहीत हैं (कोई Gravatar)। प्लगइन ठीक काम करता है और get_avatarस्थानीय अवतार लौटाता है।

हालाँकि, मुझे उस अवतार को विभिन्न तरीकों और विभिन्न स्थानों पर उपयोग करने की आवश्यकता है और इसके लिए मुझे संपूर्ण HTML टैग के बजाय स्थानीय अवतार छवि URL की आवश्यकता है। मैं get_avatarकेवल URL निकालने और वापस करने के लिए RegEx या SimpleXML का उपयोग करने के लिए एक रैपर फ़ंक्शन लिख सकता था, लेकिन मैं सोच रहा था कि क्या ऐसा करने का कोई मौजूदा तरीका है।

जवाबों:


26

वर्डप्रेस संस्करणों के लिए अच्छी खबर है 4.2+

संस्करण 4.2 के बाद से कुछ वर्षों पहले टिकट # 21195 में सुविधा अनुरोध केget_avatar_url() रूप में पेश किया गया, अब कोर के साथ जहाज :

/**
 * 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पैरामीटर सेट किया गया है, उपलब्ध फ़िल्टर हैं pre_get_avatar_dataऔर get_avatar_data

हाल ही में ४.२ में अपग्रेड करने के बाद, मुझे एक थीम के साथ एक समस्या थी जिसने परिभाषित किया कि इसका get_avatar_url()कोई संस्करण है , बिना किसी फ़ंक्शन नाम के उपसर्ग या एक function_exists()चेक। तो यह एक उदाहरण है कि क्यों महत्वपूर्ण है ;-)


25

उपरोक्त उत्तर व्यापक लगता है, लेकिन मैंने सिर्फ एक आवरण समारोह लिखा और आगे बढ़ गया। यहाँ यह है अगर आपको इसकी आवश्यकता है (इसे इसमें डालें 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टैग पार्सिंग होगा, इसलिए यह बहुत महंगा नहीं होगा।


5
एक छोटा सा परिवर्तन ... get_avatar फ़ंक्शन src को "not 'के भीतर रखता है इसलिए मैच शून्य हो जाएगा। regex को preg_match (' / src =" (। *?) "/ I ', $ getavavatar, $ माचिस) होना चाहिए। ;
स्पेलि

धन्यवाद @spdaly - मुझे उम्मीद है कि टिप्पणी करने से लेखक को संपादित करना होगा;) - धन्यवाद आलाप
सागिव एसईओ

यदि आपने अपने प्रश्न का उत्तर दिया है तो कृपया इसे स्वीकृत उत्तर के रूप में चिह्नित करें।
D 17:Vᴀʀᴛʜ

@Darth_Vader मैं इस सवाल को पोस्ट करने के बाद वापस नहीं गया, इसलिए मुझे अब यकीन नहीं है कि यह करने का आदर्श तरीका है। मुझे लगता है कि 4.2+ के बारे में नया उत्तर बेहतर है।
आलाप

6

आप get_avatarअवतार को सभी डेटा प्राप्त करने के लिए फ़िल्टर का उपयोग कर सकते हैं , मार्कअप के अंदर भी यूआरएल। मुझे लगता है, WP डॉन `टी केवल अवतार छवि अगर वापसी के लिए एक समारोह है।

$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के साथ TRUEऔर आप केवल यूआरएल मिलता है।

/**
 * 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('unknown@gravatar.com')
    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;
}

लेखकों के ईमेल के साथ अपने स्रोत पर इस का उपयोग करें और आप वहाँ छवि का यूआरएल मिलता है।


2

मुझे लगता है कि यह आलाप के उत्तर का एक बेहतर संस्करण है:

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

1
get_user_meta($userId, 'simple_local_avatar');

सरल स्थानीय अवतार अवतार को संग्रहीत करने के लिए मेटा फ़ील्ड्स का उपयोग करता है, इसलिए आप get_user_meta'simple_local_avatar' फ़ील्ड को कॉल और हथियाने के द्वारा केवल मान प्राप्त कर सकते हैं । आपको एक सरणी वापस मिल जाएगी जैसे:

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

1

अलाप का तरीका वर्डप्रेस 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() ?>

सूचना: यह एक लूप के अंदर इस्तेमाल किया जाना चाहिए।


0

जब अवतार को स्थानीय रूप से अपलोड किया गया है, तो WP, दोहरे उद्धरण चिह्नों में src विशेषता के साथ img टैग लौटाता है, इसलिए मैंने पाया कि यह काम किया है:

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

0

कुछ घंटे पहले, मैं सोच रहा था कि यह कैसे करना है। लेकिन, जल्द ही मुझे समाधान मिल गया और एक प्लगइन बना, कृपया जांच लें कि क्या 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 ]' );
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.