Jak upravit základní vzhled komentářů ve WordPress

Jedním ze základním post formátů ve WordPressu jsou komentáře. Pro každého blogera jsou nezastupitelným nástrojem pro komunikaci s komunitou čtenářů. Protože je však základní formulář velmi jednoduchý a zároveň nemusí jeho nastavení vyhovovat každému, ukážeme si, jak jej jednoduše upravit k obrazu svému.

Samotný formulář pro komentáře zobrazíme v šabloně použitím funkce

comment_form($args,$post_id);

Většinou v šablonách vidíme jednoduchý zápis comment_form(), ale právě využití parametrů funkce umožňuje snadnou úpravu základního formuláře. Volání funkce bez parametrů zobrazí formulář takto:

Parametry, které funkce obsahuje jsou tyto:

  • fields
  • comment_field
  • must_log_in
  • logged_in_as
  • comment_notes_before
  • comment_notes_after
  • id_form
  • id_submit
  • title_reply
  • title_reply_to
  • cancel_reply_link
  • label_submit

Většinu z nich asi nebudete mít potřebu měnit, ale někdy se to může hodit.

Úprava formuláře pomocí parametrů funkce

Fields

Zobrazuje jednotlivá pole formuláře, v základním nastavení to je Name, Email, Website, přičemž první dvě pole jsou povinná. Pomocí tohoto pole můžete přidávat, či odebírat jednotlivá pole. Pokud například chcete odebrat z formuláře položku Website, použijete následující kód:

$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>',
);
 
$args = array(
    'fields' =>  $fields
);
 
comment_form($args);

Proměnnou $req použijete, pokud budete chtít přidat nové pole, které bude povinné. Následující kód přidá do formuláře povinné pole s věkem:

$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>',
    'age' => '<p class="comment-form-age"><label for="age">' . __( 'Age' ) . 
    '</label>' . ( $req ? '<span class="required">*</span>' : '' ) .
    '<input id="age" name="age" type="text" size="30" /></p>'
);
 
$args = array(
    'fields' =>  apply_filters( 'comment_form_default_fields', $fields )
);
 
comment_form($args);

Comment_field

Zobrazení textarea tagu ve formuláři. Jeho defaultní hodnota je:

<p class="comment-form-comment"><label for="comment">' . __( 'Comment' ) . '</label>
<textarea id="comment" name="comment" cols="45" rows="8" aria-required="true"></textarea></p>

Toto pole asi nebudete mít potřebu měnit, ale pro případnou změnu můžete použít následují kód:

$args = array(
    'comment_field' =>  'html kód pro vaši textareu'
);
 
comment_form($args);

Must_log_in

Zobrazení informace o nutností přihlášení, pro přidání komentáře. Základní hodnota je:

<p class="must-log-in">' .  
sprintf( __( 'You must be <a href="%s">logged in</a> to post a comment.' ), 
wp_login_url( apply_filters( 'the_permalink', get_permalink( ) ) ) ) . '</p>

Logged_in_as

Zobrazuje jméno přihlášeného uživatele a nahrazuje pole Name a Email. Základní hodnota je:

<p class="logged-in-as">' . sprintf( __( 'Logged in as <a href="%1$s">%2$s</a>. 
<a href="%3$s" title="Log out of this account">Log out?</a>' ), 
admin_url( 'profile.php' ), $user_identity, 
wp_logout_url( apply_filters( 'the_permalink', get_permalink( ) ) ) ) . '</p>

Comment_notes_before

Zobrazuje text před komentářovým formulářem. Základní hodnota je:

<p class="comment-notes">' . __( 'Your email address will not be published.' ) . 
( $req ? $required_text : '' ) . '</p>

Pokud chcete text odstranit, stačí použít následující kód:

$args = array(
    'comment_notes_before' =>  ''
);
 
comment_form($args);

Comment_notes_after

Zobrazuje text za textareou a před submit tlačítkem. Základní hodnota je:

