Ik probeer de naam van de auteur van de reactie (of meer specifiek de auteur van de recensie in WooCommerce) te veranderen in Voornaam Achternaam Initial ( bijv. “John D.” voor “John Doe”).
Ik kreeg de meeste weg daar met de volgende code in functions.php, maar om de een of andere reden (misschien vanwege hoe de opmerking / recensie is ingediend), heeft het de neiging om de naam uit te wissen en te vervangen door een punt (“.”) in sommige (niet alle) beoordelingen.
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; }
Als ik de code echter op deze manier aanpas als een fallback, wordt altijd de volledige naam weergegeven:
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; }
Ik laat de werkelijke namen liever in de database staan intact, en filter gewoon de uitvoer aan de openbare kant van de site voor opmerkingen (we hebben misschien hun volledige naam nodig om ergens anders te laten zien, maar we kunnen het pas echt testen als de auteurs van de opmerking correct weergeven).
Answer
Je mist een “NOT” logische operator (!) in uw if-statement. Je wilt zeggen “als de auteur van de reactie NIET leeg is”. Vanaf nu leest de functie dat de auteur niet leeg is en standaard je else-instructie gebruikt die hem vertelt om de volledige naam van de auteur uit te voeren. Gebruik het tweede codeblok maar breng de volgende wijziging aan.
Wijzig het volgende:
if ( empty($comment->comment_author) ) {
in:
if ( !empty($comment->comment_author) ) {
Anders ziet het er goed uit om me.
Reacties
Antwoord
Had hetzelfde probleem …
Hier is mijn stukje code daarvoor:
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; }
Het controleert of er een voornaam en achternaam is en geeft deze weer. Als er geen gewone auteur is, wordt geretourneerd.
Antwoord
Hmm, na een paar minuten debuggen en doorlezen van dit onderwerp , Ben ik tot de conclusie gekomen dat het gemakkelijker is om de get_user_by () functie
Dus ik heb get_user_by("email",$comment->comment_author_email)
en slaagde erin om de gebruikersgegevens te verkrijgen, zelfs als de opmerking / recensie werd verzonden zonder dat de gebruiker was ingelogd.
Dit is mijn volledige 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; }
if(!empty($comment->user_id))
te veranderen inif($comment->user_id > 0)
comment_author_email
is geregistreerd bij een huidige gebruiker. Als dat zo is, pak je de rest van de gebruikersgegevens op die manier.