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
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; }
if(!empty($comment->user_id))
naif($comment->user_id > 0)
comment_author_email
registrován aktuálnímu uživateli. Pokud ano, popadnete tak ostatní uživatelská data.