WordPress: подключаем comment-reply.js правильно

С появлением в WordPress 2.7 древовидных комментариев большинство тем содержат следующую строку в файле header.php:

<?php if (is_singular()) wp_enqueue_script('comment-reply'); ?>

Этот код подключает скрипт comment-reply.js на статической странице или странице поста. Скрипт выполняет простую функцию – перемещает форму добавления комментария под комментарий, у которого мы кликнули на ссылку “ответить”.

Следующий способ подключения этого скрипта более рациональный:

<?php if (is_singular() AND comments_open() AND (get_option('thread_comments') == 1)) wp_enqueue_script('comment-reply'); ?>

Данный код проверяет: какой тип страницы открыт, разрешены ли у текущей страницы комментарии и активирована ли опция древовидных комментариев. Если все 3 условия выполняются, то скрипт подключается.

Таким образом, скрипт comment-reply.js не будет подключен в тех случаях, когда он совсем не нужен.

Комментарии (12)

  1. 22 мая 2014 г. в 10:08

    Дмитрий, здравствуйте! Не смотря на давнюю публикацию Вашей статьи, хочу задать вопрос, так как ничего подходящего в списке Ваших статей не нашел. Как у Вас на сайте реализованы древовидные комментарии? Моя тема изначально не поддерживает функцию «ответить» в комментариях. Начал искать способ её подключения и в интернете наткнулся на негативные статьи в пользу древовидных комментариев. Дело в том, что они индексируются поисковыми системами даже при отключении Replytocom в файле robots.txt. Все советуют подключить плагин, но я пока не хочу этого делать. Разве нет оптимального способа подключить древовидные комментарии с помощью скрипта без лишних проблем? Рассчитываю на Ваш ответ. Заранее спасибо!

    1. У меня они реализованы стандартным способом:

      1. В админке включена соответствующая опция.
      2. Написаны стили для сдвига комментария отвечающего.
      3. Код из статьи.
      4. Код в шаблоне комментария для ссылки “ответить”.

      Дело в том, что они индексируются поисковыми системами даже при отключении Replytocom в файле robots.txt.

      Если все указано правильно, то не должны индексироваться. У меня не индексируются.

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

  2. 9 июля 2014 г. в 18:39

    Здравствуйте, Дмитрий. Подскажите, пожалуйста, у Вас при нажатии кнопки Ответить окно для ввода комментария открывается внутри ветки. Это реализовано с помощью плагина или кода в статье?.
    И еще. Те коды, которые Вы указали в статье, прописаны именно ф файле header.php? У меня такого нет (я имею в виду код).

    1. Вставила код. Теперь нажимая Ответить, ничего не происходит, но видно, что очеь хочет :). одскажите, пожалуйста, Вы пишите, что вставили код в шаблоне для кнопки Ответить. Что это за код? Нашла это , но при вставке (вслепую) на сайте выходит ошибка в области комментариев, которая ссылается на файл коммент-темплате.

      1. Вот код кнопки “ответить”:

        <?php if (comments_open() AND (get_option('thread_comments') == 1) AND ($depth != $args['max_depth'])) { ?>
        	<?php comment_reply_link(array_merge( $args, array('add_below' => 'div-comment', 'depth' => $depth, 'max_depth' => $args['max_depth']))) ?>
        <?php } ?>
        
        1. Спасибо. Будем разбираться…

        2. Алексей
          23 июля 2021 г. в 15:37 / ответ на коммент Dimox

          Спасибо!

  3. 4 марта 2016 г. в 20:03

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

  4. Aleksandr
    2 декабря 2016 г. в 19:11

    Привет, очень полезная функция, подскажи, у меня иерархия комментариев ограничена 2, при ответе форма комментария исчезает, можно как то закрепить одну внизу, а там где ответ будет всплывать новая форма?

    Заранее спасибо.

  5. Василий
    23 марта 2017 г. в 23:44

    А как его подключить так, чтобы не отображалась версия WordPress при этом?

    1. 24 марта 2017 г. в 09:59 / ответ на коммент Василий

      Добавьте в functions.php:

      function remove_wp_ver_js( $src ) {
      	if ( strpos( $src, 'ver=' . get_bloginfo( 'version' ) ) )
      		$src = remove_query_arg( 'ver', $src );
      	return $src;
      }
      add_filter( 'script_loader_src', 'remove_wp_ver_js', 9999 );
      

Ваш комментарий

Жирный текст

Ссылка

Цитата

Внутристрочный код

CSS-код

HTML-код

JavaScript-код

PHP-код