Собственное оформление комментариев в WordPress

Владимир | | PHP, Web дизайн, WordPress.

wordpress comments

Вы, конечно, знаете, что новые версии WordPress поддерживают древовидные комментарии.

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

В идеале разработчик темы WordPress должен использовать только параметры функции wp_list_comments (выводит список комментариев) и CSS стили.

Но идеальных вещей не существует в природе и WordPress – не исключение 🙂

В общем, стандартное оформление комментариев содержит несколько очень неприятных недостатков.

Например.

После имени комментатора выводится слово says:, которое нельзя изменить с помощью параметров wp_list_comments. Хотя, текст ссылки Reply можно изменить с помощью этой функции

wp_list_comments(array('reply_text'=>'Ответить'));

Вывод даты имеет фиксированный формат, что-то вроде сентября 7, 2009 at 9:29 am

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

Проблема заключается в том, что эти настройки прописаны в файле wp-includes/comment-templates.php. Т.е. если мы внесем в него изменения, они будут перезаписаны после очередного обновления движка, которые, кстати, появляются довольно часто.

Кстати, строка 1226 в файле wp-includes/comment-templates.php выглядит так:

<?php printf(__('<cite class="fn">%s</cite> <span class="says">says:</span>'), get_comment_author_link()) ?>

Видите, мы может изменить оформление слова says: (с помощью CSS класса says), но не можем изменить сам текст.

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

1) В файле comments.php вашей темы в параметре callback функции wp_list_comments указываем имя функции, которую нужно использовать для вывода комментариев.

wp_list_comments('type=comment&callback=mytheme_comment');

В данном случае это mytheme_comment.

2) Создаем саму функцию. Она должна находиться в файл functions.php вашей темы.

Заново писать всю функцию целиком нет никакого смысла (разве что вы хотите сделать что-то неповторимое 🙂 ). Лучше использовать готовый шаблон

Он полностью совпадает со стандартным выводом комментариев в WP.
Теперь можно немного его подправить.

Примечание. Почитать о форматировании дат можно здесь.

У меня получилось примерно следующее.

Строка с форматами даты и времени.

<div class="comment-meta commentmetadata"><a href="<?php echo htmlspecialchars( get_comment_link( $comment->comment_ID ) ) ?>"><?php printf(__('%1$s в %2$s'), get_comment_date('j F Y'),  get_comment_time('G:i')) ?></a><?php edit_comment_link(__('(Edit)'),'  ','') ?></div>

Слово says: я просто удалил.

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

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

В общем, тщательно тестируйте все ваши нововведения.

Удачи!

Интересно почитать

Разработка сайтов в Минске. Студия веб-дизайна в Минске.

  • Как вывести количество оставленных комментариев для каждого комментатора (возле его ника).

    • Есть плагин Show Top Commentators, который выводит список самых активных комментаторов.
      В его исходниках есть нужный запрос (который подсчитывает количество комментариев, оставленных каждым из посетителей).
      К этому запросу нужно добавить условие (имя комментатора) и получите готовое решение.

  • Как вывести количество оставленных комментариев для каждого комментатора (возле его ника).

    • Есть плагин Show Top Commentators, который выводит список самых активных комментаторов.
      В его исходниках есть нужный запрос (который подсчитывает количество комментариев, оставленных каждым из посетителей).
      К этому запросу нужно добавить условие (имя комментатора) и получите готовое решение.

  • а чем английская версия WordPress отличается от обычной? в чем ее оригинальность?

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

  • а чем английская версия WordPress отличается от обычной? в чем ее оригинальность?

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

  • У меня шаблон сломался преусердствовал(

    • Верните функцию в исходное состояние (можно взять из дистрибутива WP).

  • У меня шаблон сломался преусердствовал(

    • Верните функцию в исходное состояние (можно взять из дистрибутива WP).

  • А у меня после установки WP 2.9 почему то форма для комментариев не имеет полей для вставки имени, мыла и урла или от шаблона тоже многое зависит?

    • А вы случайно в админку не залогинились?
      Для администраторов эти поля не отображаются.

  • А у меня после установки WP 2.9 почему то форма для комментариев не имеет полей для вставки имени, мыла и урла или от шаблона тоже многое зависит?

    • А вы случайно в админку не залогинились?
      Для администраторов эти поля не отображаются.

  • Спасибо за подсказку, я как то сразу до этого и не додумалась)

  • Спасибо за подсказку, я как то сразу до этого и не додумалась)

  • aleksey8118

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

  • aleksey8118

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

  • Извините если не в тему, но уже давно не могу ответ на свой вопрос, может вы мне поможете? ситуация следующая:
    Столкнулся с такой задачей и надеюсь получить совет на этом сайте
    Ситуация такая: есть сайт о кино в котором выкладываются анонсы фильмов и на некоторые из них еще и рецензии.
    Можно ли сделать так, чтобы на те записи у которых есть и анонс и рецензия, были объединенные комментарии, потому что када зритель заходит и видет инфу о фильме комментирует ее, в одной из записей фильма(например в анонсе) и не видет комментариев к этому же фильму из другой темы (например из рецензии)
    Есть ли решение этой задачи?

    • Я правильно понял, что речь идет о WordPress?
      Что представляют собой анонсы и рецензии? Это посты?
      Если да, то простого способа объединения не существует. Анонсы и рецензии должны быть связаны, например, с помощью мета-данных.

      На практике это выглядит так. Создаете анонс и в нем (в блоке с дополнительными полями) указываете перечень рецензий (их id).

      Тогда, используя эти id можно получить соответствующие комментарии. Их вывод, естественно, потребует переделки шаблона.

  • Test

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

  • Мучалась целый день, хотела придать красивое оформление к комментариям, но не получилось. Благодаря этому посту, уже есть представления как это сделать. 

  • Maxim

    Спасибо, отличный материал!