Vaihda kommentin kirjoittajan näyttönimi

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

  • OK, toimii hyvin, paitsi että jotkut nimet esiintyvät edelleen nimellä " Anonyymi ", vaikka kaikki arvostelut tekivät rekisteröidyt käyttäjät. Muutin yllä olevaa koodia näyttämään koko nimi toistaiseksi … Onko ehdotuksia?
  • I ei ole testannut tätä, mutta tarkastelemalla -koodeksia näyttää siltä, että get_comment () – > user_id on oletusarvoisesti 0 jos lähettäjä on muu kuin käyttäjä. Ehkä yritä muuttaa if(!empty($comment->user_id)) muotoon if($comment->user_id > 0)
  • Varmista myös, että käyttäjät ovat kirjautuneet sisään kun s ubmitting kommentit. Jos niitä ei ole, ymmärrän, että käyttäjän_tunnus 0 kirjataan (vaikka he käyttäisivät samoja tunnistetietoja). Jos et ' et halua edellyttää, että he kirjautuvat sisään ensin, joudut ehkä kirjoittamaan yksinkertaisen funktion tarkista, onko comment_author_email rekisteröity nykyiselle käyttäjälle. Jos näin on, nappaat loput käyttäjätiedoista tällä tavalla.
  • (^^^ tätä ei tietenkään suositella, koska ihmiset voivat lähettää kommentteja muiden käyttäjien varjolla).

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

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *