Je suis conscient que vous pouvez transmettre un nom de classe CSS personnalisé à un avatar à l'aide de ...
<?php echo get_avatar( $id_or_email, $size, $default, $alt, $args ); ?>
Comme...
get_avatar( $current_user->user_email, 128, null, null, array('class' => array('img-responsive', 'img-rounded') ) );
Mais je filtre get_avatar
pour remplacer Gravatar par une image de la bibliothèque multimédia, et le code semble avoir rendu la portion $args
non fonctionnelle.
Voici mon appel avec l'addition de classe $args
...
echo get_avatar($curauth->ID, $size='150', $default='', $alt=$curauth->display_name, $args = array( 'class' => array( 'rounded-circle' ) ) );
Mais cela n'ajoute rien.
Voici le code du filtre ...
/**
* Use ACF image field as avatar
* @author Mike Hemberger
* @link http://thestizmedia.com/acf-pro-simple-local-avatars/
* @uses ACF Pro image field (tested return value set as Array )
*/
add_filter('get_avatar', 'tsm_acf_profile_avatar', 10, 5);
function tsm_acf_profile_avatar( $avatar, $id_or_email, $size, $default, $alt ) {
$user = null; // This added by Robert Andrews to overcome "Notice: Undefined variable" for $user
// Get user by id or email (get_avatar needs to get a user by either id or email, so account for both)
if ( is_numeric( $id_or_email ) ) {
$id = (int) $id_or_email;
$user = get_user_by( 'id' , $id );
} elseif ( is_object( $id_or_email ) ) {
if ( ! empty( $id_or_email->user_id ) ) {
$id = (int) $id_or_email->user_id;
$user = get_user_by( 'id' , $id );
}
} else {
$user = get_user_by( 'email', $id_or_email );
}
if ( ! $user ) {
return $avatar;
}
// Get the user id
$user_id = $user->ID;
// Get the file id
$image_id = get_user_meta($user_id, 'avatar', true); // CHANGE TO YOUR FIELD NAME
// Bail if we don't have a local avatar
if ( ! $image_id ) {
return $avatar;
}
// Get the file size
$image_url = wp_get_attachment_image_src( $image_id, 'thumbnail' ); // Set image size by name
// Get the file url
$avatar_url = $image_url[0];
// Get the img markup
/* Run through Cloudinary
cf. http://cloudinary.com/documentation/image_transformations#modify_image_shape_and_style
crop fill, gravity face, enhance sharpen, 300 wide and tall only to get square image */
$avatar = '<img alt="' . $alt . '" src="http://res.cloudinary.com/braincloud/image/fetch/w_300,h_300,c_fill,g_face,e_sharpen,b_rgb:ccc/' . $avatar_url . '" class="img-fluid avatar avatar-' . $size . '" height="' . $size . '" width="' . $size . '"/>';
// Return our new avatar
return $avatar;
}
J'ai essayé d'ajouter $args
à la déclaration de fonction, comme si ...
function tsm_acf_profile_avatar( $avatar, $id_or_email, $size, $default, $alt, $args ) {
... mais la page de blog renvoie alors: Warning: Missing argument 6 for tsm_acf_profile_avatar() in /home/path/wp-content/plugins/plugin/my-gravatar-replacement-plugin.php on line 26
Quelqu'un a suggéré de regarder pluggable.php et de copier un code pertinent de la partie get_avatar
, mais je ne comprends pas.
Comment restaurer la fonctionnalité $args
afin de pouvoir continuer à ajouter des classes personnalisées à mes avatars?
Si vous regardez la documentation pour le filtre get_avatar()
, vous verrez que les rappels peuvent accepter 6 arguments:
apply_filters( 'get_avatar', string $avatar, mixed $id_or_email, int $size, string $default, string $alt, array $args )
Ce qui signifie que votre fonction de rappel accepte correctement les arguments, y compris le 6ème argument, $args
:
function tsm_acf_profile_avatar( $avatar, $id_or_email, $size, $default, $alt ) {
Le problème est que $args
n'est pas transmis à votre fonction de rappel. En effet, add_filter()
ne transmet que le nombre d'arguments spécifié dans le dernier argument, $accepted_args
. Voir la documentation :
$ supported_args
(int) (facultatif)
Le nombre d'arguments acceptés par la fonction. Valeur par défaut: 1
C'est en gros une façon longue de dire que vous devez changer 5
en 6
dans votre appel add_filter()
:
add_filter('get_avatar', 'tsm_acf_profile_avatar', 10, 6);