WordPress. Форма комментирования
29.05.2019
Теги: CMS • Hook • Web-разработка • WordPress • Комментарии • Событие • Форма
Функция comment_form()
Выводит на экран готовый код формы комментирования, который можно использовать в шаблонах темы. Большинство полей формы можно изменить через параметр $args
(ассоциативный массив) или можно использовать фильтр comment_form_defaults
, чтобы изменить параметры по умолчанию.
comment_form($args, $post_id);
$args
(массив). Аргументы, в соответствии с которыми будет создана форма комментирования. По умолчанию: предустановленные.$post_id
(строка/массив/число). Идентификатор поста, для которого нужно вывести форму комментирования. По умолчанию:null
(текущий пост).
По умолчанию будет сформирован примерно такой html-код:
<div id="respond" class="comment-respond"> <h3 id="reply-title" class="comment-reply-title">Добавить комментарий <small> <a rel="nofollow" id="cancel-comment-reply-link" href="/post-number-8/#respond" style="display:none;">Отменить ответ</a> </small> </h3> <form action="http://www.server.com/wp-comments-post.php" method="post" id="commentform" class="comment-form"> <p class="comment-notes"> <span id="email-notes">Ваш e-mail не будет опубликован.</span> Обязательные поля помечены <span class="required">*</span> </p> <p class="comment-form-comment"> <label for="comment">Комментарий</label> <textarea id="comment" name="comment" cols="45" rows="8" maxlength="65525" required="required"/> </p> <p class="comment-form-author"> <label for="author">Имя <span class="required">*</span> </label> <input id="author" name="author" type="text" value="" size="30" maxlength="245" required="required"> </p> <p class="comment-form-email"> <label for="email">E-mail <span class="required">*</span></label> <input id="email" name="email" type="text" value="" size="30" maxlength="100" aria-describedby="email-notes" required="required"> </p> <p class="comment-form-url"> <label for="url">Сайт</label> <input id="url" name="url" type="text" value="" size="30" maxlength="200"> </p> <p class="form-submit"> <input name="submit" type="submit" id="submit" class="submit" value="Отправить комментарий"> <input type="hidden" name="comment_post_ID" value="1883" id="comment_post_ID"> <input type="hidden" name="comment_parent" id="comment_parent" value="0"> </p> </form> </div>
Фильтр comment_form_defaults
Позволяет изменить аргументы по-умолчанию, с которыми вызывается функция comment_form()
:
add_filter('comment_form_defaults', function ($defaults) { // изменим текст кнопки отправки формы $defaults['label_submit'] = 'Добавить комментарий'; return $defaults; });
Фильтр comment_form_default_fields
Позволяет изменять, добавлять или удалять поля формы, кроме поля комментария. Для начала посмотрим, какие поля нам доступны:
add_filter('comment_form_default_fields', function($fields) { die(print_r($fields)); // посмотрим какие поля есть });
Array ( [author] => <p class="comment-form-author"><label for="author">Имя <span class="required">*</span></label> <input id="author" name="author" type="text" value="" size="30" maxlength="245" required='required' /></p> [email] => <p class="comment-form-email"><label for="email">E-mail <span class="required">*</span></label> <input id="email" name="email" type="text" value="" size="30" maxlength="100" aria-describedby="email-notes" required='required' /></p> [url] => <p class="comment-form-url"><label for="url">Сайт</label> <input id="url" name="url" type="text" value="" size="30" maxlength="200" /></p> )
Теперь удалим поле «Сайт» и добавим поле «Телефон»:
add_filter('comment_form_default_fields', function($fields) { // удаляем поле «Сайт» unset($fields['url']); // добавляем поле «Телефон» $label = __('Phone'); $fields['phone'] = <<<PHONE <p class="comment-form-phone"> <label for="phone">$label</label> <input id="phone" name="phone" type="text" size="30"/> </p> PHONE; return $fields; });
Фильтр comment_form_field_comment
Позволяет изменить поле комментария:
add_filter('comment_form_field_comment', function () { $field = <<<FIELD <p class="comment-form-comment"> <label for="comment">Комментарий</label> <textarea id="comment" name="comment" cols="45" rows="8" maxlength="65525" required="required"></textarea> </p> FIELD; return $field; });
Фильтр comment_form_fields
Позволяет изменить любое поле формы. Также можно изменить порядок, т.е. чтобы textarea
выводилось после полей author
, email
, url
. Для начала просто посмотрим на массив полей формы:
add_filter('comment_form_fields', function($fields) { die(print_r($fields)); // посмотрим какие поля есть });
Array ( [comment] => <p class="comment-form-comment"><label for="comment">Комментарий</label> <textarea id="comment" name="comment" cols="45" rows="8" maxlength="65525" required="required"></textarea></p> [author] => <p class="comment-form-author"><label for="author">Имя <span class="required">*</span></label> <input id="author" name="author" type="text" value="" size="30" maxlength="245" required='required' /></p> [email] => <p class="comment-form-email"><label for="email">E-mail <span class="required">*</span></label> <input id="email" name="email" type="text" value="" size="30" maxlength="100" aria-describedby="email-notes" required='required' /></p> [url] => <p class="comment-form-url"><label for="url">Сайт</label> <input id="url" name="url" type="text" value="" size="30" maxlength="200" /></p> )
А теперь разместим поля формы в нужном нам порядке:
add_filter('comment_form_fields', function($fields) { // сюда соберем поля в новом порядке $new = []; // нужный нам порядок полей формы $keys = ['author', 'email', 'url', 'comment']; foreach ($keys as $key) { if (isset($fields[$key])) { $new[$key] = $fields[$key]; unset($fields[$key]); } } // если остались еще какие-то поля, добавим их в конец if (!empty($fields)) { foreach ($fields as $key => $value) { $new[$key] = $value; } } return $new; });
Событие comment_form_before
Позволяет вывести информацию перед выводом формы комментария, перед заголовком «Добавить комментарий».
add_action('comment_form_before', function () { echo '<p>Текст, который будет показан перед формой комментирования.</p>'; });
Событие comment_form_after
Позволяет вывести информацию после вывода формы комментария, после кнопки «Отправить комментарий».
add_action('comment_form_after', function () { echo '<p>Текст, который будет показан после формы комментирования.</p>'; });
Событие comment_form_before_fields
Позволяет вывести информацию перед полями формы author
, email
и url
. Эту информацию увидят только неавторизованные пользователи, потому как для авторизованных поля author
, email
и url
скрыты.
add_action('comment_form_before_fields', function () { echo '<p>Текст, который будет показан перед полями формы.</p>'; });
Событие comment_form_after_fields
Позволяет вывести информацию после полей формы author
, email
и url
. Эту информацию увидят только неавторизованные пользователи, потому как для авторизованных поля author
, email
и url
скрыты.
add_action('comment_form_after_fields', function () { echo '<p>Текст, который будет показан после полей формы.</p>'; });
Событие comment_form_top
Позволяет вывести информацию после заголовка «Добавить комментарий».
add_action('comment_form_top', function () { echo '<p>Текст, который будет показан после «Добавить комментарий».</p>'; });
Событие comment_form_logged_in_after
Позволяет вывести информацию после текста «Вы вошли как … Выйти?». Это сообщение увидят только авторизованные пользователи.
add_action('comment_form_logged_in_after', function () { echo '<p>Текст, который будет после «Вы вошли как … Выйти?»</p>'; });
Событие comment_form_must_log_in_after
Если в настройках комментрирования отмечен checkbox «Пользователи должны быть авторизованы для комментирования», неавторизованные пользователи не увидят форму, а только сообщение «Для отправки комментария необходимо авторизоваться». С помощью этого события можно вывести таким пользователям информацию после этого сообщения:
add_action('comment_form_must_log_in_after', function () { echo '<p>Текст, который будет после «Для отправки комментария …»</p>'; });
- WordPress. Обработка POST-запросов. Часть 1
- WordPress. Защита формы комментария
- WordPress. Порядок загрузки страницы
- WordPress. Обработка POST-запросов. Часть 2
- WordPress. Как работают хуки
- WordPress. Фильтр записей по произвольным полям. Часть 3 из 3
- WordPress. Фильтр записей по произвольным полям. Часть 2 из 3
Поиск: CMS • Web-разработка • WordPress • Комментарии • Событие • Форма • Comment • Form • Hook