<?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( '← Предыдущие комментарии' );
next_comments_link( 'Следующие комментарии →' );
?>
<?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' |
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();
$commenter = wp_get_current_commenter();