Получить аватар вошедшего пользователя в WordPress

Вопрос или проблема

Как я могу отображать аватар пользователя в заголовке моего сайта на WordPress? Я пробовал:

<a href="https://wordpress.stackexchange.com/questions/33121/<?php echo get_author_posts_url($post->post_author); ?>" title="<?php the_author_meta( 'display_name', $post->post_author ); ?>">
<?php if( get_the_author_meta( 'user_custom_avatar', $post->post_author ) != '' ) { ?>
    <img src="<?php the_author_meta( 'user_custom_avatar', $post->post_author ); ?>" alt="" />
    <?php echo $curauth->display_name; ?>
<?php } else { ?>
    <?php echo get_avatar( get_the_author_meta( 'user_email', $post->post_author ), '80' ); ?>
<?php } ?>
</a>

Но каждый раз, когда зарегистрированный пользователь переходит к посту другого автора, аватар меняется на аватар этого автора. Я хочу, чтобы при входе пользователя его аватар оставался в верхней части страницы все время. Можно ли это реализовать?

Все, что вам нужно сделать, это передать адрес электронной почты текущего пользователя в функцию get_avatar().

<?php 

$current_user = wp_get_current_user();

if ( ($current_user instanceof WP_User) ) {
    echo get_avatar( $current_user->user_email, 32 );
}

?>

Вот несколько ссылок для подробностей:

get_avatar();
wp_get_current_user();

Ответ на вашу новую проблему в комментариях ниже:

<?php 

echo '<img src="'. get_the_author_meta( 'user_custom_avatar', $current_user->ID, 32 ) .'" />';

?>

В моем предыдущем коде было слишком много точек с запятой, этот код должен работать.

ИЗМЕНЕНИЕ

Это значительно упростит вам задачу. Не знаю, почему я не сделал это изначально. – Я просто добавлю это в ваш пример так, как вы хотите.

Настоящий ответ:

<a href="https://wordpress.stackexchange.com/questions/33121/<?php echo get_author_posts_url($post->post_author); ?>" title="<?php the_author_meta( 'display_name', $post->post_author ); ?>">
<?php if( get_the_author_meta( 'user_custom_avatar', $post->post_author ) != '' ) { ?>
    <img src="<?php the_author_meta( 'user_custom_avatar', $post->post_author ); ?>" alt="" />
    <?php echo $curauth->display_name; ?>
<?php } else { 
    $current_user = wp_get_current_user();
    echo get_avatar( $current_user->user_email, $post->post_author ), '80' ); } ?>
</a>

Извините за это.

Вот настоящий ответ Дрю Гурли без ошибки:

<a href="<?php echo esc_url(get_author_posts_url($post->post_author)); ?>" title="<?php echo esc_attr(get_the_author_meta('display_name', $post->post_author)); ?>">
    <?php if (get_the_author_meta('user_custom_avatar', $post->post_author) != '') { ?>
        <img src="<?php echo esc_url(get_the_author_meta('user_custom_avatar', $post->post_author)); ?>" alt="<?php echo esc_attr(get_the_author_meta('display_name', $post->post_author)); ?>" />
        <?php echo esc_html(get_the_author_meta('display_name', $post->post_author)); ?>
    <?php } else { 
        $current_user = wp_get_current_user(); 
        echo get_avatar($current_user->user_email, 80); // Исправьте синтаксис, убрав лишний `$post->post_author` внутри `get_avatar`
    } ?>
</a>

Ответ или решение

Чтобы получить аватар текущего вошедшего в систему пользователя и отобразить его в заголовке вашего сайта на WordPress, вы можете использовать следующую реализацию. Эта реализация гарантирует, что аватар будет оставаться постоянным для вошедшего пользователя, независимо от того, на пост какого автора он переходит.

Вот окончательное решение:

  1. Сначала убедитесь, что вы вызвали функцию wp_get_current_user() для получения информации о текущем пользователе.
  2. Затем используйте функцию get_avatar() для отображения аватара текущего пользователя, передав ее адрес электронной почты.

Вот пример кода, который вы можете добавить в файл заголовка вашей темы (обычно header.php):

<?php
$current_user = wp_get_current_user();
if ($current_user instanceof WP_User) {
    // Ссылка на профиль текущего пользователя
    $user_profile_url = esc_url(get_author_posts_url($current_user->ID));
    ?>
    <a href="<?php echo $user_profile_url; ?>" title="<?php echo esc_attr($current_user->display_name); ?>">
        <?php
        // Отображение аватара текущего пользователя
        echo get_avatar($current_user->user_email, 80); // Здесь 80 - это размер аватара в пикселях
        ?>
        <span><?php echo esc_html($current_user->display_name); ?></span>
    </a>
    <?php
}
?>

Объяснение кода:

  • wp_get_current_user() – эта функция получает информацию о текущем вошедшем пользователе.
  • get_author_posts_url($current_user->ID) – создает URL для страницы автора текущего пользователя.
  • get_avatar($current_user->user_email, 80) – извлекает аватар пользователя по его адресу электронной почты. Параметр 80 указывает размер аватара в пикселях.
  • esc_url(), esc_attr() и esc_html() – функции, использующиеся для экранирования URL, атрибутов и HTML соответственно, чтобы предотвратить проблемы с безопасностью и обеспечить корректное отображение.

Теперь, когда пользователь входит в систему, его аватар будет отображаться в заголовке вашего сайта, оставаясь неизменным при переходе между различными постами других авторов.

Оцените материал
Добавить комментарий

Капча загружается...