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?


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 );

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 );
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.