Get_avatar ব্যবহার করার সময় আমি কীভাবে এইচটিএমএল আইএমজি ট্যাগের পরিবর্তে অবতার ইউআরএল পাব?


28

আমি সিম্পল লোকাল অবতারস নামে একটি প্লাগইন ব্যবহার করছি যা আমাকে লেখক চিত্রগুলি আপলোড করতে দেয় যা স্থানীয়ভাবে আমার সার্ভারে সঞ্চিত রয়েছে (কোন গ্রাভাটার নেই)। প্লাগইনটি সূক্ষ্মভাবে কাজ করে এবং get_avatarস্থানীয় অবতারটি দেয়।

তবে আমাকে সেই অবতারটি বিভিন্ন উপায়ে এবং বিভিন্ন জায়গায় ব্যবহার করতে হবে এবং তার জন্য আমার পুরো এইচটিএমএল ট্যাগের পরিবর্তে স্থানীয় অবতার চিত্রের URL দরকার। আমি get_avatarকেবল একটি ইউআরএল বাছাই করতে এবং ফিরে পেতে RegEx বা সিম্পল এক্সএমএল ব্যবহার করে তার জন্য একটি মোড়ক ফাংশন লিখতে পারি , তবে আমি ভাবছিলাম যে এটি করার কোনও বিদ্যমান উপায় আছে কিনা।

উত্তর:


26

ওয়ার্ডপ্রেস সংস্করণ 4.2+ জন্য সুসংবাদ

সংস্করণ ৪.২ থেকে হ্যান্ডি get_avatar_url()ফাংশন, কিছু বছর আগে # 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প্যারামিটার সেট করা থাকে তখন উপলব্ধ ফিল্টারগুলি হয় 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 ফাংশনটি এসআরসিটিকে "না" এর মধ্যে রাখে যাতে ম্যাচটি শূন্য হয় The রেজেক্সটি প্রিগ_ম্যাচ হওয়া উচিত ('/ src = "(। *?)" / I', $ get_avatar, $ ম্যাচ) ;
spdaly

ধন্যবাদ @ এসপিডি - আমি আশা করি মন্তব্যটি লেখককে সম্পাদনা করতে সক্ষম করবে;) - ধন্যবাদ
আলাপ

আপনি যদি নিজের প্রশ্নটির উত্তর দিয়ে থাকেন তবে তা গ্রহণযোগ্য উত্তর হিসাবে চিহ্নিত করুন।
DᴀᴅᴇʀVᴀᴅᴇʀ

@ দার্থ_ভেদার আমি প্রশ্ন পোস্ট করার পর থেকে আমি এটিতে আর ফিরে যাইনি, সুতরাং আমি এটি নিশ্চিত করতে পারি না যে এটি করার আদর্শ উপায় এটি কিনা। আমি মনে করি 4.2+ সম্পর্কে নতুন উত্তরটি আরও ভাল।
aalaap

6

আপনি get_avatarঅবতারের সমস্ত ডেটা, মার্কআপের ভিতরে থাকা 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সাথে প্যারামটি ব্যবহার করুন 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);
}

আরেকটি ছোট রূপটি হ'ল, আপনি গ্রাভাতার নিয়ম দিয়ে ইউআরএল তৈরি করেন।

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 অবতাররা অবতারটি সঞ্চয় করার জন্য মেটা ক্ষেত্রগুলি ব্যবহার করে, তাই আপনি 'সরল_লোকাল_ভাতার' ক্ষেত্রটি কল করে এবং দখল করে কেবল মান (গুলি) পেতে পারেন । আপনি এর মতো একটি অ্যারে ফিরে পাবেন:

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

1

আলাপের পদ্ধতি ওয়ার্ডপ্রেস ৪.২ এ আর কাজ করে না

আমি একটি সমাধান নিয়ে এসেছি। এটি এখানে এবং এটি ভাল কাজ করছে:

 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

যখন স্থানীয়ভাবে অবতারটি আপলোড করা হয়, ডাব্লুপি, ডাবল উদ্ধৃতিতে src বৈশিষ্ট্যের সাথে img ট্যাগটি ফেরত দেয়, তাই আমি এই প্যাটার্নটি আরও ভালভাবে কাজ করতে পেরেছি:

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

0

কয়েক ঘন্টা আগে আমিও কীভাবে এটি করব তা ভাবছিলাম। তবে, শীঘ্রই আমি সমাধান পেয়েছি এবং একটি প্লাগইন তৈরি করেছি, দয়া করে get_avatar_url ($ ব্যবহারকারী_আইডি, $ আকার) আপনার জন্য কাজ করে কিনা তা পরীক্ষা করে দেখুন । ধন্যবাদ ..

প্লাগিন কোড:

/*
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 ]' );
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.