web-dev-qa-db-fra.com

Filtrer la liste d'avatars par défaut

J'utilise le crochet de filtre avatar_defaults pour filtrer la liste d'avatars par défaut. Par exemple:

function my_avatar_defaults( $avatar_defaults ) {
    $avatar_defaults['http://example.com/foo.png'] = __( 'Foo' );
    return $avatar_defaults;
}
add_filter( 'avatar_defaults', 'my_avatar_defaults' );

Cela fonctionne car si je visite Paramètres> Discussion, puis que je fais défiler l'écran vers le bas, je peux voir que Foo a été ajouté en tant qu'option d'avatar par défaut. Voir la capture d'écran suivante pour un exemple:

Default avatar list of options

Le problème est l'attribut src de l'image affichée à côté de Foo. Il semble faire un appel à Gravatar. Voici un exemple de code source que je récupère pour l'image à côté de Foo:

<img src="http://0.gravatar.com/avatar/efaeb0e0be9922051a1c4ccce766a141?s=32&d=http%3A%2F%2Fexample.com%2Ffoo.png%3Fs%3D32&r=G&forcedefault=1" />

Comment puis-je m'assurer que l'attribut src pointe vers l'URL de mon image au lieu de l'URL de Gravatar (qui semble contenir l'URL de mon image)?

3
henrywright

Vous le faites correctement.

L'appel à gravatar.com transmet l'emplacement de votre image personnalisée afin que WP puisse la charger. Regardez la chaîne de requête dans le src, vous verrez l'emplacement de votre image. Ça fonctionne comme ça.

0
butlerblog

Deux notes:

  1. get_avatar() est une fonction "pluggable". Cela signifie que vous pouvez écrire un plug-in pour contenir une nouvelle fonction nommée get_avatar(), qui écrasera alors la fonction d'origine utilisée par WP.
  2. get_avatar() a également un filtre

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

    que vous pouvez utiliser pour changer la valeur de retour:

    add_filter( 'get_avatar', function( $html, $id, $size, $default, $alt )
    {
        // apply some changes here
        return $html;
    }, 10, 5 );
    

    et cela signifie que vous pouvez simplement modifier également la sortie et supprimer l'appel src en "Gravatar" afin que cela ne se produise pas.

1
kaiser