Změnit zobrazované jméno autora komentáře

Pokouším se změnit jméno autora komentáře (nebo konkrétněji autora recenze ve WooCommerce) tak, aby bylo Jméno Příjmení Příjmení ( např. „John D.“ pro „John Doe“).

Většinou jsem se tam dostal s následujícím kódem v functions.php, ale z nějakého důvodu (možná kvůli tomu, jak komentář / recenze byl odeslán), má tendenci vynechat název a nahradit jej tečkou („.“) v některých (ne všech) recenzích.

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

Pokud tento kód vyladím jako záložní, vždy však zobrazí celé jméno:

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

Raději bych nechal v databázi skutečné názvy neporušený, a pouze filtrovat výstup na veřejnou stranu webu pro komentáře (možná budeme potřebovat jejich celé jméno pro zobrazení jinde, ale nemůžeme to opravdu otestovat, dokud se autoři komentářů nezobrazí správně).

Odpověď

Chybí vám „NOT“ logický operátor (!) ve vašem příkazu if. Chcete říct „pokud autor komentáře NENÍ prázdný“. Od této chvíle funkce čte, že autor není prázdný, a nastavuje výchozí příkaz else, který mu říká, aby vydal celé jméno autora. Použijte druhý blok kódu, ale proveďte následující změnu.

Změňte následující:

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

na:

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

Jinak to vypadá dobře já.

Komentáře

  • Dobře, funguje skvěle, až na to, že některá jména se stále vyskytují jako " Anonymní " i když všechny recenze provedli registrovaní uživatelé. Upravil jsem výše uvedený kód, abych prozatím zobrazil celé jméno jako záložní … nějaké návrhy?
  • I havent to otestoval, ale při pohledu na codex se zdá, že get_comment () – > user_id má výchozí hodnotu 0 pokud je odeslal jiný uživatel. Zkuste zkusit změnit if(!empty($comment->user_id)) na if($comment->user_id > 0)
  • Musíte se také ujistit, že uživatelé jsou přihlášeni, zatímco s ubmitting komentáře. Pokud tomu tak není, rozumím tomu, že user_id 0 bude protokolován (i když používají stejná pověření). Pokud ' nechcete vyžadovat, aby se nejprve přihlásili, možná budete muset napsat jednoduchou funkci , abyste zkontrolujte, zda je comment_author_email registrován aktuálnímu uživateli. Pokud ano, popadnete tak ostatní uživatelská data.
  • (^ ^ ^ to se samozřejmě nedoporučuje, protože lidé mohou pod záminkou jiných uživatelů odesílat komentáře).

Odpověď

Měl stejný problém …

Tady je můj kousek kódu:

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

Zkontroluje, zda existuje křestní jméno a příjmení, a vygeneruje je. Pokud nejsou, je vrácen běžný autor.

Odpovědět

Hmm, po několika minutách ladění a přečtení tohoto tématu „Došel jsem k závěru, že je snadnější projít funkcí get_user_by ()

Takže jsem prošel get_user_by("email",$comment->comment_author_email) a podařilo se mu získat podrobnosti o uživateli, i když je komentář / recenze odeslána bez přihlášení uživatele.

Toto je můj úplný kód

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

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *