Yritän muuttaa kommentin kirjoittajan nimen (tai tarkemmin WooCommercen arvostelun tekijän) etunimeksi Last Initial ( esim. ”John D.” sanalle ”John Doe”).
Sain suurimman osan matkasta sinne seuraavalla koodilla funktioissa.php, mutta jostain syystä (ehkä sen vuoksi, miten kommentti / arvostelu lähetettiin) sillä on taipumus tyhjentää nimi ja korvata se pisteillä (”.”) joissakin arvosteluissa (ei kaikissa).
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; }
Jos nipistän koodia näin, se on kuitenkin aina koko nimi:
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; }
Haluaisin jättää todelliset nimet tietokantaan ehjä, ja suodata vain kommentit sivuston julkisella puolella olevalle sivulle kommentteja varten (saatamme tarvita heidän koko nimeään näytettäväksi muualla, mutta emme voi todellakaan testata sitä ennen kuin kommentin kirjoittajat näyttävät oikein).
vastaus
Sinulta puuttuu ”EI” looginen operaattori (!) if-lauseessasi. Haluat sanoa ”jos kommentin kirjoittaja EI OLE tyhjä”. Toistaiseksi funktio lukee, että kirjoittaja ei ole tyhjä ja oletusarvoinen on toinen lauseesi, joka käskee antamaan kirjoittajan koko nimen. Käytä toista koodilohkoa, mutta tee seuraava muutos.
Muuta seuraavat:
if ( empty($comment->comment_author) ) {
muotoon:
if ( !empty($comment->comment_author) ) {
Muuten näyttää hyvältä minä.
Kommentit
Vastaa
Oli sama ongelma …
Tässä on koodikoodini:
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; }
Se tarkistaa, onko etu- ja sukunimi, ja antaa nämä. Jos ei ole tavallista kirjoittajaa, palautetaan.
Vastaa
Hmm, muutaman minuutin virheenkorjauksen ja tämän aiheen lukemisen jälkeen. , Olen tullut johtopäätökseen, joka on helpompi käydä läpi get_user_by () -toiminto
Joten olen käynyt läpi get_user_by("email",$comment->comment_author_email)
ja onnistuin saamaan käyttäjän tiedot, vaikka kommentti / arvostelu lähetettäisiin ilman käyttäjän kirjautumista sisään.
Tämä on koko koodini
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))
muotoonif($comment->user_id > 0)
comment_author_email
rekisteröity nykyiselle käyttäjälle. Jos näin on, nappaat loput käyttäjätiedoista tällä tavalla.