Получить только URL изображения профиля автора внутри цикла
Мне нужно получить ссылку на изображение профиля автора записи.
Я знаю, что можно использовать get_avatar();
, но это выводит полную разметку изображения
<img src="http://.../img.png" class="avatar img-responsive" alt="image">
Но нужен только атрибут src
изображения профиля автора.
Как я могу это получить? Возможно, мы можем использовать php
или js
, чтобы извлечь только значение src
из общего вывода.
Мой второй вопрос: как добавить это изображение
как post_thumbnail
, если для записи не существует миниатюры?
Поместите следующий код внутри цикла, чтобы удовлетворить ваши потребности:
<?php
$get_author_id = get_the_author_meta('ID');
$get_author_gravatar = get_avatar_url($get_author_id, array('size' => 450));
if(has_post_thumbnail()){
the_post_thumbnail();
} else {
echo '<img src="'.$get_author_gravatar.'" alt="'.get_the_title().'" />';
}
?>

Я не думаю, что get_avatart_uri()
является существующей функцией в WordPress...

https://developer.wordpress.org/reference/functions/get_avatar_url/, похоже на опечатку.

Помимо использования get_avatar_url
, вы также можете использовать get_avatar
. Если я не ошибаюсь, это то, что вам нужно.
Вопрос 1
Получить ссылку на аватар автора записи
<?php
// выводим только если функция gravatar существует
if (function_exists('get_avatar')) { ?>
<?php
// Преобразуем email в md5 хэш и устанавливаем размер изображения 32px
$gravatar = 'http://www.gravatar.com/avatar/' . md5(strtolower($user_email)) . '&s=32';
// Преобразуем email в md5 хэш без указания размера для использования в качестве изображения записи
$gravatar_bg = 'http://www.gravatar.com/avatar/' . md5(strtolower($user_email)) . '';
?>
<!-- Выводим gravatar как img src -->
<img src="<?php echo "$gravatar";?>" alt="Аватар пользователя" title="Аватар пользователя">
<!-- Выводим gravatar как background url -->
<div class="avatar" style="background: url(<?php echo $gravatar_bg ?>);" ></div>
<?php } ?>
Вопрос 2
Добавить это изображение как миниатюру записи, если для записи нет миниатюры
<?php
// Проверяем, есть ли у записи миниатюра
// if ( has_post_thumbnail() ) { // вариант 1
if ( '' != get_the_post_thumbnail() ) { // вариант 2
// если есть, выводим миниатюру
the_post_thumbnail();
} else {
// если нет, показываем gravatar изображение
echo '<img src="<?php echo "$gravatar";?>" alt="Аватар пользователя" title="Аватар пользователя">';
}
?>
Надеюсь, это поможет, удачи!
Ресурсы: Использование Gravatars | hast_post_thumbnail

Привет, я знаю, что могу проверить if(get_the_post_thumbnail())
и вывести это изображение в шаблоне. Но это не устанавливает post_thumbnail, а только выводит его в конкретном шаблоне. Я хочу, чтобы это set_post_thumbnail
. Как это сделать?

ОБНОВЛЕНИЕ (22 мая 2021) - Я использую плагин Simple Local Avatars, чтобы пользователи могли обновлять изображения локально. Приведённое ниже решение будет работать только если вы используете этот плагин.
На случай, если кто-то ищет полноразмерное изображение автора и не может его найти. Вот небольшой хак.
Простой способ
$avatar_url = get_avatar_url( $author_id ); // это даст изображение 96x96.
$final_url = str_replace('-96x96.', '.',$author_avatar_url);
Замена -96x96.
на просто .
. Нужно только убедиться, что имя изображения не содержит эту строку. Альтернативно можно найти ту же строку с конца и сделать замену с помощью substr_replace()
, например:
Более точный способ
$avatar_url = get_avatar_url( $author_id ); // это даст изображение 96x96.
$replace = '-96x96.';
$pos = strpos($avatar_url, $replace, -(strlen($replace)+5)); // +5 для длины расширения
$final_url = substr_replace($avatar_url, '.', $pos, strlen($replace));
Это первый результат в Google при поиске полноразмерного изображения автора, так что, возможно, кому-то поможет.

Я не думаю, что это сработает для стандартных Gravatars: размер не указан в URL таким образом, это параметр ?s=
. Как у вас настроены аватары? Кроме того, у get_avatar_url есть документированный параметр 'size' для массива args.

@Rup Извините!!! Вы правы, я использую "Simple Local Avatars"(https://wordpress.org/plugins/simple-local-avatars/), чтобы пользователи могли устанавливать свои изображения профиля локально, и, кажется, этот плагин позволяет мне получать URL в таком формате. Совсем забыл про этот плагин. Я добавлю информацию о нём в ответ выше.
