Wijzig de weergavenaam van de auteur van de reactie

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

  • OK, werkt prima, behalve dat sommige namen nog steeds overkomen als " Anoniem " ook al zijn alle recensies gedaan door geregistreerde gebruikers. Ik heb de bovenstaande code aangepast om de volledige naam weer te geven als reserve voor nu … suggesties?
  • Ik niet getest, maar kijkend naar de codex lijkt het erop dat get_comment () – > user_id standaard 0 is indien ingediend door een niet-gebruiker. Probeer misschien if(!empty($comment->user_id)) te veranderen in if($comment->user_id > 0)
  • Ook moet u ervoor zorgen dat de gebruikers zijn ingelogd terwijl s ubmitting de opmerkingen. Als dat niet het geval is, heb ik begrepen dat een user_id van 0 zal worden geregistreerd (zelfs als ze dezelfde inloggegevens gebruiken). Als je ' niet wilt dat ze eerst inloggen, moet je een eenvoudige functie schrijven om controleer of de comment_author_email is geregistreerd bij een huidige gebruiker. Als dat zo is, pak je de rest van de gebruikersgegevens op die manier.
  • (^^^ dit wordt uiteraard niet aanbevolen, aangezien mensen opmerkingen kunnen plaatsen onder het mom van andere gebruikers).

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

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *