Alternative zur Verwendung der Funktion get_avatar?

7

Ich habe einen WP-Hack verwendet, um die Bilder des Autors anzuzeigen. Zum Beispiel hat meine single.php einen Autoren-Slug, der das Bild des Autors anzeigt.

Ich habe einen Ordner namens Autoren in meinem Themen- / Bildordner erstellt. Basierend auf der ID des Autors benenne ich die Datei 1.jpg, 2.jpg und so weiter.

Also nenne ich dieses Bild als

<img src="<?php bloginfo('template_directory') ?>/images/authors/<?php the_author_ID()?>.jpg" alt="<?php the_author(); ?>">

Jetzt ändere ich ein Plugin, das die Autoren in der Seitenleiste anzeigt. Dieses Plugin verwendet jedoch die Funktion get_avatar, die wie folgt lautet:

/**
                 * If show avatar option is checked, add get_avatar function to cache.
                 */
                if($jmetc_options['show_avatar'] == 1) {
                    $jmevar['cache'] .= get_avatar($tc->comment_author_email, $jmetc_options['avatar_size']);
                }

Kann mir jemand raten, wie man get_avatar verwendet / ändert, um den von mir verwendeten Standardcode zu verwenden?

Schlitten81
quelle
Danke für den Tipp Chip .. ich bekomme ein unerwartetes '.' Fehler in der Funktion
Sledge81
Ok, musste das entfernen; nach get_template_uri .. so dass es jetzt behoben ist .. immer noch nicht in der Lage, die vorgenommenen Änderungen zu sehen. Ich habe das apply_filters('get_avatar', $avatar, $id_or_email, $size, $default, $alt);Ersetzen durch get_avatar verwendet ($ tc und so weiter
Sledge81
Sie sollten in meiner Antwort einen Kommentar abgeben , damit ich benachrichtigt werde, wenn Sie einen Kommentar abgeben. :)
Chip Bennett

Antworten:

10

Die get_avatar()Funktion wendet einen get_avatarFilter-Hook an, mit dem Sie das Avatar-Markup ändern können:

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

Ich denke, dies wäre der richtige Weg, um sich in diesen Filter einzuklinken:

function mytheme_get_avatar( $avatar ) {
    $avatar = '<img src="<' . get_template_directory_uri() . '/images/authors/' . get_the_author_ID() . '.jpg" alt="' . get_the_author() . '">';
    return $avatar;
}
add_filter( 'get_avatar', 'mytheme_get_avatar' );

BEARBEITEN

ps Eine gute Alternative zu diesem Ansatz könnte das Simple Local Avatars Plugin sein.

BEARBEITEN 2

Der Filter wird mit add_filter()nicht angewendet apply_filters(). Das war ein Tippfehler von meiner Seite; jetzt behoben!

BEARBEITEN 3

Ich denke nicht, dass das richtig ist:

PS: Nur um zu klären .. Ich ersetzt get_avatar($tc->comment_author_email, $jmetc_options['avatar_size']); mitadd_filter('get_avatar', $avatar, $id_or_email, $size, $default, $alt);

Zunächst rufen Sie weiterhin get_avatar()Ihre Vorlagendatei auf und übergeben dieselben Parameter wie zuvor. Der add_filter()Anruf gehört in functions.php.

Zweitens können Sie zusätzliche Parameter an Ihre Filterfunktion übergeben. z.B:

function mytheme_get_avatar( $avatar, $id_or_email, $size ) {
    $avatar = '<img src="<' . get_template_directory_uri() . '/images/authors/' . $id_or_email . '.jpg" alt="' . get_the_author() . '" width="' . $size . 'px" height="' . $size . 'px" />';
    return $avatar;
}
add_filter( 'get_avatar', 'mytheme_get_avatar', 10, 3 );
Chip Bennett
quelle
Hoppla! Der Code wurde aktualisiert, um einige kleine Probleme zu beheben. Ich muss wirklich lernen, vor meinem Morgenkaffee keinen Code zu schreiben ...
Chip Bennett
Also habe ich apply_filters durch add_filter ersetzt, aber nichts ändert sich. Von Firebug wird immer noch die Standard-Gravatar-URL abgerufen. <img width="60" height="60" class="avatar avatar-60 photo" src="http://1.gravatar.com/avatar/782b5a7a555f8147ac91d84c53e5dfa2?s=60&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D60&amp;r=G" alt="">
Sledge81
PS: Nur zur Klarstellung. Ich ersetzte get_avatar($tc->comment_author_email, $jmetc_options['avatar_size']);durchadd_filter('get_avatar', $avatar, $id_or_email, $size, $default, $alt);
Sledge81
Siehe aktualisierte Antwort. Stellen Sie sicher, dass Sie weiterhin get_avatar()Ihre Vorlagendatei aufrufen und die erforderlichen Parameter an Ihre Filterfunktion übergeben.
Chip Bennett
1
@ChipBennet Müssen Sie nicht angeben add_filter( 'get_avatar', 'mytheme_get_avatar', <whatever_priority>, 3 /* number of args! */ );, um diese Argumente tatsächlich zu erhalten?
Frank Nocke
0

Es gibt einen kleinen Fehler in der obigen Funktion

Verwenden Sie dies besser:

function mytheme_get_avatar( $avatar, $id_or_email, $size ) {
    $avatar = '<img src="' . get_template_directory_uri() . '/images/authors/' . $id_or_email . '.jpg" alt="' . get_the_author() . '" width="' . $size . 'px" height="' . $size . 'px" />';
    return $avatar;
}
add_filter( 'get_avatar', 'mytheme_get_avatar', 10, 3 );
Jürgen
quelle