Home » Движки сайтов и блогов » Древовидные комментарии в WordPress 2.7

Древовидные комментарии в WordPress 2.7

Этот пост я начал писать еще в конце прошлого года, вскоре после выхода Вордпресс 2.7. Тема оказалась сложнее, чем я думал, поэтому, в запланированное время я не успел с ней разобраться, забросил, и вернулся к ней только сейчас.

Пост основан на документе Migrating Plugins and Themes to 2.7/Enhanced Comment Display.

Comment Threading Наверняка, вы уже читали в половине блогов из своего RSS ридера о выходе новой версии Вордпресс 2.7. Поэтому, я не буду повторяться и перечислять новые возможности этой версии (если кто не читал, то вот ссылка на обзор). Я просто расскажу об одной из них — древовидных комментариях. Эта возможность давно напрашивалась и, вот теперь, в Вордпрессе можно использовать древовидные комментарии без установки дополнительных плагинов.

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

Совместимость с предыдущими версиями

Первое, что вам надо решить — нужна ли вам совместимость с предыдущими версиями Вордпресса? Если вы разрабатываете тему оформления для паблика, то ответ будет — “Безусловно да!”. Если вы хотите просто поправить тему оформления на своем блоге, чтобы отображались древовидные комментарии, то на совместимость можно забить. На всякий случай, просто сделайте копию старого файла comments.php (именно его мы будем менять).

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

Поместить весь код в comments.php — не лучшая идея. Вместо этого, лучше сделать два файла — с новым и старым кодом. Например, можно переименовать имеющийся файл comments.php в legacy.comments.php, а в comments.php поместить новый код.

Чтобы обеспечить использование comments.php или legacy.comments.php в зависимости от версии, в документации по Вордпрессу предлагается довольно хитрый способ — поместить следующий код в файл functions.php:

Я не сторонник создания лишних фильтров и предлагаю использовать другой вариант — новый код поместить в файл new.comments.php (старый в legacy.comments.php). А в файле comments.php написать такую очевидную конструкцию:

Проверка пароля

Поместите в начало нового comments.php этот код:

Эта проверка не сильно отличается от предыдущей версии — основное отличие в использовании функции post_password_required() вместо явной проверки куки.

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

Вот мы и добрались до главного — кода, который будет выводить комментарии в новом, древовидном формате. Чтобы было понятнее, рассмотрим старый код:

и заменяющий его новый:

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

Основные отличия:

  • Вместо глобальной переменной $comments используется функция have_comments().
  • Собственно вывод комментариев обеспечивает функция wp_list_comments(). Она же реализует древовидность.
  • Код для навигации, обеспечивающий постраничное разбиение комментариев

Как видите, код получился проще и логичнее — с точки зрения кода вывод комментариев стал похож на вывод постов.

Постраничная разбивка комментариев

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

Включать/выключать разбивку на страницы и задавать количество комментариев на странице можно в админ панели Вордпресса.

Поддержка JavaScript

Для поддержки древовидных комментариев необходимо подключить JavaScript в файле header.php, непосредственно перед вызовом wp_head():

В форме комментирования (между тегами <form> и </form>) необходимо вставить строку

которая вставит два скрытых (hidden) поля: comment_post_ID и comment_parent. Если в вашем шаблоне уже есть поле comment_post_ID, то его надо удалить. Поле для ввода комментария (textarea) должно иметь id=”comment”.

Для корректной работы ссылок на комментарии к посту (например, с главной страницы) и JavaScript, форма должна быть окружена <div id=”respond”></div>.

Вместо текста “Оставьте комментарий” лучше вставить что-то типа:

Вместо параметра %s будет подставлен ник комментатора, на комментарий которого вы отвечаете.

Наконец, после того, как вы кликнете на кнопку “Ответить” возле комментария и появится поле для комментирования, вы можете передумать. Чтобы отменить комментарий, вставьте такой код:

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

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

Если вы решите переделать свою тему, но у вас возникнут сложности, постараюсь помочь в комментариях, но учтите, что минимальное понимание html и php все же понадобится.