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
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
if(!empty($comment->user_id))
naif($comment->user_id > 0)
comment_author_email
jest zarejestrowany dla bieżącego użytkownika. Jeśli tak, pobierasz w ten sposób resztę danych użytkownika.