<p class="form-allowed-tags">' . 
sprintf( __( 'You may use these <abbr title="HyperText Markup Language">HTML</abbr> 
tags and attributes: %s' ), ' <code>' . allowed_tags() . '</code>' ) . '</p>

Pokud chcete tento text odstranit, použijte podobný postup jako v předchozím příkladu:

$args = array(
    'comment_notes_after' =>  ''
);
 
comment_form($args);

Další parametry funkce

Protože následující parametry většinou obsahují texty jednotlivých prvků, shrnu je do jednoho odstavce.

Id_form – hodnota id pro tag form, základní hodnota je „commentform“.
Id_submit – hodnota id pro submit tlačitko, základní hodnota je „submit“.
Title_reply – titulek nad formulářem, základní hodnota je „Leave Reply“.
Title_reply_to – titulek nad formulářem při odpovědi, základní hodnota je „Leave Reply to %“.
Cancel_reply_link – text odkazu pro vymazání odpovědi, základní hodnota je „Cancel reply“.
Label_submit – text tlačítka pro odeslání komentáře, základní hodnota je „Post Comment“.

Použití:

$args = array(
    'id_form' =>  'id formuláře',
    'id_submit' => 'id tlačitka',
    'title_reply' => 'Přidej komentář',
    'title_reply_top' => 'Přidej komentář k',
    'cancel_reply_link' => 'Vymaž odpověď',
    'label_submit' => 'Odeslat komentář'
);
 
comment_form($args);

Přidání a odebrání polí pomocí filtru

V předchozích příkladech jsme upravovali formulář pomocí funkce comment_form a jejích parametrů. Nyní si ukážeme, jak využít filtr comment_form_default_fields. Jak pomocí tohoto filtru odebrat pole z formuláře jsem ukazoval v tomto článku. Proto zde uvedu pouze postup jak přidat do formuláře další pole.

Do souboru functions.php vložte následující kód:

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

Tím do formuláře přidáte nepovinné pole Věk. Stejný výsledek jsme dostali pomocí použití fields ve funkci comment_form(). Máme tedy ve formuláři nové pole, ale ještě jej musíme uložit do databáze. Použijeme comment meta a hooku „comment_post“. Do functions.php vložíme následující kód:

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

Tím jsme uložili věk do databáze jako comment meta a pokud jej budeme chtít zobrazit v šabloně, použijeme:

get_comment_meta( $comment->comment_ID, 'age', true );

A jsme u konce. Díky tomuto článku si můžete upravit formulář dle vašich požadavků. Pro dokonalou kontrolu nad zobrazováním komentářů a formuláře je nutné použít soubor comments.php, který, pokud je ve složce aktuální šablony, je automaticky načten a zobrazování se řídí pomocí něj. Ale to bude součást některého z dalších článků.

About The Author

Zajímá mne Wordpress, responsivní šablony a zkrátka vše kolem tohoto skvělého redakčního systému.

Související články

12 Comments

  1. Míra

    Moc se v tom nevyznám, potřebuji odstranit ten text před tlačítkem odeslat, kam to mám nahrát ? Díky předem za radu.

    $args = array(
    ‚comment_notes_after‘ => “
    );

    comment_form($args);

    Odpověď
  2. Musilda

    Pokud máte formulář volaný pomocí comment_form(), tak do toho místa v šabloně, kde je ta funkce. Pokud máte comment.php soubor, tak to musíte upravit tam.

    Odpověď
  3. dan

    Ahoj kde presne v comment.php to dat? At to zkousim jak to zkousim, tak to nefunguje. Na konci mam comment_form (). Diky moc

    Odpověď
  4. Musilda

    To by bylo potřeba ten soubor vidět, dost často jsou v něm podmínky a záleží na tom, kam se ty argumenty přidají. Také té funkci se musí předat comment_form($arg, $post_id)

    Odpověď
  5. Pingback: 24 základních nastavení po instalaci WP - část 1. - Vikate, aneb Writeland město zázraků

  6. Pingback: 20 základních nastavení po instalaci WP - Vikate, aneb Writeland město zázraků

  7. Pingback: 20 základních nastavení po instalaci WP - Writeland ostrov pisálků

  8. Pingback: 20 základních nastavení po instalaci WP - Ženy v online světě

Přidejte komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *