Рекреативной добавить комментарий comment. Делаем супер форму комментариев WordPress. Инструкция по созданию пользовательской функции для вывода комментариев

По мало понятным мне причинам в седьмом Друпале нет возможности поменять направленость списка комментарив. Безусловно, для блогов вполне удобен "коробочный" вариант - старые комментарии вверху, новые внизу, а форма комментариев вообще в конце страницы. Однако могу привести пример сайта с сериалами: на одной странице есть плеер со всеми сериями сериала, а под ним располагаются комментарии. А теперь представьте, что серии постоянно добавляются в плеер, и в комментариях идёт живое обсуждение. И далеко не каждый пользователь захочет каждый раз пролистывать сотню-другую комментариев, чтобы почитать последние и/или написать своё мнение. И таких примеров можно привести много. Поэтому исключение возможности поменять направление комментариев, на мой взгляд, грубая ошибка. Однако что сделано - то сделано, и сейчас я расскажу как восстановить справедливость.

Шаг первый. Меняем направление списка комментариев.

Первое, что надо сделать, это имплементировать в своём модуле hook_query_TAG_alter() . Выборка комментарив из базы помечена тэгом comment_filter , чем мы и воспользуемся:

/** * Implements hook_query_TAG_alter(). */ function ИМЯМОДУЛЯ_query_comment_filter_alter(QueryAlterableInterface $query ) { // Убираем сортировку по умолчанию. $order =& $query ->getOrderBy () ; unset ($order [ "torder" ] ) ; // Выставляем правильную сортировку. $query ->orderBy ("c.cid" , "DESC" ) ; }

После сброса кэша список всех ваших комментариев поменяет своё направление (новые будут сверху). Но теперь надо и форму комментариев перебросить наверх, а то нелогично получается - комменты сверху, а форма комментов снизу.

Шаг второй. Меняем положение формы комментариев.

Для того, чтобы вынести форму комментариев над списком комментариев, достаточно создать в корне темы файл comment-wrapper.tpl.php с вот таким содержимым:

>

type != "forum" ) : ?>

По сути, я взял файл comment-wrapper.tpl.php из модуля ядра comment и скопировал его в корень темы. После чего поменял местами вывод списка комментариев и формы комментариев.

После сброса кэша форма появиться над списком комментариев.

Шаг третий. Плюшки.

Первых двух шагов для выполнения поставленной задачи вполне хватает. Однако я бы предложил добавить удобства при работе с комментариями и поставить модуль ajax comments . После его установки комментарии будут добавляться в список без перезагрузки страницы - красиво, чёрт побери! Но есть один нюанс - комментарии будут добавляться в конец списка (как и предполагалось комментариям из "коробки"). Для того, чтобы комменты добавлялись в начало списка, нужно имплементировать в своём модуле ещё один хук, который меняет поведение модуля ajax comments :

/** * Implements hook_ajax_render_alter(). */ function ИМЯМОДУЛЯ_ajax_render_alter(&$commands ) { foreach ($commands as $key => $command ) { if ($command [ "method" ] == "append" && $command [ "selector" ] == "#comment-wrapper" ) { $commands [ $key ] [ "method" ] = "prepend" ; } } }

Снова сброс кэша - профит!

Шаг четвёртый. Полёт фантазии.

Теперь, в качестве самостоятельной работы, остаётся темизировать форму комментариев и сами комментарии в наиболее красивом варианте. В одной из своих последних работ я сделал комментарии наподобие вконтактовских:

Удачи в разработке!

Давненько я ничего не писал про WordPress. Поэтому сегодня я поделюсь с Вами тем, как можно вручную изменить форму комментирования в ВордПрессе. Думаю, что эти знания могут пригодиться любому начинающему блогеру, ведь форма комментирования это, порой, единственное средство общения посетителей и автора. Не проходите мимо:)

