Cum modificam sectiunea comentarii in WordPress

Platforma WordPress detine diferite tipuri de continut precum post, pagina si comentarii. WordPress fiind o platforma extrem de personalizata, va permite sa modificati in foarte multe tipuri structura acestuia  in asa fel incat sa se potriveasca cu site-ul. Puteti schimba atat aspectul cat si functionalitatea tipurilor de baza ale platformei. In acest articol veti vedea cum puteti schimba functionalitatea si aspectul comentariilor pe site-ul WordPress.

Pasul 1. Intelegerea functiei comment_form si argumentele sale

Aceasta functie face vizibil forumularul in care puteti scrie comentarii, afisat pe pagina sau post in WordPress. De obicei, veti gasi aceasta functie in fisierul comments.php din folderul temei. Apoi acest fisier poate fi inclus in diferite locuri precum single.ph, page.php etc. in mod direct sau apeland la functia comments_template.

Puteti gasi mai multe detalii despre comments_template in WordPress Codex.

Daca folositi functia comment_form pentru a afisa formularul de  comentarii, aceasta va fi afisata folosind parametrii impliciti care vor fi campurile numelui, email (amandoua sunt obligatorii), website si continutul comentariului. In tema implicita Twenty Eleven, forma va arata ca in imaginile urmatoare.

Unele din argumentele functiei comment_form sunt:
1. domeniile – prin care se poate controla ce compuri vor aparea in forma comentariului
2. comment_note_before si comment_note_after – acestea sunt folosite pentru a afisa anumite notiuni inainte si dupa formularul comentariului.
3. title_reply – folosind acesta puteti schimba titlul raspunsului care este in mod normal “Leave a Replay”
4. label_submit – acesta poate fi folosit pentru a schimba textul butonului de trimitere al comentariului.

Pasul 2. Personalizarea formularului de comentarii folosind functia comment_form

In cazul in care vreti sa modificati campurile formularului de comentarii, trebuie sa treceti de campurile functiei comment_form. Campurile implicite din functia comment_form sunt urmatoarele:

1. $fields = array(
2. 'author' => '<p class="comment-form-author">' . '<label for="author">' . __( 'Name' ) . '</label> ' . ( $req ? '<span class="required">*</span>' : '' ) .
3. '<input id="author" name="author" type="text" value="' $commenter. esc_attr( ['comment_author'] ) . '" size="30"' . $aria_req . ' /></p>',
4. 'email' => '<p class="comment-form-email"><label for="email">' . __( 'Email' ) . '</label> ' . ( $req ? '<span class="required">*</span>' : '' ) .
5. '<input id="email" name="email" type="text" value="' . esc_attr( $commenter['comment_author_email'] ) . '" size="30"' . $aria_req . ' /></p>',
6. 'url' => '<p class="comment-form-url"><label for="url">' . __( 'Website' ) . '</label>' .
7. '<input id="url" name="url" type="text" value="' . esc_attr( $commenter['comment_author_url'] ) . '" size="30" /></p>',
8. );

In cazul in care vrem sa eliminam campul website, trebuie creem campurile fara optiunea website ca in codul urmator si sa il trecem in comment_form. [adsense float=”center”]

$commenter = wp_get_current_commenter();
$req = get_option( 'require_name_email' );
$aria_req = ( $req ? " aria-required='true'" : '' );
$fields = array(
 'author' => '<p class="comment-form-author">' . '<label for="author">' . __( 'Name' ) . '</label> ' . ( $req ? '<span class="required">*</span>' : '' ) .
 '<input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30"' . $aria_req . ' /></p>',
 'email' => '<p class="comment-form-email"><label for="email">' . __( 'Email' ) . '</label> ' . ( $req ? '<span class="required">*</span>' : '' ) .
 '<input id="email" name="email" type="text" value="' . esc_attr( $commenter['comment_author_email'] ) . '" size="30"' . $aria_req . ' /></p>',
);

$comments_args = array(
 'fields' => $fields
);

comment_form($comments_args);

Acum puteti vedea rezultatul:

blank

In plus, puteti modifica titlul “Leave a Reply” in “Please give us your valuable comment” si de asemenea puteti modifica textul butonului de comentariu in “Send My Comment”.

$commenter = wp_get_current_commenter();
$req = get_option( 'require_name_email' );
$aria_req = ( $req ? " aria-required='true'" : '' );
$fields = array(
 'author' => '<p class="comment-form-author">' . '<label for="author">' . __( 'Name' ) . '</label> ' . ( $req ? '<span class="required">*</span>' : '' ) .
 '<input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30"' . $aria_req . ' /></p>',
 'email' => '<p class="comment-form-email"><label for="email">' . __( 'Email' ) . '</label> ' . ( $req ? '<span class="required">*</span>' : '' ) .
 '<input id="email" name="email" type="text" value="' . esc_attr( $commenter['comment_author_email'] ) . '" size="30"' . $aria_req . ' /></p>',
);

$comments_args = array(
 'fields' => $fields,
 'title_reply'=>'Please give us your valuable comment',
 'label_submit' => 'Send My Comment'
);

comment_form($comments_args);

Rezultatul:

blank

Pasul 3. Eliminarea campurilor formularului de comentarii pentru folosirea carligelor

Formularul comentariilor din WordPress poate fi personalizata de asemenea, folosind anumite carlice. Personalizarea folosind carlige/filtre este foarte folositoare in special atunci cand customizati cu ajutorul unui plugin si nu poate modifica fisierele temei. Filtrul pentru a adauga sau elimina campuri din formularul de comentarii este “comment_form_default_fields“.

Acum eliminati campul URL-ului folosind acest filtru. Codul pentru a face acestu lucru poate fi pus in fisierul plugin daca personalizati cu ajutorul unui plugin sau in fisierul functions.php din tema.

function remove_comment_fields($fields) {
 unset($fields['url']);
 return $fields;
}
add_filter('comment_form_default_fields','remove_comment_fields');

In acesta adaugam functia remove_comment_fields in filtrul “comment_form_default_fields” si apoi dezactivati campul URL .

Pasul 4. Adaugare date folosind carlige

Putem adauga mai multe campuri la comentarii folosind filtrul “comment_form_default_fields”. Voi adauga campul pentru varsta autorului comentariului folosind acest filtru si apoi voi salva acest camp ca cu “comment meta” si afisarea acestuia la comentariu.

function add_comment_fields($fields) {

 $fields['age'] = '<p class="comment-form-age"><label for="age">' . __( 'Age' ) . '</label>' .
 '<input id="age" name="age" type="text" size="30" /></p>';
 return $fields;

}
add_filter('comment_form_default_fields','add_comment_fields');

Stilul campului depinde de tema folosita. In acest caz, tema este Twenty Eleven si l-am modificat adaugand #respond .comment-form-age label si am mai adaugat #respond .comment-form-url label etc

#respond .comment-form-author label,
#respond .comment-form-email label,
#respond .comment-form-url label,
#respond .comment-form-age label,
#respond .comment-form-comment label {
 background: #eee;
 -webkit-box-shadow: 1px 2px 2px rgba(204,204,204,0.8);
 -moz-box-shadow: 1px 2px 2px rgba(204,204,204,0.8);
 box-shadow: 1px 2px 2px rgba(204,204,204,0.8);
 color: #555;
 display: inline-block;
 font-size: 13px;
 left: 4px;
 min-width: 60px;
 padding: 4px 10px;
 position: relative;
 top: 40px;
 z-index: 1;
}

 

Rezultatul ar trebuie sa fie urmatorul:

blank

Acum ca varsta este stocata ca meta comentariu, avem nevoie de un carlig in “comment_post” si sa salvam varsata ca meta comentariu:

function add_comment_meta_values($comment_id) {

 if(isset($_POST['age'])) {
 $age = wp_filter_nohtml_kses($_POST['age']);
 add_comment_meta($comment_id, 'age', $age, false);
 }

}
add_action ('comment_post', 'add_comment_meta_values', 1);

Odata ce meta este salvat, poate fi afisat pe comentariu :

<?php echo "Comment authors age: ".get_comment_meta( $comment->comment_ID, 'age', true ); ?>

blank

Concluzie

Comentariile au un rol foarte important pentru a crea o comunitate pe site. Personalizarea formularului de comentarii depinde si de natura site-ului.

 

Last Updated on 8 June 2013 by Alexandru Ionut

9 thoughts on “Cum modificam sectiunea comentarii in WordPress”

  1. Salut Ionut. Am si eu o intrebare;
    Cum trebuie procedat ca sa ai si optiunea de atasament foto in comentarii. De exemplu:
    Am fost pe balta asta si am prins un peste de 2 kg (si sa ai optiunea de a atasa foto/foto`s in comentariu) iar ca administrator sa ai drepturi de stergere foto daca incalca regulamentul?

    A tot cautat pe google si nu am gasit nimic :(

    Multumesc.

    Reply
    • Salut. Depinde pe ce platforma e facut site-ul. O varianta mai simpla e sa incarci imaginea pe un site dedicat, iar apoi sa pui link in comentarii catre foto. Daca permiti incarcarea de foto direct pe site de catre oricine, la un moment dat se va ingreuna tare de tot pagina si se va incarca foarte incet. Nu cred ca-ti doresti asta. Pentru ce vrei tu, mai dedicat ar fi un fel de forum.
      Oricum, intreaba-l pe Marius (https://mariuscucu.ro/) ca se ocupa cu asa ceva si stie mult mai bine decat mine.

  2. Multumesc pt raspunsul rapid. Sunt alte site-uri atat din ro cat si din afara exact cu aceste functii active si nu se misca greu deloc.
    Pe un articol despre o anumita balta , pot sa ataseze pescarii poze sau nu.

    Reply
    • Am inteles. Da, depinde ce plugin-uri au in spate acele site-uri de se misca rapid. In orice caz, intreaba-l pe Marius, ca se pricepe mult mai bine decat mine. Articolul asta l-am scris in 2012 cand eram pasionat de asta, si incepusem blogging-ul, dar anii au trecut, a aparut familia, copilul, si m-am lasat de “meserie”. Mai public cate un articol la cateva luni, dar sunt in urma cu cativa ani in lagatura cu ceea ce ma intrebi. Succes cu site-ul si fir intins :D
      ps: am fost si eu pasionat de pescuit acum multi ani, tata inca e innebunit dupa asa ceva. Cred ca ultima data am fost prin 2007 la balta. Nu-s batran, am 30, dar am mers pe alta drumuri :))

  3. Hahaha haios tare comentariul tau, Esti un tip de treaba . Multam pentru indicatii, i-am trimis un mail lui Marius, acum….astept sa vad dac are omul timp si chef de indicatii. Fir intins si tie… Ionut :)

    Reply

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.