it-swarm.com.de

Benutzerdefinierter Benutzeravatar in der Wordpress-Benutzerliste

Standardmäßig verwendet Wordpress Gravatar für Benutzeravatare.

Ich habe ein benutzerdefiniertes Feld für Avatar-Uploads erstellt und verwende es als Benutzeravatare auf verschiedenen Seiten des Themas.

Auf der Seite "Alle Benutzer" des Administrators befindet sich eine Spalte, in der normalerweise der Avatar des Benutzers angezeigt wird (siehe unten). Gibt es eine Möglichkeit, mein benutzerdefiniertes Feld statt des Standard-Gravatar-Felds zu verwenden?

 enter image description here 

3
Koleon

Alternativ zu meiner anderen Antwort können Sie auch den Filter get_avatar verwenden. Requisiten an Sumit um mich auf dieses zu aufmerksam zu machen.

Der Vorteil der Verwendung des get_avatar-Filters besteht darin, dass Ihr benutzerdefinierter Avatar angewendet werden sollte. Überall Wordpress verwendet ihn und nicht nur in dieser Benutzerliste, mit der sich meine andere Antwort befasst. Wenn Sie Plugins verwenden, die Benutzeravatare anzeigen, sollte diese Lösung auch für sie funktionieren, vorausgesetzt, sie spielen gut und verwenden die Wordpress-Filter, die sie verwenden sollten :)

Die offiziellen Dokumente für den get_avatar Filter sind hier .

Im functions.php Ihres Themas möchten Sie Ihre Funktion folgendermaßen einrichten:

add_filter("get_avatar", "wpse_228870_custom_user_avatar", 1, 5);

function wpse_228870_custom_user_avatar($avatar, $id_or_email, $size, $alt, $args){

  // determine which user we're asking about - this is the hard part!
  // ........

  // get your custom field here, using the user's object to get the correct one
  // ........

  // enter your custom image output here
  $avatar = '<img alt="' . $alt . '" src="image.png" width="' . $size . '" height="' . $size . '" />';

  return $avatar;

}

Jetzt fehlt eine Menge daran, weil Wordpress möglicherweise frustrierenderweise kein sauberes Benutzerobjekt oder keine Benutzer-ID an diesen Filter weiterleitet - laut den Dokumenten, die es uns geben kann:

eine Benutzer-ID, ein Gravatar-MD5-Hash, eine Benutzer-E-Mail, ein WP_User-Objekt, ein WP_Post-Objekt oder ein WP_Comment-Objekt

Die meisten dieser Probleme können wir lösen - wenn wir einen Gravatar-Hash haben, der etwas schwierig ist -, aber im Rest können wir die integrierten Wordpress-Funktionen verwenden, um das richtige Benutzerobjekt zu erhalten.

Es gibt ein Beispiel, das in den alten Wordpress-Dokumenten dazu verwendet wird . Damit dieser Filter jedoch überall dort richtig funktioniert, wo er verwendet wird, müssen Sie ein wenig mehr schreiben, um sicherzustellen, dass Sie auch ein eingehendes Post- oder Kommentarobjekt erkennen und bearbeiten können (möglicherweise mit dem Befehl PHP. _ ist_eine Funktion ) und erhält dann den dazugehörigen Beitrags- oder Kommentarautor.

5
Tim Malone

Wir könnten auch einen der folgenden Filter verwenden, die seit WordPress 4.2 verfügbar sind:

In Bezug auf das Abrufen der Benutzer-ID aus dem $id_or_email können wir sehen, wie es in core gemacht wird:

$email_hash = '';
$user = $email = false;
if ( is_object( $id_or_email ) && isset( $id_or_email->comment_ID ) ) {
    $id_or_email = get_comment( $id_or_email );
}
// Process the user identifier.
if ( is_numeric( $id_or_email ) ) {
    $user = get_user_by( 'id', absint( $id_or_email ) );
} elseif ( is_string( $id_or_email ) ) {
    if ( strpos( $id_or_email, '@md5.gravatar.com' ) ) {
        // md5 hash
        list( $email_hash ) = explode( '@', $id_or_email );
    } else {
        // email address
        $email = $id_or_email;
    }
} elseif ( $id_or_email instanceof WP_User ) {
    // User Object
    $user = $id_or_email;
} elseif ( $id_or_email instanceof WP_Post ) {
    // Post Object
    $user = get_user_by( 'id', (int) $id_or_email->post_author );
} elseif ( $id_or_email instanceof WP_Comment ) {
    /**
     * Filter the list of allowed comment types for retrieving avatars.
     *
     * @since 3.0.0
     *
     * @param array $types An array of content types. Default only contains 'comment'.
     */
    $allowed_comment_types = apply_filters( 'get_avatar_comment_types', array( 'comment' ) );
    if ( ! empty( $id_or_email->comment_type ) && ! in_array( $id_or_email->comment_type, (array) $allowed_comment_types ) ) {
        $args['url'] = false;
        /** This filter is documented in wp-includes/link-template.php */
        return apply_filters( 'get_avatar_data', $args, $id_or_email );
    }
    if ( ! empty( $id_or_email->user_id ) ) {
        $user = get_user_by( 'id', (int) $id_or_email->user_id );
    }
    if ( ( ! $user || is_wp_error( $user ) ) && ! empty( $id_or_email->comment_author_email ) ) {
        $email = $id_or_email->comment_author_email;
    }
}

Es wäre einfacher, wenn die Benutzer-ID an die Filter-Rückrufe übergeben würde oder wenn dafür eine spezielle Funktion verfügbar wäre, z.

wp_get_user_from_id_or_email( $id_or_email )
2
birgire

EDIT: Meine ursprüngliche Lösung ist unten, aber Sumit hat mich in den Kommentaren auf die Existenz des get_avatar Filters aufmerksam gemacht . Ich habe eine zusätzliche Antwort gepostet, die zeigt, wie diese Option ebenfalls implementiert werden kann.


Ja, das kannst du.

Die in einer dieser Listentabellen in Wordpress Admin angezeigten Spalten können gefiltert werden. Mithilfe einer benutzerdefinierten Funktion im functions.php Ihres Themas können Sie Spalten entfernen oder eigene hinzufügen.

Mit dieser Funktion können Sie sowohl die Standardspalte entfernen als auch eine benutzerdefinierte hinzufügen:

add_filter("manage_users_columns", "wpse_228870_custom_user_avatar");

function wpse_228870_custom_user_avatar($columns){

    $columns = 
        array_slice($columns, 0, 1) // leave the checkbox in place (the 0th column)
        + array("custom_avatar" => "") // splice in a custom avatar column in the next space
        + array_slice($columns, 1) // include any other remaining columns (the 1st column onwards)
    ;

    return $columns;

}

Es gibt viele Möglichkeiten, wie Sie das tun können, aber in diesem Beispiel habe ich einfach das $columns-Array genommen und es massiert, um Ihren benutzerdefinierten Avatar an der zweiten Position zu platzieren. Sie können jede PHP Array-Funktion verwenden, um diese Spalten nach Belieben zu bearbeiten.

Als nächstes müssen wir Wordpress mitteilen, was in dieser custom_avatar-Spalte angezeigt werden soll:

add_filter("manage_users_custom_column", "wpse_228870_custom_user_avatar_column", 10, 3);

function wpse_228870_custom_user_avatar_column($output, $column_name, $user_id){

    // bow out early if this isn't our custom column!
    if($column_name != "custom_avatar"){ return $output; }

    // get your custom field here, using $user_id to get the correct one
    // ........

    // enter your custom image output here
    $output = '<img src="image.png" width="50" height="50" />';

    return $output;

}

Wenn das Bild nicht die richtigen Abmessungen aufweist oder nicht richtig formatiert ist, können Sie Wordpress-Administratoren Stile hinzufügen die Größe der Spalten und ihres Inhalts besser steuern.

Sie können auch mehr über die beiden Filter lesen, die ich in der Wordpress-Dokumentation verwendet habe. - manage_users_columns befindet sich im Codex und manage_users_custom_column befindet sich in der neueren Codereferenz. Ähnliche Filter gibt es für alle anderen Tabellen, z. B. Beiträge und Seiten.

1
Tim Malone