Перед тем, как мы начнем какие-либо манипуляции с кодом, хочу Вас заранее предупредить, что мы будем править файлы самого WordPress’a, а не файлы темы. Да, это может-быть покажется кому-то опасным, кому-то бессмысленным, кому-то просто не понравится:) Но Я сделал это именно так и никаких проблем у меня не возникло. Советую перед началом сделать бекап редактируемого файла.
Насчет безопасности предупредил, теперь хочу показать результат, к которому я пришел.


Как мы видим, была убрана строчка «Ваш e-mail не будет опубликован. Обязательные поля помечены *». Не нужно считать посетителей безмозглыми идиотами. Они итак понимают что нужно заполнять, а что нет. Так же я спрятал названия полей внутрь самих полей. К чему эти жирные записи? Большинство посетителей уже и без названий полей может «на глаз» определить, какое к чему относится. Но внутренние хинты все таки должны присутствовать. Ну и подпись к полю комментария утратила свою ненужную жирноту. На мой взгляд, так стало гораздо лучше и свободней.

Так давайте же скорее все менять! ;)
Идем в папку своего сайта и находим в нем файл wp-includes/comment-template.php. Ищем в нем строку 1522, да да именно ее. Как я сам ее нашел это целая история, расскажу об этом чуть позже:)
Итак, открываем файл на редактирование и переходим к 1522 строчке. Сейчас она и следующие (до 1529й) примерно такие:

$fields = array("author" => "

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

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

" . "

",);

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

Placeholder="Текст подсказки"

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

"

" "

" "

"

Удалять же будем строки:

"

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

"

Они отвечают за вывод подписей над полями.
В результате ВСЕХ этих манипуляций, получаем следующее:

$fields = array("author" => "

", "email" => "

", "url" => "

",);

Остается только удалить глупую подсказку «Ваш e-mail не будет опубликован. Обязательные поля помечены *». Для этого удаляем строку (примерно 1537):

"comment_notes_before" => "

" . __("Your email address will not be published.") . ($req ? $required_text: "") . "

",

Вот вроде бы и все, теперь наша форма стала немного более привлекательной. Надеюсь эта информация кому-то пригодится:)

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

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

Сегодняшняя статья посвящена выводу комментариев 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 с колбэком:

"type=comment&avatar_size=48&callback=custom_comment" ) ; ?>

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, а именно правил шаблон вывода комментариев, попутно разбираясь в его устройстве и различных функциях, ответственных за вывод комментариев на постах блога. В результате я изменил стандартный вывод, создал и подключил свой собственный файл comments.php . Полученный результат решил оформить в виде статьи, так как хорошо разобрался в этой теме, и материала получилось довольно много.

Надеюсь что статья окажется полезной для владельцев блогов на WordPress, знакомых с HTML, CSS и PHP.

***

В WordPress для подключения шаблона комментариев на пост или страницу используется функция comments_template() , которая принимает в себя два параметра:

  • первый — путь к файлу шаблона, по умолчанию это comments.php в папке с текущей темой
  • второй служит для разделения комментариев по типу (обычные, трекбэки и пингбэки), по умолчанию false

Вставим comments_template() после вывода записи в шаблон поста single.php или страницы page.php .

Описание и принимаемые аргументы функции comments_template() и других упоминаемых в статье ищите в Кодексе WordPress .

Подготовка шаблона

Давайте попробуем разобраться в шаблонах комментариев WP и собственноручно сделаем файл для вывода комментариев на посты и страницы блога. В качестве примеров для ознакомления можно взять шаблоны из стандартных тем WordPress. Создадим новый документ в любом текстовом редакторе, назовем его comments.php и начнем редактировать.

  • В принципе назвать файл можно как угодно, а после в comments_template() прописать путь к этому файлу, однако лучше придерживаться стандартного названия
  • Редактировать файл можно и в админке WP, кстати
  • Лучше всего конечно писать код и сразу проверять его действие на своем блоге или на локальном сервере.

В WordPress возможно запретить комментарии для отдельных постов, поэтому перед их выводом нужно произвести проверку на «открытость»:

Это код-обертка для наших дальнейших действий. Теперь подготовим контейнер для блока комментариев

