Comment_form() - выводит форму комментариев в WordPress
Опубликовано: 01.09.2018
Функция выводит полноценную форму для комментирования, которую можно использовать в теме сайта.
HTML полей и лейблы можно задать при помощи параметра $args функции, если же вам понадобится удалить одно из стандартных полей или добавить новое, воспользуйтесь фильтром comment_form_default_fields . Кроме того, каждое из полей проходит отдельно через фильтр comment_form_field_$name , где $name — это ID поля, задающийся в параметрах в массиве fields.
Victorinox Climber лучший нож ! Викторинокс !
comment_form ( $args = array ( ) , $post_id = null ) |
$args = array ( 'fields' => array ( 'author' => '<p class="comment-form-author"><label for="author">Имя</label> <input id="author" name="author" type="text" value="" size="30" /></p>' , 'email' => '<p class="comment-form-email"><label for="email">E-mail</label> <input id="email" name="email" type="text" value="" size="30" /></p>' , 'url' => '<p class="comment-form-url"><label for="url">Сайт</label> <input id="url" name="url" type="text" value="" size="30" /></p>' ) ) ; |
То есть какие поля будут переданы через fields, те и будут в итоге выведены в форме. Параметр не позволяет по отдельности менять HTML полей, то есть либо вы меняете сразу все поля, либо не меняете вообще.
MAH02387
Обратите внимание, если вы таким образом измените HTML полей формы «Имя» или «Email», то, при повторной отправке комментария пользователем его данные сохраняться не будут.
comment_field (строка) Поле комментария и его лейбл, по умолчанию:< p class= "comment-form-comment" >< label for= "comment" >Комментарий</ label > < textarea id= "comment" name= "comment" cols= "45" rows= "8" aria-required= "true" ></ textarea ></ p> |
< p class= "must-log-in" >Для отправки комментария вы должны < a href= "{тут ссылка на страницу авторизации}" >авторизоваться</ a>.</ p> |
< p class= "logged-in-as" >Вы вошли как < a href= "{ссылка на профиль}" >{отображаемое имя}</ a>. < a href= "{ссылка выхода}" title= "Выйти из этой учётной записи" >Выйти?</ a></ p> |
< p class= "comment-notes" >Ваш e-mail не будет опубликован.</ p> |
< p class= "form-allowed-tags" >Можно использовать следующие < abbr title= "HyperText Markup Language" >HTML</ abbr >-теги и атрибуты: < code > < a href= "" title= ""> < abbr title= ""> < acronym title= ""> < b> < blockquote cite= ""> < cite > < code > < del datetime= ""> < em > < i> < q cite= ""> < strike > < strong > </ code ></ p> |
Пример
$args = array ( // изменяем текст кнопки отправки 'label_submit' => 'Запостить коммент' , // удаляем сообщение со списком разрешенных HTML-тегов из-под формы комментирования 'comment_notes_after' => '' , // указываем собственный HTML-код для вывода поля комментария 'comment_field' => '<p class="comment-form-comment"><label for="comment">Твой коммент</label><br /><textarea id="comment" name="comment" aria-required="true"></textarea></p>' , ) ; comment_form ( $args ) ; |
Фильтр comment_form_default_fields
Обратите внимание, используя параметр fields, мы не можем изменить какое-либо конкретное поля комментирования или добавить новое, не затрагивая при этом остальные поля ввода.
Фильтр применяется уже в конце, то есть после того, как вступят в силу значения элементов массива fields.
$fields = apply_filters ( 'comment_form_default_fields' , $fields ) ; |
Хорошо, такой пример — допустим, нам нужно добавить поле ввода телефона. Как это сделать? Вставив этот код в functions.php:
function true_phone_number_field ( $fields ) { $fields [ 'phone' ] = '<p class="comment-form-phone"><label for="phone">Телефон</label> <input id="phone" name="phone" type="text" value="" size="30" /></p>' ; return $fields ; } add_filter ( 'comment_form_default_fields' , 'true_phone_number_field' , 10 , 1 ) ; |
А можно ли сделать так, чтобы поле для ввода телефона располагалось сразу под полем «E-mail»? Да, вот так:
function true_phone_number_field ( $fields ) { $phone = array ( 'phone' => '<p class="comment-form-phone"><label for="phone">Телефон</label> <input id="phone" name="phone" type="text" value="" size="30" /></p>' ) ; $fields = array_slice ( $fields , 0 , 2 , true ) + $phone + array_slice ( $fields , 2 , NULL , true ) ; return $fields ; } add_filter ( 'comment_form_default_fields' , 'true_phone_number_field' , 10 , 1 ) ; |
И давайте рассмотрим ещё один пример, в котором мы удалим поле «Сайт»:
function true_remove_url_field ( $fields ) { unset ( $fields [ 'url' ] ) ; return $fields ; } add_filter ( 'comment_form_default_fields' , 'true_remove_url_field' , 10 , 1 ) ; |
Фильтр comment_form_field_{ID поля}
Фильтр, который применяется к каждому полю ввода (кроме поля комментария) уже после задействования фильтра comment_form_default_fields.
Используя этот фильтр, очень удобно применять регулярные выражения к HTML-коду полей ввода.
echo apply_filters ( "comment_form_field_ {$name} ", $field ) . " \n "; |
Так, ну давайте в качестве примера вместо поля «Сайт» напишем «http://», для этого в functions.php добавляем следующий код:
function true_change_url_label ( $field ) { return '<p class="comment-form-url"><label for="url">http://</label> <input id="url" name="url" type="text" value="" size="30" /></p>' ; } add_filter ( 'comment_form_field_url' , 'true_change_url_label' , 10 , 1 ) ; |