Как сделать: древовидные комментарии в WordPress 2.7

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

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

Проверка открытия файла напрямую, в моем блоге эти строки выглядели вот так:

	if ('comments.php' == basename($_SERVER['SCRIPT_FILENAME']))
		die ('Please do not load this page directly. Thanks!');

Их необходимо заменить на следующие:

if (!empty($_SERVER['SCRIPT_FILENAME']) && 'comments.php' == basename($_SERVER['SCRIPT_FILENAME']))
	die ('Пожалуйста, не загружайте этот файл напрямую. Спасибо!');

Далее проверяем запись на защиту паролем. У меня строчки которые проверяли закрыты ли комментарии паролем, выглядели вот так:

post_password)) { // if there's a password
            if ($_COOKIE['wp-postpass_' . COOKIEHASH] != $post->post_password) {  // and it doesn't match the cookie ?>
	

Запись закрыта паролем. Введите пароль для просмотра комментариев.

Эти строки необходимо заменить на следующий код:

if ( post_password_required() ) {
	echo '

Запись закрыта паролем Введите пароль для просмотра комментариев.

'; return; }

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


	
  1. id="comment-">

    в #

    comment_approved == '0') : ?> Ваш комментарий ожидает проверки модератором.
comment_status) : ?>

Комментирование закрыто.

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

if ( have_comments() ) : ?>

comment_status) : // If comments are open, but there are no comments. else : // comments are closed endif; endif;

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

Продолжим наше нелегкое дело, для правильной работы древовидных комментариев WordPress 2.7, нам необходимо вызывать Java-скрипт, для этого открываем файл header.php и перед строкой wp_head() вставляем строку:

if ( is_singular() ) wp_enqueue_script( 'comment-reply' );

К форме комментариев, после полей Имя, E-Mail, Сайт, добавляем еще одну функцию, которая необходима для правильной работы комментариев:

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

, это необходимо, для правильного отображения формы комментирования, когда человек отвечает на чей-то комментарий.

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

Прямо под этой строчкой, добавьте еще несколько, которые позволят отказаться от ответа на комментарий:

< ?php cancel_comment_reply_link() ?>

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

Я очень надеюсь, что у вас все получилось, если не получилось, обращайтесь, постараюсь помочь.

Если кто-то заметил ошибки в коде или неточности, жду вас в комментариях.

Ссылки по теме: 1,2.

Комментарии: 19Напишите свой комментарий!

  1. Александр Анатольевич Написал(а):

    В закладки однозначно. Как будет много комментариев, так и сделаю.
    Спасибо.

  2. donchenko (Dmitriy Donchenko) Написал(а):

    Как сделать: древовидные комментарии в WordPress 2.7: Сегодня я попытаюсь рассказать о том, что необходимо сдела.. http://tinyurl.com/6a5gga

  3. seezer Написал(а):

    Спасибо. Ваш сайт мне очень помог :).

    А если серьезнее быть, то я ловлю себя на мысли, что все чаще Ваши посты попадают в мой del.icio.us аккаунт — много интересного. Даже то, что знал раньше и то «закладываю». Вот только если все станут в WP такие умные, то как потом «по мелочам подрабатывать» с настройкой WP? :) Аж страшно становится… :)

  4. Nick Cherry Написал(а):

    В очередной раз пост о правке кода вместо простой установки плагина (wordpress-thread-comment). Может в этом есть какой-то скрытый смысл, которого я уловить не могу?

  5. Dmitriy Donchenko Написал(а):

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

    Для работы плагина, если не ошибаюсь, тоже ведь нужно модифицировать comments.php?

  6. Nick Cherry Написал(а):

    Ничего себе «встроена», если код переписывать надо.
    Так, вообще-то, можно и все плагины заменить. :)

    Насчет правки comments.php при устновке плагина — вроде бы ничего не требуется. После установки появляется дополнительный пункт в «настройках» — там можно поправить, если нужно.
    Все понаслышке — плагин не устанавливал. Древовидные комментарии имеет смысл ставить, если число комментариев к записи превышает 50. А у меня максимум пара десятков набирается.

  7. Кукушкин Илья Написал(а):

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

  8. Павел Власов Написал(а):

    Первая замена несущественна.

  9. Dmitriy Donchenko Написал(а):

    Может и не существенна, но она присутствует в инструкции по переходу на WordPress 2.7, а раз она там есть, значит так надо!

  10. Арбен Написал(а):

    Спасибо! Помогло. только как теперь номера комментариев сделать?

  11. Кукушкин Илья Написал(а):

    Дмитрий, поясните, пожалуйста, по точнее:
    //Текст перед формой комментирования “Оставьте комментарий”
    //или “Оставить комментарий” заменяем на функцию:

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

  12. Dmitriy Donchenko Написал(а):

    Нужно заменить текст который называется «Оставить комментарий«, а какая еще может быть форма, в топике о комментировании? Конечно же форма комментариев.

  13. Кукушкин Илья Написал(а):

    Большое спасибо, Дмитрий — все заработало, но с небольшой оговоркой. Оговорка: функция comment_form_title работает (подгружает имя комментатора) только при отсутствии cancel_comment_reply_link.
    А функция cancel_comment_reply_link в одиночку вполне достаточна (переносит форму к нужном комменту и дает возможность отмены). Хотя возможно, как Вы и говорите, это только в моем конкретном случае (WP 2.7 Lecactus, Revolution Code Blue theme и слабые познания в PHP).
    И еще должна быть обязательна включена функция вложенных комментариев в настройках самого WP, иначе ничего не заработает.
    Вы молодец, что все это расписали. Тема очень актуальная, так как судя по другим источникам существующие плагины для древовидных комментариев могут работать в 2.7 криво. Везде говорят использовать встроенную возможность, а как конкретно сделать не описано.

  14. Юрий Написал(а):

    Все таки можно совместить comment_form_title(‘Reply’, ‘Reply to %s’) и cancel_comment_reply_link() ???

  15. Максим Написал(а):

    Огромное спасибо автору за статью! я новичок в этом деле, долго искал и парился как осуществить такую затею.

  16. Дмитрий Написал(а):

    В результате третьего пункта, ошибка:
    Parse error: syntax error, unexpected T_ELSE
    Строка:

    Что сделать, чтобы исправить ее?

  17. Dmitriy Donchenko Написал(а):

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

  18. Sergey Написал(а):

    Простите за глупый вопрос, но можно ли както <div id="cancel-comment-reply">
    small>< ?php cancel_comment_reply_link() ?></small></div> заменить на кнопку, выполняющую теже действия?

  19. Sergey Написал(а):

    И заодно… Как можно при нажатии на кнопку "ответ" скрыть ее?

Оставьте комментарий Ваш шанс быть услышанным!