Кодекс Wordpress: php для URL-адреса текущего аватара пользователя

Мне было интересно, есть ли способ получить URI/URL аватара текущего вошедшего в систему пользователя в wordpress? Я нашел это как способ сгенерировать шорткод для вставки текущего аватара пользователя с помощью get_avatar (ниже php для размещения в файле functions.php темы):

<?php

function logged_in_user_avatar_shortcode() {
if ( is_user_logged_in() ) {
global $current_user;
get_currentuserinfo();
return get_avatar( $current_user->ID );
}
}
add_shortcode('logged-in-user-avatar', 'logged_in_user_avatar_shortcode');

?>

Однако это возвращает все изображение, включая атрибуты (img src, class, width, height, alt). Я хочу вернуть только URL-адрес, потому что я уже установил все атрибуты для своего изображения в шаблоне.

Пытаюсь сделать что-то вроде этого:

<img src="[shortcode-for-avatar-url]" class="myclass" etc >

Кто-нибудь знает способ сделать это?

Спасибо заранее


person Matt S    schedule 23.01.2014    source источник
comment
Это некрасиво, но есть ответ здесь   -  person naththedeveloper    schedule 23.01.2014
comment
Насколько я могу судить, у WP нет возможности возвращать только URL. По крайней мере, Кодекс не упоминает об этом. Так что приведенная выше ссылка, вероятно, ваш лучший выбор.   -  person naththedeveloper    schedule 23.01.2014
comment
Ох черт. Я попытался использовать первое решение по ссылке, оно почти сработало, но всегда показывает один и тот же аватар шаблона для каждого пользователя.   -  person Matt S    schedule 24.01.2014


Ответы (2)


Вы можете использовать preg_match, чтобы найти URL:

function logged_in_user_avatar_shortcode()
{
    if ( is_user_logged_in() )
    {
        global $current_user;
        $avatar = get_avatar( $current_user->ID );
        preg_match("/src=(['\"])(.*?)\1/", $avatar, $match);
        return $match[2];
    }
}
add_shortcode('logged-in-user-avatar', 'logged_in_user_avatar_shortcode');
person revo    schedule 23.01.2014
comment
Привет спасибо за идею. К сожалению, не работал, хотя. ‹img src=[аватар пользователя, вошедшего в систему] class=img-circle› на страницах выдает: ‹img src= class=img-circle›. Любые идеи? (PS я не забыл поместить новый код в functions.php) - person Matt S; 24.01.2014
comment
@ user1527123 изменить return $match[2]; на echo $match[2]; - person revo; 24.01.2014
comment
нет, это тоже не исправило. Получилось так же, только ничего не вернулось. :-( - person Matt S; 24.01.2014

Я написал PHP-функцию для получения пользовательского граватара в последних установках WordPress, если версия WordPress меньше 2.5, моя функция использовала другой способ получения пользовательского граватара. Слегка измененная версия, которая просто выводит URI граватара пользователя, можно найти ниже.

// Fallback for WP < 2.5
global $post;

$gravatar_post_id = get_queried_object_id();
$gravatar_author_id = get_post_field('post_author', $gravatar_post_id) || $post->post_author;//get_the_author_meta('ID');
$gravatar_email = get_the_author_meta('user_email', $gravatar_author_id);

$gravatar_hash = md5(strtolower(trim($gravatar_email)));
$gravatar_size = 68;
$gravatar_default = urlencode('mm');
$gravatar_rating = 'PG';
$gravatar_uri = 'http://www.gravatar.com/avatar/'.$gravatar_hash.'.jpg?s='.$gravatar_size.'&amp;d='.$gravatar_default.'&amp;r='.$gravatar_rating.'';

echo $gravatar_uri; // URI of GRAVATAR
person Giancarlo Colfer    schedule 23.01.2014
comment
Спасибо, но я использую последнюю версию wordpress и ищу локальный аватар (загруженный пользователем или шаблон по умолчанию), а не граватар. Спасибо, в любом случае. - person Matt S; 24.01.2014