Статьи

Настройка комментариев в WordPress — функциональность и внешний вид

В WordPress есть разные типы контента, такие как пост, страница, комментарии и т. Д. Они составляют самые основы WordPress. WordPress — это платформа с широкими возможностями настройки, которая позволяет настраивать базовые типы в соответствии с вашим сайтом. Можно изменить внешний вид, а также функциональность основных типов, чтобы заставить их вести себя и выглядеть в соответствии с внешним видом и функциональностью вашего сайта. В этой статье мы увидим, как мы можем изменить поведение и внешний вид комментариев на нашем сайте WordPress.


Давайте посмотрим на функцию WordPress comment_form . Это отвечает за отображение формы комментариев, которая в основном отображается на одной странице или в сообщении в WordPress. Вызов этой функции в основном будет виден в файле comments.php папки вашей темы. Затем этот файл будет включен в различные места, такие как single.php , page.php и т. Д. Напрямую или путем вызова функции comments_template .

Вы можете найти более подробную информацию о comments_template в Кодексе WordPress .

Если мы используем функцию comment_form для отображения формы, форма будет отображаться с использованием параметров по умолчанию, которые будут такими полями, как имя, адрес электронной почты (оба являются обязательными), веб-сайт и содержимое комментария. На теме Twenty Eleven по умолчанию форма будет выглядеть следующим образом.

Некоторые важные аргументы функции comment_form :

  • fields — с помощью которого вы можете фактически контролировать, какие поля отображаются в форме комментария.
  • comment_notes_before и comment_notes_after — они используются для отображения некоторых заметок до или после формы комментария.
  • title_reply — с его помощью вы можете изменить заголовок ответа, который по умолчанию равен «Оставить комментарий».
  • label_submit — это можно использовать для изменения текста над кнопкой отправки комментария.

Теперь давайте настроим нашу форму комментариев, передав различные аргументы в comment_form .

В случае, если мы хотим настроить поля формы комментария, мы можем передать поля в функцию comment_form . Поля по умолчанию в функции comment_form следующие:

1
2
3
4
5
6
7
8
$fields = array(
    ‘author’ => ‘<p class=»comment-form-author»>’ .
        ‘<input id=»author» name=»author» type=»text» value=»‘ . esc_attr( $commenter[‘comment_author’] ) . ‘» size=»30″‘ .
    ’email’ => ‘<p class=»comment-form-email»><label for=»email»>’ .
        ‘<input id=»email» name=»email» type=»text» value=»‘ . esc_attr( $commenter[‘comment_author_email’] ) . ‘» size=»30″‘ .
    ‘url’ => ‘<p class=»comment-form-url»><label for=»url»>’ .
        ‘<input id=»url» name=»url» type=»text» value=»‘ . esc_attr( $commenter[‘comment_author_url’] ) . ‘» size=»30″ /></p>’,
);

Таким образом, в случае, если мы хотим удалить поле веб-сайта, нам нужно создать поля без поля веб-сайта следующим образом и передать его в comment_form .

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
$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»>’ .
        ‘<input id=»author» name=»author» type=»text» value=»‘ . esc_attr( $commenter[‘comment_author’] ) . ‘» size=»30″‘ .
    ’email’ => ‘<p class=»comment-form-email»><label for=»email»>’ .
        ‘<input id=»email» name=»email» type=»text» value=»‘ . esc_attr( $commenter[‘comment_author_email’] ) . ‘» size=»30″‘ .
);
 
$comments_args = array(
    ‘fields’ => $fields
);
 
comment_form($comments_args);

Теперь, если мы пойдем и увидим форму комментариев, она будет выглядеть следующим образом:

В дополнение к этому давайте теперь изменим заголовок ответа на «Пожалуйста, дайте нам ваш ценный комментарий», а также измените заголовок кнопки поста комментария на «Отправить мой комментарий».

Ниже приведены аргументы, которые мы передадим в comment_form для достижения этой цели:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
$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»>’ .
        ‘<input id=»author» name=»author» type=»text» value=»‘ . esc_attr( $commenter[‘comment_author’] ) . ‘» size=»30″‘ .
    ’email’ => ‘<p class=»comment-form-email»><label for=»email»>’ .
        ‘<input id=»email» name=»email» type=»text» value=»‘ . esc_attr( $commenter[‘comment_author_email’] ) . ‘» size=»30″‘ .
);
 
$comments_args = array(
    ‘fields’ => $fields,
    ‘title_reply’=>’Please give us your valuable comment’,
    ‘label_submit’ => ‘Send My Comment’
);
 
comment_form($comments_args);

Теперь, если мы увидим форму комментария, она будет выглядеть следующим образом:


Форма комментариев WordPress может быть настроена также с использованием хуков и фильтров. Настройка с использованием хуков / фильтров очень полезна, особенно если вы настраиваете с помощью плагина и не можете изменять файлы тем. Фильтр для добавления или удаления полей из формы комментариев — ‘ comment_form_default_fields

Теперь давайте удалим поле URL, используя этот фильтр. Код для этого вы можете поместить в файл плагина, если вы настраиваете его через плагин, или в файл functions.php вашей темы.

