Настраиваем комментарии в WordPress

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

 

Шаг 1. Разбираемся в функцией comment_form и ее аргументами

Рассмотрим функцию WordPress comment_form. Она отвечает за вывод формы комментариев, которая выводится на странице или записи. Вызов данной функции в основном можно встретить в файле comments.php в папке темы. Данный файл включается в различных местах, например, в файлах  single.php и page.php, непосредственно или через вызов функции comments_template.

Описание функции можно найти в кодексе WordPress.

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

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

  • fields –с его помощью можно управлять выводом полей в форме комментария.
  • comment_notes_before и comment_notes_after – используются для вывода информации перед и после формы.
  • title_reply – используется для изменения названия ответа, которое по умолчанию имеет значение ‘Leave a Reply’.
  • label_submit – используется для изменения текста на кнопке отправки комментария.

 

Шаг 2. Настраиваем форму комментария с помощью функции comment_form

Теперь настроим нашу форму комментария с помощью передачи аргументов в функцию comment_form.

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

$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>',
    'url'    => '<p class="comment-form-url"><label for="url">' . __( 'Website' ) . '</label>' .
        '<input id="url" name="url" type="text" value="' . esc_attr( $commenter['comment_author_url'] ) . '" size="30" /></p>',
);

Если нам нужно удалить поле, например, website, нужно просто исключить его из массива и передать массив в функцию comment_form.

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

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

В дополнение также сменим название формы на ‘Please give us your valuable comment’, а надпись на кнопке на ‘Send My Comment’.

Для выполнения задачи передаем в функцию comment_form следующие аргументы:

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

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

 

Шаг 3. Удаляем поля из формы с помощью крюка

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

Удалим поле адреса URL с помощью фильтра. Приведенный код можно использовать в плагине или в файле functions.php активной темы.

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.

 

Шаг 4. Добавляем данные в форму комментария с помощью крюка

Мы можем добавить поля в форму с помощью фильтра ‘comment_form_default_fields‘. Добавим поле возраста автора с помощью фильтра и сохраним данное поле дополнительные данные и будем их выводить в комментарии.

Добавляем поле следующим образом:

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

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

#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‘:

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

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

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

 

Шаг 5. Настройка комментариев для определенных типов записей

Иногда требуется использовать поля в комментариях только для определенных типов записей. Изменим код для вывода поля возраста только для записи типа book:

function add_comment_fields($fields) {
 
    if( is_singular( 'books' ) ) {
 
        $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');

 

Шаг 6. Создаем возвратную функцию для вывода комментариев

Функция wp_list_comments используется для вывода комментариев в записях. В кодексе WordPress функция описана подробно.

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

В теме Twenty Eleven в файле comments.php можно найти строку:

wp_list_comments( array( 'callback' => 'twentyeleven_comment' ) );

Изменим ее на:

wp_list_comments( array( 'callback' => 'my_comments_callback' ) );

Функция my_comments_callback будет вызываться для каждой записи.

 

Шаг 7.  Стилизация комментариев

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

Код функции ‘my_comments_callback‘:

function my_comments_callback( $comment, $args, $depth ) {
    $GLOBALS['comment'] = $comment;
 
    ?>
    <li <?php comment_class(); ?> id="li-comment-<?php comment_ID(); ?>">
        <article id="comment-<?php comment_ID(); ?>" class="comment">
 
            <div class="comment-content"><?php comment_text(); ?></div>
 
            <p><?php echo "Comment authors age: ".get_comment_meta( $comment->comment_ID, 'age', true ); ?></p>
 
            <div class="reply">
                <?php comment_reply_link( array_merge( $args, array( 'reply_text' => __( 'Reply <span>&darr;</span>', 'twentyeleven' ), 'depth' => $depth, 'max_depth' => $args['max_depth'] ) ) ); ?>
            </div>
        </article>
    </li>
    <?php
}

Изменяем цвет фона следующим образом:

.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 обеспечивает гибкую систему настройки и изменения функционала комментариев на вашем сайте.

Источник: http://feedproxy.google.com/~r/ruseller/CdHX/~3/kH-egBoFkVM/lessons.php

Читать комменты и комментировать

Добавить комментарий / отзыв



Защитный код
Обновить

Настраиваем комментарии в WordPress | | 2012-08-16 21:03:48 | | Статьи Web-мастеру | | В WordPress есть несколько видов содержания, такие как записи, страницы, комментарии. WordPress является очень гибкой платформой, которая позволяет настраивать основные виды содержания так, как нужно | РэдЛайн, создание сайта, заказать сайт, разработка сайтов, реклама в Интернете, продвижение, маркетинговые исследования, дизайн студия, веб дизайн, раскрутка сайта, создать сайт компании, сделать сайт, создание сайтов, изготовление сайта, обслуживание сайтов, изготовление сайтов, заказать интернет сайт, создать сайт, изготовить сайт, разработка сайта, web студия, создание веб сайта, поддержка сайта, сайт на заказ, сопровождение сайта, дизайн сайта, сайт под ключ, заказ сайта, реклама сайта, хостинг, регистрация доменов, хабаровск, краснодар, москва, комсомольск |
 
Поделиться с друзьями: