web-dev-qa-db-fra.com

Utiliser une image locale pour l'avatar par défaut

J'ai essayé de mettre cet extrait dans mon functions.php

add_filter( 'avatar_defaults', 'newgravatar' );

function newgravatar ($avatar_defaults) {
    $myavatar = get_bloginfo('template_directory') . '/images/default_avatar.png';
    $avatar_defaults[$myavatar] = "Locale";
    return $avatar_defaults;
}

Un nouvel avatar apparaît dans Options-Discussion. Le problème est que ce n’est pas du tout local. L’avatar est tiré de http://i1.wp.com/mydomain.com/wp-content/themes/mytheme/images/default_avatar.png.

Donc, ça passe de toute façon avec i1.wp.com .. comment puis-je avoir juste un lien LOCAL friggin?

2
MultiformeIngegno

Je me suis demandé comment faire cela moi-même et la même fonction décrite ci-dessus que tout le monde continue de suggérer ne fonctionne pas, peut-être en raison d'une mise à jour récente du code de base de WP, je ne suis pas tout à fait sûr. C'est un peu bidon et cela implique l'édition de fichiers de base (ce n'est pas bien) mais c'est une solution de contournement. Voici les étapes:

  1. Utilisez la même fonction spécifiée dans le message d'origine
  2. Ouvrez /wp-includes/pluggable.php et recherchez "function get_avatar", cela devrait vous amener là où la fonction est définie dans le fichier
  3. Faites défiler l'écran juste au-dessus du premier tag IMG, vous devriez voir ceci:

    $out = str_replace( '&', '&', esc_url( $out ) );
    
    $avatar = "<img alt='{$safe_alt}' src='{$out}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
    
  4. Juste en dessous de $out, ajoutez $out = $default;. Cela passe essentiellement l’URL source de l’image par défaut (stocké dans la table des options)

Cela devrait donc ressembler à ceci:

    $out = str_replace( '&#038;', '&amp;', esc_url( $out ) );
    $out = $default;

    $avatar = "<img alt='{$safe_alt}' src='{$out}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
} else {
    $avatar = "<img alt='{$safe_alt}' src='{$default}' class='avatar avatar-{$size} photo avatar-default' height='{$size}' width='{$size}' />";
}

return apply_filters('get_avatar', $avatar, $id_or_email, $size, $default, $alt);

Encore une fois, ce n'est évidemment pas idéal, car la prochaine fois que vous mettrez à jour WordPress, vous perdrez ce changement. Mais pour le moment ça marche.

Pour les futurs visiteurs qui souhaitent ne pas modifier les fichiers de base, vous pouvez envisager de filtrer la fonction WP _ get_avatar. Cela semble nécessiter de modifier la chaîne fournie dans le filtre avec une expression régulière pour supprimer le domaine gravatar. Je l'ai essayé mais je suis nul à regex. : P

1
GoTeamScotch

Le module Photon est activé dans le plugin Jetpack. Ce module achemine vos images via le CDN de WordPress.com. Si vous ne souhaitez pas que cela se produise, désactivez le module Photon dans Jetpack.

1
Otto