Obtener el avatar del usuario logeado en WordPress
¿Cómo puedo obtener el avatar de un usuario para mostrar en el encabezado de mi sitio WordPress? He probado:
<a href="<?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>
Pero cada vez que el usuario logeado visita un post de otro autor, el avatar cambia al de ese autor. Quiero que cuando un usuario inicie sesión, su avatar permanezca siempre en la parte superior de la página. ¿Es posible hacer esto?
Todo lo que necesitas hacer es pasar la dirección de correo electrónico del usuario actual a la función get_avatar().
<?php
$current_user = wp_get_current_user();
if ( ($current_user instanceof WP_User) ) {
echo get_avatar( $current_user->user_email, 32 );
}
?>
Aquí hay algunos enlaces con detalles específicos:
get_avatar(); wp_get_current_user();
Una respuesta a tu nuevo problema en los comentarios a continuación:
<?php
echo '<img src="'. get_the_author_meta( 'user_custom_avatar', $current_user->ID, 32 ) .'" />';
?>
Tenía un punto y coma de más en el código que te di antes, esto debería funcionar.
EDITADO
Esto lo hará 10 veces más fácil para ti. No sé por qué no lo hice de esta manera desde el principio. - Simplemente lo agregaré a tu fragmento de ejemplo como lo deseas.
La respuesta real:
<a href="<?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>
Lo siento por eso.

¿hay alguna manera de obtener la imagen que subió el usuario? ¿Cómo incorporar esta función en tu solución para tener ambas opciones: <img src="' . get_the_author_meta( 'user_custom_avatar', $author->author_ID ) . '" alt="" />';

Intenté agregar echo get_the_author_meta( 'user_custom_avatar', $current_user->ID, 32 ); y muestra el enlace al avatar en lugar del avatar personalizado. Estoy atascado. ¿Podrías ayudarme?

Bueno, si está mostrando el enlace a la imagen, solo colócalo dentro de una etiqueta img en tu tema. <img src="<?php echo get_the_author_meta( 'user_custom_avatar', $current_user->ID, 32 ); ?>" />

No sé dónde colocar el código. No muestra nada. Si lo pongo en lugar del echo original me da el error de: unexpected '<'

Bueno, me diste la función pero estoy colocando el código en header.php, así que esta no es una forma válida porque recibo un error. Oh bueno...

Aquí está la Respuesta Real de Drew Gourley sin el error:
<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); // Corregir la sintaxis aquí eliminando el `$post->post_author` innecesario dentro de `get_avatar`
} ?>
</a>
