Комментарии в WordPress (часть 2)

В прошлой части статьи "Комментарии в WordPress (часть 1)" мы разобрали пример простейшего вывода комментариев на страниц. Доработаем этот пример, добавив разбиение комментариев на страницы, создав постраничную навигацию и поставив форму для добавления новых комментариев.
<?php
if( have_comments() ){ 
   if( get_comments_number() ){ ?>
      Количество комментариев: <?=get_comments_number()?> <br>
      <ol>
         <?php
            wp_list_comments(
               array(
                  'style' => 'ol', // формировать список элементов для тега <ol>
                  'per_page' => 10, // количество комментариев на странице
                  'avatar_size' => 74, // размер аватара пользователя
               )
            );
         ?>
      </ol>

      <?php
      // навигация по комментариям
         previous_comments_link( '&larr; Предыдущие комментарии' );
         next_comments_link( 'Следующие комментарии &rarr;' );
      ?>

   <?php }else{?> 
      Нет комментариев к этой публикации
   <?php }?> 

   <?php if( comments_open() ){
      comment_form();
   }else{?> 
      Комментарии у этой публикации отключены
   <?php }?> 
<?php }?>
Мы изменили код из предыдущей части статьи и добавили в него ещё несколько функций: "previous_comments_link", "next_comments_link", "comments_open" и "comment_form". Рассмотрим их по порядку появления в коде.

Навигация по комментарием (назад)

Функция "previous_comments_link" распечатывает ссылку для постраничной навигации. Эта ссылка ведёт на предыдущую страницу комментариев. Функция имеет только один аргумент - текст ссылки.
previous_comments_link( 'Текст для ссылки' );

Навигация по комментарием (вперёд)

Функция "next_comments_link" распечатывает ссылку для постраничной навигации. Эта ссылка ведёт на следующую страницу комментариев. Функция имеет только один аргумент - текст ссылки.
next_comments_link( 'Текст для ссылки' );

Проверка возможности комментирования

Функция "comments_open" проверяет возможность комментирования текущей публикации. Функция возвращает логические true или false в зависимости от возможности оставить комментарий под публикацией. У функции есть только один параметр - id публикации (число или объект WP_Post):
comments_open( $post_id );
Если не указать аргумент "$post_id", то id публикации будет взят из WP_Post.

Форма отправки комментария

Функция "comment_form" выводит форму комментирования. У этой функции только два параметра - массив из необходимых полей, опций и свойств формы, а так же id публикации:
comment_form( $args, $post_id );
Второй параметр - это ID публикации (число), к которой будет добавлен комментарий. Если ID не указать, то для публикации будет взят из WP_Post.

Первый параметр - это массив. Если не передать никаких ключей, как мы сделали это в примере из начала статьи, то будут использованы стандартные настройки для вывода формы комментирования. Приведём пример использования функции "comment_form" с указанием ключей:
$comments_args = array(
   'label_submit' => 'Отправить комментарий', // надпись на кнопке
   'title_reply' => 'Write a Reply or Comment', // заголовок блока ответа на существующий комментарий
);
$post_id = 7;
comment_form( $comments_args, $post_id );
Разберём ключи и возможные значения первого аргумента функции "comment_form".
Название Тип данных Описание
action строка Значение атрибута action формы. По умолчанию: site_url('/wp-comments-post.php')
fields массив Массив кода для полей ввода данных: author, email, url. Пример массива смотрите после этой таблицы. По умолчанию: apply_filters( 'comment_form_default_fields', $fields )
comment_field строка Код для поля ввода комментария. По умолчанию:

'<p class="comment-form-comment"><label for="comment">' . _x( 'Comment', 'noun' ) . '</label> <textarea id="comment" name="comment" cols="45" rows="8" aria-required="true"></textarea></p>'
must_log_in строка Текст, который показывается, если для комментирования нужна регистрация/авторизация. По умолчанию:

'<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( $post_id ) ) ) ) . '</p>'
logged_in_as строка Текст, который показывается, если пользователь авторизирован. По умолчанию:

'<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( $post_id ) ) ) ) . '</p>'
comment_notes_before строка Текст, который показывается перед полями ввода данных для не авторизированых пользователей. По умолчанию:

