Zmień nazwę wyświetlaną autora komentarza

Próbuję zmienić nazwisko autora komentarza (a dokładniej autora recenzji w WooCommerce) na Imię Nazwisko inicjał ( np. „John D.” dla „John Doe”).

Większość tej drogi uzyskałem z następującym kodem w functions.php, ale z jakiegoś powodu (być może z powodu tego, jak komentarz / recenzja została przesłana) ma tendencję do wymazywania nazwy i zastępowania jej kropką („.”) w niektórych (nie wszystkich) recenzjach.

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

Jeśli jednak zmodyfikuję kod w ten sposób jako rezerwę, zawsze wyświetla on pełną nazwę:

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

Wolę pozostawić rzeczywiste nazwy w bazie danych nienaruszone i po prostu przefiltruj wyjście po publicznej stronie witryny pod kątem komentarzy (możemy potrzebować ich pełnego imienia i nazwiska, aby wyświetlić je w innym miejscu, ale tak naprawdę nie możemy tego przetestować, dopóki autorzy komentarzy nie wyświetlą się poprawnie).

Odpowiedź

Brakuje „NIE” operator logiczny (!) w instrukcji if. Chcesz powiedzieć „jeśli autor komentarza NIE JEST pusty”. W tej chwili funkcja odczytuje, że autor nie jest pusty i domyślnie stosuje instrukcję else, która nakazuje jej wyświetlenie pełnego imienia i nazwiska autora. Użyj drugiego bloku kodu, ale wprowadź następującą zmianę.

Zmień następujące:

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

na:

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

W przeciwnym razie wygląda na to, że ja.

Komentarze

  • OK, działa świetnie, z wyjątkiem tego, że niektóre nazwy nadal pojawiają się jako " Anonimowe ", mimo że wszystkie recenzje zostały napisane przez zarejestrowanych użytkowników. Poprawiłem powyższy kod, aby na razie wyświetlał pełne imię i nazwisko … jakieś sugestie?
  • nie testowaliśmy tego, ale patrząc na kodeks wygląda na to, że get_comment () – > user_id ma domyślnie wartość 0 jeśli została przesłana przez osobę niebędącą użytkownikiem. Może spróbuj zmienić if(!empty($comment->user_id)) na if($comment->user_id > 0)
  • Ponadto upewnij się, że użytkownicy są zalogowani, gdy s uzupełniając komentarze. Jeśli tak nie jest, rozumiem, że zostanie zarejestrowany identyfikator_użytkownika równy 0 (nawet jeśli używają tych samych poświadczeń). Jeśli ' nie chcesz wymagać od nich logowania się w pierwszej kolejności, być może będziesz musiał napisać prostą funkcję do sprawdź, czy comment_author_email jest zarejestrowany dla bieżącego użytkownika. Jeśli tak, pobierasz w ten sposób resztę danych użytkownika.
  • (^^^ nie jest to oczywiście zalecane, ponieważ ludzie mogą przesyłać komentarze pod przykrywką innych użytkowników).

Odpowiedź

Miałem ten sam problem …

Oto mój fragment kodu:

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

Sprawdza, czy istnieje imię i nazwisko, i wyświetla je. Jeśli nie ma zwykłego autora, zwracany jest.

Odpowiedź

Hmm, po kilku minutach debugowania i przeczytania tego tematu , Doszedłem do wniosku, że łatwiej jest przejść przez funkcję get_user_by ()

Więc przeszedłem przez get_user_by("email",$comment->comment_author_email) i udało mi się uzyskać dane użytkownika, nawet jeśli komentarz / recenzja jest wysyłana bez zalogowania użytkownika.

To jest mój pełny kod

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *