Тонкая настройка формы комментирования. Делаем супер форму комментариев WordPress Западной добавить комментарий comment

Здравствуйте!

Сегодняшняя статья посвящена выводу комментариев WordPress . Мы рассмотрим в каких файлах и функциях расположен код, отвечающий за отображение комментариев. Что нужно сделать, чтобы иметь возможность внести изменения в этот блок WordPress блога.

Начну с того, что в каждом шаблоне (теме) WordPress есть файл comments.php , Полный путь к нему от корневого каталога: /wp-content/themes/папка_шаблона/comments.php

Именно comments.php отвечает в целом за блок комментариев в конкретной теме WordPress.

Что чаще всего содержится в comments.php:

– проверка защиты комментариев паролем

– проверка разрешены ли комментарии к статье

– проверка наличия комментариев и вывод соответствующего текста (“Комментариев нет …” или “Оставлено n комментариев”)

– вызов функции вывода комментариев – wp_list_comments()

– вывод навигации (пейджинации) при многостраничном размещении комментариев

– вывод формы для оставления комментариев к статье

Здесь понятно, что вы можете задавать свои классы или изменять свойства в style.css для уже существующих классов. Таким образом, вы можете изменить внешний вид формы для оставления комментариев и текстов до списка комментариев и после этого списка или формы. Но стили вывода непосредственно самих комментариев в comments.php изменить нельзя.

Когда я перечислял содержимое файла comments.php , то специально отметил подчеркиванием, что в comments.php происходит всего лишь вызов функции вывода комментариев wp_list_comments() , но не сам вывод. Т.е. в comments.php вы не найдете (по крайней мере, в последних версиях WordPress и при правильном подходе к разработке шаблонов): вывод имени автора сообщения и ссылки на его сайт, вывод аватарки автора, вывод даты и времени комментария, самого комментария и ссылки “ответить”.

Как же изменить стили в списке комментариев?

Для начала нужно выяснить используется ли в вашем шаблоне пользовательская функция для вывода комментариев.

Вызов функции wp_list_comments() возможен без колбэка (callback – функция обратного вызова) и с колбэком.

1. Вызов wp_list_comments без колбэка:

Т.е. в параметрах функции (то что в скобочках, после названия) нигде не фигурирует параметр с названием ‘callback’.

Если в comment.php вашего шаблона такая ситуация, то это означает, что в данной теме нет собственной (пользовательской) функции для вывода комментариев и для этого используется стандартный шаблон (шаблон из ядра WordPress). Расположен он файле . А поскольку , то в данном случае изменить стили отображения комментариев не получится, пока мы не прейдем ко второму варианту.

2. Вызов wp_list_comments с колбэком:

callback=custom_comment указывает, что для вывода комментариев у нас есть пользовательская функция custom_comment , код которой, грубо говоря, мы и передаем в качестве параметра для исполнения в стандартную функцию wp_list_comments . Но нас интересует больше не техническая сторона этого вопроса, а именно наличие в шаблоне собственной функции для вывода комментариев. Код этой функции расположен в .

Вот именно в этой пользовательской функции custom_comment и расположен код, отвечающий за внешний вид отдельного комментария, а следовательно и всех комментариев в целом.

Код пользовательской функции интуитивно понятный. В нем, обычно, используются следующие стандартные функции WordPress:

get_comment_author_link() – получает html ссылку на сайт автора текущего комментария;

get_comment_date() – получает дату комментария;

get_comment_time() – получает время комментария;

comment_text() – выводит текст комментария;

Вы можете находить фрагменты с этими функциями в коде и изменять внешний вид тех или иных элементов, обрамляя их в блоки div или span и присваивая определенные классы стилей.

Например, в коде пользовательской функции фрагмент вывода аватарки:

< div class = "comment-author" >

< / div >

Теперь осталось в style.css задать желаемые свойства классу comment-author . Подробней конкретные примеры изменения стилей рассмотрю в одной из следующих статей.

Теперь у вас может возникнуть вопрос: “Что делать, если в моем шаблоне нет пользовательской функции для вывода комментариев? ”

Ответ: нужно создать её.

Самый простой вариант – скопировать код стандартной функции WordPress comment() .

Инструкция по созданию пользовательской функции для вывода комментариев:

1. Откройтефайл /wp-includes/comment-template.php и найдите в нем функцию comment() .

Вот начало её описания

/** * @since 3.6 * @access protected * * @param object $comment Comment to display. * @param int $depth Depth of comment. * @param array $args Optional args. */ protected function comment($comment, $depth, $args) {

* @since 3.6

* @access protected

* @param object $comment Comment to display.

* @param int $depth Depth of comment.

* @param array $args Optional args.

protected function comment ($ comment , $ depth , $ args ) {

2. Скопируйте все тело функции comment() .

Скопировать нужно фрагмент кода от начала описания, показанного в пункте 1 до закрывающейся фигурной скобки } и следующего за ней подобного описания другой функции

Многим такое название не мешает, но иногда встает вопрос как изменить добавить комментарий на оставить отзыв или подобное. В этом случаи вам и поможет данная статья. Как и написал выше, покажу пару способов.

Способ №1

Для первого способа, вы должны в папке с темой, что установлена у вас на сайте, найти файл comments.php . Если такой есть, открыть его и поискать в нем массив, отвечающий за настройки и вывод содержания формы комментариев. Выглядит он примерно так:

$args = array("comment_notes_before" => "

", "comment_field" => "

Комментарий *

", "id_submit" => "comm_subm", "label_submit" =>

Так вот, к этому массиву, нужно добавить новый параметр с нужным значением и все. В нашем случаи, это:

"title_reply" => "Оставить свой отзыв",

Как понимаете - Оставить свой отзыв , это и есть новое название вместо - Добавить комментарий. Добавить такой параметр можно в конец или в начало массива. Получится как-то так:

$args = array("title_reply" => "Оставить свой отзыв", "comment_notes_before" => "

Заполните поля ниже. Ваш e-mail не будет опубликован. Обязательные поля помечены *

", "comment_field" => "

Комментарий *

", "id_submit" => "comm_subm", "label_submit" => "Отправить",); comment_form($args);

Добавлено в начало и теперь, на страницах записей будет выводится строка - Оставить свой отзыв. Этот способ не сложный и требует минимальных сил, главное правильно определить массив. Но иногда так бывает, что внутри темы нет файла comments.php или в нем нет массива и вы не знаете как правильно его туда добавить, тогда вам поможет второй способ.

Способ №2

Суть второго способа заключается в том, чтобы добавить новую функцию, которая и сделает замену названия. Для этого в папке с активной темой, нужно найти файл function.php с пользовательскими функциями и в удобное место, если не знаете такого, то в самый конец перед закрывающим тегом PHP - ?> , если такого нет, то просто в самый конец, добавить вот такой код:

Function wph_change_submit_label($defaults) { $defaults["title_reply"] = "Оставить свой отзыв"; return $defaults; } add_filter("comment_form_defaults", "wph_change_submit_label");

Бонус

Это то же самое, по сути что делалось и в первом способе, просто, там мы внедряли непосредственно в массив, а тут через фильтр. После этих действий, вы увидите изменение в названии. Как и в первом способе, можете поменять текст - Оставить свой отзыв, на тот что вам нравится. Данный текст указан как пример.

Еще хочу предложить и обратить внимание на склонение слова Комментарии. Если у вас выводит в форме строку - Опубликовано 1 комментарий или Комментариев: 10. Можете воспользоваться Функцией из статьи . Если вы уже пользуетесь ней, то рекомендую в строке с массивом:

Array("комментарий","комментария","комментариев")

Изменить названия на отзыв,отзыва,отзывов, если вы использовали это слово в способах выше. таким образом, у вас будет все одинаково, а не в разброс, там отзывы, а там комментарии.

Вот такую информацию, хотел сегодня вам предоставить. Возможно, кому-то она станет полезной.

На этом все, спасибо за внимание. 🙂

В WordPress есть несколько видов содержания, такие как записи, страницы, комментарии. WordPress является очень гибкой платформой, которая позволяет настраивать основные виды содержания так, как нужно для сайта. Можно поменять внешний вид и функционал. В данном уроке мы покажем, как изменить поведение и внешний вид комментариев на сайте под управлением WordPress.

Шаг 1. Разбираемся в функцией comment_form и ее аргументами

Рассмотрим функцию WordPress comment_form . Она отвечает за вывод формы комментариев, которая выводится на странице или записи. Вызов данной функции в основном можно встретить в файле comments.php в папке темы. Данный файл включается в различных местах, например, в файлах single.php и page.php , непосредственно или через вызов функции comments_template .

Описание функции можно найти в кодексе WordPress .

Если использовать функцию comment_form для вывода формы, то она будет выводиться с использованием параметров по умолчанию и будет содержать такие поля как имя, email (оба поля являются обязательными), веб сайт и содержание комментария. В теме по умолчанию Twenty Eleven форма будет выглядеть следующим образом.

Некоторые важные аргументы функции comment_form:

  • fields -с его помощью можно управлять выводом полей в форме комментария.
  • comment_notes_before и comment_notes_after - используются для вывода информации перед и после формы.
  • title_reply - используется для изменения названия ответа, которое по умолчанию имеет значение ‘Leave a Reply’.
  • label_submit - используется для изменения текста на кнопке отправки комментария.
Шаг 2. Настраиваем форму комментария с помощью функции comment_form

Теперь настроим нашу форму комментария с помощью передачи аргументов в функцию comment_form .

В случае, если нам нужно настроить поля в форме комментариев, нужно передать их список в функцию comment_form . По умолчанию для функции используется следующий список полей:

$fields = array("author" => "

" . "" . __("Name") . " " . ($req ? "*" : "") . "

", "email" => "", "url" => "

" . __("Website") . "" . "

",);

Если нам нужно удалить поле, например, website , нужно просто исключить его из массива и передать массив в функцию comment_form .

$commenter = wp_get_current_commenter(); $req = get_option("require_name_email"); $aria_req = ($req ? " aria-required="true"" : ""); $fields = array("author" => "

" . "" . __("Name") . " " . ($req ? "*" : "") . "

", "email" => "",); $comments_args = array("fields" => $fields); comment_form($comments_args);

В дополнение также сменим название формы на ‘Please give us your valuable comment’, а надпись на кнопке на ‘Send My Comment’.

Для выполнения задачи передаем в функцию comment_form следующие аргументы:

$commenter = wp_get_current_commenter(); $req = get_option("require_name_email"); $aria_req = ($req ? " aria-required="true"" : ""); $fields = array("author" => "

" . "" . __("Name") . " " . ($req ? "*" : "") . "

", "email" => "",); $comments_args = array("fields" => $fields, "title_reply"=>"Please give us your valuable comment", "label_submit" => "Send My Comment"); comment_form($comments_args);

Теперь форма комментария будет выглядеть следующим образом:

Шаг 3 . Удаляем поля из формы с помощью крюка

Также форма комментария WordPress может быть изменена с помощью крюков и фильтров. Такая настройка может быть особенно полезна при работе с плагином, когда нужно настроить несколько элементов, но не изменять файлы темы. Фильтр для добавления иди удаления полей из формы - ‘ comment_form_default_fields ‘

Удалим поле адреса URL с помощью фильтра. Приведенный код можно использовать в плагине или в файле functions.php активной темы.

Function remove_comment_fields($fields) { unset($fields["url"]); return $fields; } add_filter("comment_form_default_fields","remove_comment_fields");

Шаг 4. Добавляем данные в форму комментария с помощью крюка

Мы можем добавить поля в форму с помощью фильтра ‘ comment_form_default_fields ‘. Добавим поле возраста автора с помощью фильтра и сохраним данное поле дополнительные данные и будем их выводить в комментарии.

Добавляем поле следующим образом:

Function add_comment_fields($fields) { $fields["age"] = "

" . __("Age") . "" . "

"; return $fields; } add_filter("comment_form_default_fields","add_comment_fields");

#respond .comment-form-author label, #respond .comment-form-email label, #respond .comment-form-url label, #respond .comment-form-age label, #respond .comment-form-comment label { background: #eee; -webkit-box-shadow: 1px 2px 2px rgba(204,204,204,0.8); -moz-box-shadow: 1px 2px 2px rgba(204,204,204,0.8); box-shadow: 1px 2px 2px rgba(204,204,204,0.8); color: #555; display: inline-block; font-size: 13px; left: 4px; min-width: 60px; padding: 4px 10px; position: relative; top: 40px; z-index: 1; }

Теперь наша форма комментария будет выглядеть следующим образом:

Теперь возраст хранится как дополнительная информация. Нужно использовать крюк в ‘ comment_post ‘:

Function add_comment_meta_values($comment_id) { if(isset($_POST["age"])) { $age = wp_filter_nohtml_kses($_POST["age"]); add_comment_meta($comment_id, "age", $age, false); } } add_action ("comment_post", "add_comment_meta_values", 1);

Как только данные сохранены, их можно выводить в комментарии следующим образом:

Шаг 5 . Настройка комментариев для определенных типов записей

Иногда требуется использовать поля в комментариях только для определенных типов записей. Изменим код для вывода поля возраста только для записи типа book :

Function add_comment_fields($fields) { if(is_singular("books")) { $fields["age"] = "

" . __("Age") . "" . "

"; } return $fields; } add_filter("comment_form_default_fields","add_comment_fields");

Шаг 6. Создаем возвратную функцию для вывода комментариев

Функция wp_list_comments используется для вывода комментариев в записях. В кодексе WordPress функция описана подробно.

wp_list_comments имеет аргумент ‘ callback ‘ в котором можно определить функцию, которая вызывается при выводе комментария.

В теме Twenty Eleven в файле comments.php можно найти строку:

Wp_list_comments(array("callback" => "twentyeleven_comment"));

Изменим ее на:

Wp_list_comments(array("callback" => "my_comments_callback"));

Функция my_comments_callback будет вызываться для каждой записи.

Шаг 7. Стилизация комментариев

Теперь мы немного изменим стиль комментария. Просто будем выводить содержание записи и поле возраста, которое было добавлено нами ранее. Мы также изменим цвет фона для комментариев.

Код функции ‘ my_comments_callback ‘:

Function my_comments_callback($comment, $args, $depth) { $GLOBALS["comment"] = $comment; ?>