'<p class="comment-notes">' . __( 'Your email address will not be published.' ) . ( $req ? $required_text : '' ) . '</p>'
comment_notes_after строка Текст, который показывается после полей ввода, но до кнопки отправки комментария. По умолчанию:

'<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>'
id_form строка Значение атрибута id у тега <form>. По умолчанию: "commentform"
class_form строка Значение атрибута "class" для формы комментирования. По умолчанию: 'comment-form'
id_submit строка Значение атрибута id у кнопки отправки комментария. По умолчанию: 'submit'
title_reply строка Заголовок формы комментирования статьи. К примеру: "Оставить комментарий". По умолчанию: __( 'Leave a Reply' )
title_reply_before строка HTML код перед заголовком для формы. По умолчанию: '<h3 id="reply-title" class="comment-reply-title">'
title_reply_after строка HTML код после заголовка для формы. По умолчанию: '</h3>'
title_reply_to строка Заголовок формы ответа на комментарий. К примеру: "Ответить на комментарий: ". По умолчанию: __( 'Leave a Reply to %s' )
label_submit строка Текст на кнопке отправки комментария (к примеру, "Оставить комментарий"). По умолчанию: __( 'Post Comment' )
class_submit строка Значение атрибута "class" для кнопки отправки формы. По умолчанию: 'submit'
submit_button строка HTML код кнопки отправки формы. По умолчанию: '<input name="%1$s" type="submit" id="%2$s" class="%3$s" value="%4$s" />'
submit_field строка Шаблон HTML обрамления для кнопки отправки формы и скрытых полей. В переданном шаблоне %1$s замениться кнопкой отправки формы, а %2$s скрытыми полями. По умолчанию: '<p class="form-submit">%1$s %2$s</p>'
cancel_reply_before строка HTML код перед ссылкой на отмену ответа на комментарий. По умолчанию: ' <small>'
cancel_reply_after строка HTML код после ссылки на отмену ответа на комментарий. По умолчанию: '</small>'
cancel_reply_link строка Текст на ссылке отмены ответа (закрытие формы ответа на комментарий). По умолчанию: __( 'Cancel reply' )
class_container строка Значение атрибута "class" для контейнера формы. По умолчанию: 'comment-respond'
Приведём пример содержания элемента массива аргументов с ключом "fields":
array(
'author' => '<p class="comment-form-author">
   <label for="author">' . __( 'Name' ) . ( $req ? ' <span class="required">*</span>' : '' ) . '</label>
   <input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30"' . $aria_req . $html_req . ' />
</p>',
'email'  => '<p class="comment-form-email">
   <label for="email">' . __( 'Email' ) . ( $req ? ' <span class="required">*</span>' : '' ) . '</label> 
   <input id="email" name="email" ' . ( $html5 ? 'type="email"' : 'type="text"' ) . ' value="' . esc_attr(  $commenter['comment_author_email'] ) . '" size="30" aria-describedby="email-notes"' . $aria_req . $html_req  . ' />
</p>',
'url'    => '<p class="comment-form-url">
   <label for="url">' . __( 'Website' ) . '</label> 
   <input id="url" name="url" ' . ( $html5 ? 'type="url"' : 'type="text"' ) . ' value="' . esc_attr( $commenter['comment_author_url'] ) . '" size="30" />
</p>',
'cookies' => '<p class="comment-form-cookies-consent">'.
   sprintf( '<input id="wp-comment-cookies-consent" name="wp-comment-cookies-consent" type="checkbox" value="yes"%s />', $consent ) .'
   <label for="wp-comment-cookies-consent">'. __( 'Save my name, email, and website in this browser for the next time I comment.' ) .'</label>
</p>', 
);
Если необходимо использовать переменную $commenter функции вывода, то нужно определить её. К примеру:

$commenter = wp_get_current_commenter();
MouseDC.ru - хостинг, виртуальный хостинг, покупка доменов, проверка доменов, WHOIS, курсы создания сайтов, вебинары по созданию, курсы разработки сайтов, доработка сайтов, сопровождение сайтов, разработка сайтов, техподдержка сайтов
Была ли эта статья полезна? Есть вопрос?
Cмотрите другие статьи: