Cum modificam sectiunea comentarii in WordPress

22 July 2012

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:

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:

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:

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 ); ?>

Concluzie

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

 

No Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

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