Комментарии в 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мотрите другие статьи:
Была ли статья полезной?
Была ли эта статья полезна? Есть вопрос?
хостинг для сайтов
Закажите недорогой хостинг Заказать

всего от 290 руб