Функция comment_form()
в WordPress отвечает за отображение формы для отправки комментариев. Она генерирует HTML-код формы, которая позволяет пользователям оставлять комментарии под постами и страницами. В этой статье мы рассмотрим, как использовать эту функцию, какие параметры она принимает и как можно настроить форму комментариев.
- Пример 1: Отображение формы комментариев с настройками по умолчанию
- Пример 2: Настройка заголовка и текста кнопки отправки
- Пример 3: Добавление кастомных полей и изменение стилей
- Пример 4: Изменение порядка вывода полей
- Пример 5: Добавление дополнительного поля
- Пример 6: Настройка кнопки отправки комментария
- Хуки и фильтры
- Заключение
comment_form( array $args = array(), int|WP_Post $post = null )
Возвращаемое значение
Функция comment_form()
не возвращает значений. Она выводит HTML-код формы комментариев непосредственно на экран.
Параметры функции
Функция comment_form()
принимает два параметра:
$args
(массив) — Параметры, согласно которым будет создана форма комментариев.$post_id
(строка/массив/число) — ID поста, для которого нужно вывести форму комментарирования.
По умолчанию, $post_id
устанавливается на текущий пост, а $args
содержит предустановленные значения.
Аргументы параметра $args
- action (строка, WP 4.6) — Значение атрибута action формы. По умолчанию:
site_url('/wp-comments-post.php')
. - fields (массив) — Поля ввода данных: author, email, url. Пример:
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>',
);
- 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 (строка) — Текст или HTML-код, который будет показан перед полями ввода данных для не авторизированных пользователей. По умолчанию:
'<p class="comment-notes">' . __( 'Your email address will not be published.' ) . ( $req ? $required_text : '' ) . '</p>'
- comment_notes_after (строка) — Текст или HTML-код, который будет показан после полей ввода, но до кнопки отправки комментария. По умолчанию:
'<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 (строка, WP 4.4) — Атрибут class для формы комментариев. По умолчанию: ‘comment-form’.
- id_submit (строка) — Значение атрибута id у кнопки отправки комментария. По умолчанию: ‘submit’.
- title_reply (строка) — Заголовок формы комментарирования (когда комментируется статья). По умолчанию: «Leave a Reply».
- title_reply_before (строка, WP 4.4) — HTML-код перед заголовком для формы. По умолчанию: ‘<h3 id=»reply-title» class=»comment-reply-title»>’.
- title_reply_after (строка, WP 4.4) — HTML-код после заголовка для формы. По умолчанию: ‘</h3>’.
- title_reply_to (строка) — Заголовок формы комментарирования (когда комментатор отвечает на другой комментарий). По умолчанию: «Leave a Reply to %s».
- label_submit (строка) — Текст кнопки отправки комментария. По умолчанию: «Post Comment».
- class_submit (строка, WP 4.1) — Атрибут class для кнопки отправки. По умолчанию: ‘submit’.
- submit_button (строка, WP 4.2) — HTML-формат кнопки отправки комментария. По умолчанию:
'<input name="%1$s" type="submit" id="%2$s" class="%3$s" value="%4$s" />'
- submit_field (строка) — HTML-формат, который окружает кнопку отправки, а также скрытые поля. По умолчанию:
'<p class="form-submit">%1$s %2$s</p>'
- cancel_reply_before (строка, WP 4.4) — HTML-код перед ссылкой на отмену ответа на комментарий. По умолчанию: ‘ <small>’.
- cancel_reply_after (строка, WP 4.4) — HTML-код после ссылки на отмену ответа на комментарий. По умолчанию: ‘</small>’.
- cancel_reply_link (строка) — Текст ссылки «Отменить ответ». По умолчанию: «Cancel reply».
- class_container (строка, WP 5.5) — Атрибут class для контейнера формы. По умолчанию: ‘comment-respond’.
Пример 1: Отображение формы комментариев с настройками по умолчанию
Этот пример покажет форму комментариев с настройками по умолчанию.
<?php
// Отображение формы комментариев с настройками по умолчанию
comment_form();
?>
Пример 2: Настройка заголовка и текста кнопки отправки
В этом примере показано, как можно изменить заголовок формы и текст кнопки отправки.
<?php
// Настройка заголовка и текста кнопки отправки
$args = array(
'title_reply' => 'Оставьте свой отзыв',
'label_submit' => 'Отправить мой комментарий'
);
// Отображение формы комментариев с заданными настройками
comment_form($args);
?>
Пример 3: Добавление кастомных полей и изменение стилей
В этом примере показано, как добавить кастомные поля и изменить стили формы комментариев.
<?php
// Кастомные поля и стили
$args = array(
'fields' => array(
'author' => '<p class="comment-form-author"><label for="author">' . __('Имя') . '</label> ' .
'<input id="author" name="author" type="text" value="' . esc_attr($commenter['comment_author']) . '" size="30" /></p>',
'email' => '<p class="comment-form-email"><label for="email">' . __('Email') . '</label> ' .
'<input id="email" name="email" type="text" value="' . esc_attr($commenter['comment_author_email']) . '" size="30" /></p>',
),
'class_form' => 'my-custom-comment-form',
'class_submit' => 'my-custom-submit'
);
// Отображение формы комментариев с кастомными полями и стилями
comment_form($args);
?>
Пример 4: Изменение порядка вывода полей
Чтобы изменить порядок полей формы комментариев, можно использовать фильтр comment_form_fields
. Например, чтобы переместить поле textarea
комментария выше полей ввода имени и электронной почты, можно сделать следующее:
function custom_comment_form_fields($fields) {
$comment_field = $fields['comment'];
unset($fields['comment']);
$fields = array('comment' => $comment_field) + $fields;
return $fields;
}
add_filter('comment_form_fields', 'custom_comment_form_fields');
Пример 5: Добавление дополнительного поля
Для добавления дополнительного поля в форму комментариев, можно использовать фильтр comment_form_default_fields
:
function custom_comment_form_fields($fields) {
$fields['phone'] = '<p class="comment-form-phone">
<label for="phone">' . __( 'Phone' ) . '</label>
<input id="phone" name="phone" type="text" value="" size="30" />
</p>';
return $fields;
}
add_filter('comment_form_default_fields', 'custom_comment_form_fields');
Пример 6: Настройка кнопки отправки комментария
Изменить текст кнопки отправки комментария можно следующим образом:
function custom_comment_form_defaults($defaults) {
$defaults['label_submit'] = __('Send My Comment');
return $defaults;
}
add_filter('comment_form_defaults', 'custom_comment_form_defaults');
Хуки и фильтры
Функция comment_form()
использует несколько хуков и фильтров для настройки формы комментариев:
comment_form_comments_closed
comment_form_default_fields
the_permalink
comment_form_defaults
comment_form_before
comment_form_must_log_in_after
comment_form_top
comment_form_logged_in
comment_form_logged_in_after
comment_form_fields
comment_form_field_comment
comment_form_before_fields
comment_form_field_(name)
comment_form_field_comment
comment_form_field_author
comment_form_field_email
comment_form_field_url
comment_form_field_cookies
comment_form_after_fields
comment_form_submit_button
comment_form_submit_field
comment_form
comment_form_after
Заключение
Функция comment_form()
является мощным инструментом для создания и настройки формы комментариев в WordPress. С ее помощью можно гибко управлять полями ввода, текстами и внешним видом формы, обеспечивая таким образом удобство для пользователей и соответствие требованиям дизайна вашего сайта.