Anzeigenamen des Kommentarautors ändern

Ich versuche, den Namen des Kommentarautors (oder genauer gesagt den Überprüfungsautor in WooCommerce) in Vorname Nachname (Initiale) zu ändern. zB „John D.“ für „John Doe“).

Ich habe den größten Teil des Weges mit dem folgenden Code in functions.php zurückgelegt, aber aus irgendeinem Grund (möglicherweise aufgrund des Kommentars / der Überprüfung wurde eingereicht) In einigen (nicht allen) Bewertungen wird der Name tendenziell ausgeblendet und durch einen Punkt („.“) ersetzt.

add_filter("get_comment_author", "my_comment_author", 10, 1); function my_comment_author( $author = "" ) { // Get the comment ID from WP_Query $comment = get_comment( $comment_ID ); if ( empty($comment->comment_author) ) { if (!empty($comment->user_id)){ $user=get_userdata($comment->user_id); $author=$user->first_name." ".substr($user->last_name,0,1)."."; // this is the actual line you want to change } else { $author = __("Anonymous"); } } else { $user=get_userdata($comment->user_id); $author=$user->first_name." ".substr($user->last_name,0,1)."."; // this is the actual line you want to change } return $author; } 

Wenn ich den Code wie folgt als Fallback optimiere, wird immer der vollständige Name angezeigt:

add_filter("get_comment_author", "my_comment_author", 10, 1); function my_comment_author( $author = "" ) { // Get the comment ID from WP_Query $comment = get_comment( $comment_ID ); if ( empty($comment->comment_author) ) { if (!empty($comment->user_id)){ $user=get_userdata($comment->user_id); $author=$user->first_name." ".substr($user->last_name,0,1)."."; // this is the actual line you want to change } else { $author = __("Anonymous"); } } else { $author = $comment->comment_author; } return $author; } 

Ich würde es vorziehen, die tatsächlichen Namen in der Datenbank zu belassen intakt und filtern Sie einfach die Ausgabe auf der öffentlich zugänglichen Seite der Site nach Kommentaren (möglicherweise benötigen wir ihren vollständigen Namen, um ihn an anderer Stelle anzuzeigen, können ihn jedoch erst dann wirklich testen, wenn die Kommentarautoren korrekt angezeigt werden).

Antwort

Ihnen fehlt ein „NICHT“ logischer Operator (!) in Ihrer if-Anweisung. Sie möchten sagen „wenn der Autor des Kommentars NICHT leer ist“. Ab sofort liest die Funktion, dass der Autor nicht leer ist, und verwendet standardmäßig Ihre else-Anweisung, die ihn auffordert, den vollständigen Namen des Autors auszugeben. Verwenden Sie den zweiten Codeblock, nehmen Sie jedoch die folgende Änderung vor.

Ändern Sie Folgendes:

if ( empty($comment->comment_author) ) { 

in:

if ( !empty($comment->comment_author) ) { 

Andernfalls sieht es in Ordnung aus Ich.

Kommentare

  • OK, funktioniert hervorragend, außer dass einige Namen immer noch als " erscheinen Anonym ", obwohl alle Überprüfungen von registrierten Benutzern durchgeführt wurden. Ich habe den obigen Code so angepasst, dass der vollständige Name vorerst als Fallback angezeigt wird … Vorschläge?
  • I. Ich habe dies nicht getestet, aber wenn man sich den Codex ansieht, sieht es so aus, als ob get_comment () – > user_id standardmäßig 0 ist Wenn dies von einem Nichtbenutzer übermittelt wurde. Versuchen Sie möglicherweise, if(!empty($comment->user_id)) in if($comment->user_id > 0)
  • zu ändern Benutzer sind angemeldet, während s Senden der Kommentare. Wenn dies nicht der Fall ist, wird meines Erachtens eine Benutzer-ID von 0 protokolliert (auch wenn sie dieselben Anmeldeinformationen verwenden). Wenn Sie ' nicht verlangen möchten, dass sie sich zuerst anmelden, müssen Sie möglicherweise eine einfache Funktion schreiben Überprüfen Sie, ob die comment_author_email für einen aktuellen Benutzer registriert ist. In diesem Fall greifen Sie auf diese Weise auf den Rest der Benutzerdaten zu.
  • (^^^ Dies wird natürlich nicht empfohlen, da Personen unter dem Deckmantel anderer Benutzer Kommentare abgeben können.)

/ ul>

Antwort

Hatte das gleiche Problem …

Hier ist mein Code dafür:

add_filter( "comment_author", "custom_comment_author", 10, 2 ); function custom_comment_author( $author, $commentID ) { $comment = get_comment( $commentID ); $user = get_user_by( "email", $comment->comment_author_email ); if( !$user ): return $author; else: $firstname = get_user_meta( $user->id, "first_name", true ); $lastname = get_user_meta( $user->id, "last_name", true ); if( empty( $firstname ) OR empty( $lastname ) ): return $author; else: return $firstname . " " . $lastname; endif; endif; } 

Überprüft, ob es einen Vor- und Nachnamen gibt, und gibt diese aus. Wenn dies nicht der Fall ist, wird der reguläre Autor zurückgegeben.

Antwort

Hmm, nach einigen Minuten des Debuggens und Lesens dieses Themas Ich bin zu dem Schluss gekommen, dass es einfacher ist, get_user_by () -Funktion

durchzugehen. Also habe ich get_user_by("email",$comment->comment_author_email) und es gelang, die Benutzerdetails abzurufen, auch wenn der Kommentar / die Bewertung gesendet wurde, ohne dass der Benutzer angemeldet war.

Dies ist mein vollständiger Code

add_filter("get_comment_author", "comments_filter_uprise", 10, 1); function comments_filter_uprise( $author = "" ) { $comment = get_comment( $comment_author_email ); if ( !empty($comment->comment_author_email) ) { if (!empty($comment->comment_author_email)){ $user=get_user_by("email", $comment->comment_author_email); $author=$user->first_name." ".substr($user->last_name,0,1)."."; } else { $user = get_user_by( "email", $comment->comment_author_email ); $author = $user->first_name; } } else { $user=get_userdata($comment->user_id); $author=$user->first_name." ".substr($user->last_name,0,1)."."; $author = $comment->comment_author; } return $author; } 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.