с семантически корректным классом или идентификатором (класс конечно предпочтительнее):

Внутри

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

будет для этого в самый раз:

"

Здесь мы указали одну из функций WordPress — the_title() , результатом выполнения этой функции станет вывод заголовка текущего поста или страницы. Если вы не хотите выводить заголовок, то можно написать просто «Комментарии читателей».

Далее, перед тем как выводить комментарии, нужно удостовериться в их наличии, т.е. произвести проверку, если есть — вывести полный список, если нет — то можно показать пользователю что-то наподобие «». Так посетителю вашего поста/страницы будет понятно, что никто еще ничего не писал, а мотивирующая фраза «Вы можете быть первым» увеличит вероятность того, что вам быстрее что-нибудь напишут.

Итак, после такой постановки задачи становится ясно, что для реализации нам понадобятся конструкции if/else и функция вывода количества комментариев get_comments_number() . Если функция возвращает 0 (ноль), то выводим «Комментариев пока нет…», иначе «Комментарии читателей…»:

Комментариев пока нет, но вы можете стать первым

Комментарии читателей к статье ""

Обсуждения закрыты для данной страницы

Вывод комментариев

Отлично, мы вывели заголовки в зависимости от наличия или отсутствия комментариев, теперь логично вывести сами комментарии — за это отвечает функция wp_list_comments() . Функция по умолчанию заключает все комментарии в теги

  • , поэтому следует добавить обертку
      с присвоением класса.commentlist:

      wp_list_comments() принимает в себя массив аргументов, с помощью которых можно гибко настроить вывод комментариев. Например можно изменить размер аватара, текст ответа на комментарий и другие настройки, передав ключевое слово и значение:

      $args = array("avatar_size" => 64, // размер аватара 64*64px, по умолчанию 32 "reply_text" => "Ответить" // текст ответа на комментарий "callback" => "my_comments" // функция формирования внешнего вида комментария)

      Отдельного рассмотрения заслуживает параметр callback , который принимает значение имени пользовательской функции вывода комментария. С ее помощью можно гибко настроить внешний вид каждого комментария. Вот так выглядит стандартная функция вывода из файла comment-template.php:

    1. id="li-comment-">
      "); ?> %s says:"), get_comment_author_link()) ?>
      comment_approved == "0") : ?>
      $depth, "max_depth" => $args["max_depth"]))) ?>

      Проще всего взять данную функцию и править ее под себя, а потом вызвать как пользовательскую, прописав ее в файле comments.php или functions.php .

      После вывода списка комментариев можно изменять их внешний вид через стили CSS. Некоторые параметры wp_list_comments() дублируются в админке WP, вкладка Параметры → Обсуждение, в частности наличие древовидных комментариев, сортировка по дате и т.п.

      Форма отправки комментария

      Для добавления формы комментариев используется функция comment_form() . Добавим ее под список комментариев:

      Комментариев пока нет, но вы можете стать первым

      Комментарии читателей к статье ""

      1. 64, "reply_text" => "Ответить", "callback" => "my_comments"); wp_list_comments($args); ?>

      Обсуждения закрыты для данной страницы

      При таком вызове comment_form() загрузит стандартный код из файла WordPress comment-template.php . Функция принимает в себя два параметра:

      Comment_form($args, $post_id);

      • $args — массив настроек вывода формы
      • $post_id — id поста, к которому будет применена функция, по умолчанию текущий пост

      Давайте к примеру сделаем валидацию на HTML5 полям формы, добавим текстовые подсказки. Создадим массив $args для ввода нужных настроек:

      $args = array(); comment_form($args);

      В массив необходимо прописать ключи настроек:

      $args = array("fields" => apply_filters("comment_form_default_fields", $fields));

      Теперь нам необходимо заполнить переменную-массив $fields , которая включает в себя поля формы. Проще всего взять стандартный код WordPress из comment-template.php и немного его изменить:

      "

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

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

      " . "

      "); $args = array("fields" => apply_filters("comment_form_default_fields", $fields)); comment_form($args); ?>

      Здесь значения параметров author , email и url — html-код полей «Имя», «Почта» и «Сайт соответственно. Эти значения необходимо отредактировать.

      Для полей нам нужно добавить следующие атрибуты:

      • required — делает поля обязательным для заполнения, добавляем его для полей «Имя» и «Сайт»
      • placeholder — добавляет текстовую подсказку в поле
      • pattern="{3,}" для поля «Имя» — указываем имя буквами латинского или русского алфавита и длину не менее 3 символов
      • type="email" для поля «Почта» — тем самым мы добавим валидацию HTML5 электронной почты
      • autocomplete — включает автозаполнение для полей
      • type="url" для поля «Сайт»

      Не забудьте, что в старых браузерах новые атрибуты HTML5 работать не будут. Те браузеры, которые не понимают новые типы полей, будут просто выводить их как текстовые, т.е. .

      Вдобавок я для своего блога кое-где поменял местами теги, добавил классы для стилизации, в результате у меня получился такой код массива $fields:

      "

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

      "); ?>

      Мы изменили поля ввода данных. Теперь подредактируем саму форму комментариев

      " ?>

      Это стандартный код WordPress, я лишь немного видоизменил его — добавил текстовую подсказку и прописал дополнительный класс для стилизации.

      Вот что я в итоге получил с применением стилей CSS:

      Форма комментариев WordPress с использованием атрибутов HTML5

      Итог

      Напоследок скину свой получившийся код comments.php:

      читателей статьи ""

      • Оставьте первый комментарий - автор старался
      1. id="li-comment-">
        "); ?> %s пишет:"), get_comment_author_link()) ?>
        comment_approved == "0") : ?>
        $depth, "max_depth" => $args["max_depth"]))) ?>
        "Ответить", "callback" => "verstaka_comment"); wp_list_comments($args); ?>
      "

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

      "); $args = array("comment_notes_after" => "", "comment_field" => "

      ", "label_submit" => "Отправить", "fields" => apply_filters("comment_form_default_fields", $fields)); comment_form($args); ?>

      Обсуждения закрыты для данной страницы

      FAQ по комментариям

      Как выделить комментарии автора и пользователя?

      Иногда бывает очень удобно задать отдельный внешний вид для авторских комментариев, для этого есть даже специальные плагины. Однако можно обойтись без всяких плагинов — просто прописав стили для класса.bypostauthor в css-файле. Аналогично можно задать стили для пользовательских комментариев — .bypostuser:

      Как задать стили для древовидных комментариев?

      Для включения древовидных комментариев нужно зайти в админку WP, Параметры → Обсуждение → Разрешить древовидные комментарии. Теперь дочерние комментарии будут иметь древовидную структуру, им можно задать отдельные стили, например сделать отступы. Все что нужно — установить правила в css для списка с классом.children:

      Commentlist .children { padding: 0 0 0 40px; /* отступ слева для дочерних комментариев */ }

      Стили для четных и нечетных комментариев

      WordPress по умолчанию дает нечетным комментариям класс.even , четным.odd . Через эти классы легко задавать свои стили:

      Commentlist .even { /* стили для нечетных комментариев */ } .commentlist .odd { /* стили для четных комментариев */ }

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

      Очень легко — заходим на страницу написания поста, Настройки экрана → Обсуждения, под полем поста появляется блок Обсуждения, снять выделение пункта Разрешить комментарии.

      • При составлении собственного шаблона комментариев можно пользоваться файлами comments.php из стандартных и других платных и бесплатных тем WordPress
      • Альтернатива стандартным комментариям — сторонние плагины форм комментирования, например популярная DISQUS
      • Вполне возможно править код прямо в самом файле comment-template.php , однако в случае обновления WordPress весь код будет перезаписан — придется править снова
      • Помните — идеального шаблона комментариев не бывает

      Помощь проекту

      66 голосов, в среднем: 4,47 из 5)
  • error: Content is protected !!