Пользовательский вывод комментариев

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

Сегодняшняя статья посвящена выводу комментариев 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). Расположен он файле /wp-includes/comment-template.php. А поскольку вносить изменения в файлы из папки wp-includes нельзя, то в данном случае изменить стили отображения комментариев не получится, пока мы не прейдем ко второму варианту.

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

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

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

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

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

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

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

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

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

comment_reply_link() – выводит ссылку “Ответить”;

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

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

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

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

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

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

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

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

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

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

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

3. Вставьте скопированный код в файл functions.php вашего шаблона.

4. Измените название функции, например на custom_comment и добавьте в начале функции строку $GLOBALS[‘comment’] = $comment;

5. В файле comments.php вашего шаблона найдите вызов функции wp_list_comments() и добавьте параметры type=comment и callback=custom_comment.

Должно получиться вот так:

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

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

Напишите, пожалуйста, является ли данная информация для вас новой и доступно ли она изложена в данной статье? Нужны ли какие-то дополнительные объяснения?

Спасибо за внимание!

Красивых вам комментариев!

Понравилась статья? Не забудьте поделиться с друзьями и коллегами:

Вы можете пропустить чтение записи и оставить комментарий. Размещение ссылок запрещено.

12 комментариев к записи “Пользовательский вывод комментариев”

  1. Анатолий

    Я себе на одном блоге хочу сделать круглые аватарки, например :)

  2. Дима

    подскажите как изменить или удалить в форме комментирования надпись – добавить комментарий. У Вас – оставить комментарий.

    • Алексей Ершов

      У меня эта надпись выводится в файле /wp-content/themes/название_шаблона/comments.php с помощь функции comment_form_title. Вот так:

      Чтобы найти нужный фрагмент кода, можете проинспектировать элемент “Добавить комментарий” и посмотреть id блока в котором находится надпись. Например, у меня это id=”respond”. И потом выполните поиск по всем файла проекта по этому идентификатору: id=”respond”.

  3. Любовь Родимкина

    Ваша статья мне ОЧЕНЬ помогла!
    Не было в стандартной теме даты и времени комментария. Была та самая функция с колбэком. Я скопировала из стандартной функции вывода комментария вывод даты/времени, и вставила после вывода текста.
    Стало выводится, но в формате ссылки, нажимая на которую, наверху экрана становится следующий комментарий.
    Но лучше уж так, чем совсем без даты…

  4. Андрей

    У меня сайтбар слетел.. Восстановил как было, со второго попытки вроде заработало. Делайте бэкап перед тем как ковырять код!

  5. Юрий

    Спасибо, Алексей, огромное за полезную статью- всё получилось с первого раза. Я менял вывод стандартных кнопок «Ответить», которые выводятся через replytocom и создают кучу дублей тегом .
    Оказалось, что комментарии у меня выводятся через comment-template.php и, чтобы не редактировать каждый раз этот файл при обновлении WordPress решил сделать вывод комментариев через файлы темы. И вот тут начались проблемы… Несколько вечеров убил пока не нашел в поиске вашу статью- всё просто и понятно описано. Спасибо ещё раз!

    • Алексей Ершов

      Спасибо и Вам, Юрий, за отзыв. Рад, что статья оказалось полезной. Успехов в Вашем творчестве!

  6. Елена

    Алексей, очень подробная и качественная статья! Если я когда-нибудь решусь сделать что-то подобное на своём сайте, обязательно буду следовать этой инструкции. А пока не могу разобраться со своими баранами, которые как раз с комментариями и связаны. Может быть, вы сможете дать какой-то совет, раз так глубоко разбираетесь в этой теме?
    Дело в том, что я недавно столкнулась со странной проблемой. После установки новой версии WordPress при вводе комментария не высвечивается фраза премодерации о том, что комментарий скоро будет одобрен, а человека перебрасывает на эту же страницу, но без каких-либо сообщений от сайта (при этом страница перезагружается, хотя ранее просто появлялся коммент с статусе модерации). Раньше всё работало, но в какой момент произошла эта ошибка, сложно отследить — возможно, она появилась даже раньше обновления CMS. Откатила версию вордпресс — безрезультатно. Как вы думаете, в чём в этом случае может быть корень зла? Если честно, не знаю, что делать. Буду благодарна за любые советы.

  7. Дмитрий

    Добрый день, а как сделать вывод двух блоков независимых комментариев в одном посте? Спасибо

  8. Elena

    И вновь я возвращаюсь на Ваш замечательный сайт) (Подписана)
    У меня такая проблемка: перелинковка статей отражается в комментариях: prntscr.com/854gjl, т.е — ВП КАЖДУЮ ссылку из одной статьи на другую воспринимает, как коммент.

    Живых комментариев там пока нет, сайт ещё не проиндексирован.

    Вопрос: А КАК убрать подобное?

    Буду благодарна за ответ.

    (Шаблон купила готовый с установкой на хостинг, ВП только постингаю и пока совсем в нём не разбираюсь, я — контенщик.)

  9. Elena

    Не нашла, куда в тему написать свой вопросец)) пишу сюда, сорри.

    5 дней назад открыла сайт для индексации поисковиками и… полетели мне такие реги от “пользователей” на почту с одноразовых почтовых ящиков:

    На вашем сайте «Мой сайт» зарегистрирован новый пользователь:

    От кого: wordpress@мой сайт.ru
    Имя пользователя: LowellPaschke5
    E-mail: veronaliriano@spambog.ru

    Подскажите пожалуйста:

    1. Для ЧЕГО спамеры (или боты?) это делают (поскольку обратных линков в консоли я не обнаружила)

    2. Как избавиться от подобных псевдорегистраций?

  10. Андрей

    Спасибо за статью.

    Каким образом можно добавить дополнительную функцию в custom_comment? Например, добавить статус автора, который он укажет в своем личном кабинете.

Оставить комментарий

Для размещения кода в комментарии используйте теги <pre> </pre>, например:


Подписаться, не комментируя