Код выглядит следующим образом:

1
2
3
4
5
function remove_comment_fields($fields) {
    unset($fields[‘url’]);
    return $fields;
}
add_filter(‘comment_form_default_fields’,’remove_comment_fields’);

В этом мы добавляем функцию remove_comment_fields в фильтр ‘ comment_form_default_fields ‘ и затем сбрасываем поле url чтобы удалить поле сайта.


Мы даже можем добавить поля к комментарию для использования фильтра ‘ comment_form_default_fields ‘. Теперь давайте добавим поле возраста автора комментария с помощью этого фильтра, а затем сохраним это поле как мета-комментарий и отобразим его в комментарии.

Мы можем добавить поле следующим образом:

1
2
3
4
5
6
7
8
function add_comment_fields($fields) {
 
    $fields[‘age’] = ‘<p class=»comment-form-age»><label for=»age»>’ .
        ‘<input id=»age» name=»age» type=»text» size=»30″ /></p>’;
    return $fields;
 
}
add_filter(‘comment_form_default_fields’,’add_comment_fields’);

Как только мы добавим поле в зависимости от темы, мы можем захотеть его стилизовать. Поскольку я использую тему Twenty Eleven, я #respond .comment-form-age label ее стиль, добавляя #respond .comment-form-age label с другим стилем меток, например #respond .comment-form-url label и т. Д., #respond .comment-form-url label образом:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
#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;
}

Теперь, если мы увидим форму комментария, поле возраста будет выглядеть следующим образом:

Теперь, когда возраст хранится в виде мета-комментария, нам нужно подключиться к « comment_post » и сохранить возраст как мета-комментарий следующим образом:

1
2
3
4
5
6
7
8
9
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);

Как только мета сохранена, она может быть отображена в комментарии следующим образом:

1
<?php echo «Comment authors age: «.get_comment_meta( $comment->comment_ID, ‘age’, true );

Иногда может быть полезно иметь некоторые поля комментариев только для определенных типов записей. Теперь давайте внесем изменения в код, чтобы отобразить поле комментариев к возрасту, только если это пользовательский тип записи, например, книга.

Код, определяющий возраст только для книг, настраиваемый тип записи:

01
02
03
04
05
06
07
08
09
10
11
function add_comment_fields($fields) {
 
    if( is_singular( ‘books’ ) ) {
 
        $fields[‘age’] = ‘<p class=»comment-form-age»><label for=»age»>’ .
            ‘<input id=»age» name=»age» type=»text» size=»30″ /></p>’;
    }
    return $fields;
 
}
add_filter(‘comment_form_default_fields’,’add_comment_fields’);

Таким образом, здесь вы добавляете поле, только если оно имеет тип «Книги».


Функция wp_list_comments используется для отображения комментариев к сообщению. Вы можете прочитать о wp_list_comments в Кодексе WordPress .

wp_list_comments есть аргумент ‘ callback ‘, в котором вы можете указать функцию, которую нужно вызвать для отображения комментария.

В теме Twenty Eleven в comments.php вы увидите строку:

1
wp_list_comments( array( ‘callback’ => ‘twentyeleven_comment’ ) );

Это мы изменим на:

1
wp_list_comments( array( ‘callback’ => ‘my_comments_callback’ ) );

Таким образом, функция my_comments_callback будет вызываться для каждого сообщения.


Теперь мы будем оформлять наш пост немного по-другому. Мы просто хотим отобразить содержание поста и поле возраста, которое мы специально добавили. Мы также меняем цвет фона комментариев.

Код для функции « my_comments_callback » выглядит следующим образом:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
function my_comments_callback( $comment, $args, $depth ) {
    $GLOBALS[‘comment’] = $comment;
 
    ?>
    <li <?php comment_class();
        <article id=»comment-<?php comment_ID(); ?>» class=»comment»>
 
            <div class=»comment-content»><?php comment_text();
 
            <p><?php echo «Comment authors age: «.get_comment_meta( $comment->comment_ID, ‘age’, true );
 
            <div class=»reply»>
                <?php comment_reply_link( array_merge( $args, array( ‘reply_text’ => __( ‘Reply <span>&darr;
            </div>
        </article>
    </li>
    <?php
}

Мы также изменим цвет фона следующим образом:

01
02
03
04
05
06
07
08
09
10
.commentlist > li.comment {
 
    background: #99ccff;
    border: 3px solid #ddd;
    -moz-border-radius: 3px;
    border-radius: 3px;
    margin: 0 0 1.625em;
    padding: 1.625em;
    position: relative;
}

Теперь, если мы увидим комментарии, они будут выглядеть следующим образом:


Комментарии играют важную роль при создании сайта сообщества. В зависимости от сайта функциональность комментариев также может быть настроена соответствующим образом. WordPress предоставляет гибкую систему комментирования и предоставляет хорошую поддержку с помощью функций для изменения поведения и внешнего вида комментариев вашего сайта. Так что получайте удовольствие, настраивая свой сайт WordPress!

Дайте нам знать в комментариях ниже, если у вас есть другие предложения о том, как настроить комментарии на вашем сайте WordPress.