WordPress как на ладони
wordpress jino

comment_reply_link() WP 2.7.0

Выводит ссылку <a>, которая позволяет отвечать на комментарий. Тег используется в цикле комментариев, для каждого комментария.

Если подключен JavaScript comment-reply.js, то этот Тег шаблона будет передвигать форму комментирования под комментарий на который пользователь решил ответить.

comment_reply_link() предназначена для использования внутри цикла комментариев.

Работает на основе: get_comment_reply_link()
✈ 1 раз = 0.001392с = очень медленно | 50000 раз = 18.71с = медленно

Хуков нет.

Возвращает

Выводит на экран код ссылки.

Использование

<?php comment_reply_link( $args, $comment, $post ); ?>
$args(массив)
Различные параметры, влияющие на отображение ссылки.
По умолчанию: предустановки
$comment(число)
ID комментария на который будем отвечать.
По умолчанию: null
$post(число)
ID поста для которого показывается ссылка.
По умолчанию: null

Аргументы параметра $args

add_below(строка)
Название префикса для контейнера комментария. По умолчанию comment, означает что форма будет передвигаться под контейнер с атрибутом id="comment-23" (23 ID комментария на который отвечаем).
По умолчанию: 'comment'
respond_id(строка)
Значение атрибута id контейнера формы комментирования. Т.е. если указано respond, то по нажатию на ссылку блок с id="respond" будет передвигаться (это блок формы комментирования).
По умолчанию: 'respond'
reply_text(строка)
Текст ссылки.
По умолчанию: __('Reply')
login_text(строка)
Текст ссылки, который показывается когда для того чтобы оставить комментарий нужно зарегистрироваться.
По умолчанию: __('Log in to Reply')
depth(число)
Глубина комментариев для которых ссылка будет показана. Для древовидных комментариев. Если указать, например 3, то для комментария с глубиной вложенности 4 ссылка уже не будет отображаться.
По умолчанию: 0
before(строка)
Текст или html, которые нужно добавить перед ссылкой.
after(строка)
Текст или html, которые нужно добавить после ссылкой.
По умолчанию: array()

Примеры

#1 Ссылка для ответа на комментарий

Выведем ссылку для ответа на комментарий максимального уровня вложенности - 5, и изменим текст ссылки на "ответить на комментарий":

<?php
$args = array( 'reply_text' => "ответить на комментарий", 'depth' => 5);
comment_reply_link( $args );
?>

Выведет подобную ссылку:

<a class="comment-reply-link" 
	href="/function/comment_reply_link?replytocom=2881#respond" 
	onclick="return addComment.moveForm('comment-2881', '2881', 'respond', '631')">ответить на комментарий</a>

#2 Подключаем comment-reply.js

По клике на ссылку, которую выводит comment_reply_link() пользователя должно перекинуть к форме ответа на комментарий. Но если подключить скрипт comment-reply.js, то при клике на эту ссылку форма ответа на комментарий должна сама подвинуться под текущий комментарий.

Чтобы подключить скрипт comment-reply.js, который находится в файлах движка, нужно добавить такую строку в header.php:

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

Или лучше добавить в funcions.php такой код:

function enqueue_comment_reply() {
	if( is_singular() )
		wp_enqueue_script('comment-reply');
}
add_action( 'wp_enqueue_scripts', 'enqueue_comment_reply' );

#2.1 Подключаем comment-reply.js только где он нужен:

Второй пример немного упрощенный. Этот пример также подключает скрипт, но прежде чем его подключить проверяет действительно ли он нужен. В условии if проверяется: страница записи ли это (is_singular), и открыты ли комментарии для этой страницы (comments_open) и включена ли опция древовидных комментариев (get_option). Если все эти условия не соблюдаются, то логично, что этот скрипт не нужен, поэтому он не будет подключен:

function enqueue_comment_reply() {
	if( is_singular() && comments_open() && (get_option('thread_comments') == 1) ) 
		wp_enqueue_script('comment-reply');
}
add_action( 'wp_enqueue_scripts', 'enqueue_comment_reply' );

Код comment reply link: wp-includes/comment-template.php WP 4.8.2

<?php
function comment_reply_link($args = array(), $comment = null, $post = null) {
	echo get_comment_reply_link($args, $comment, $post);
}

Cвязанные функции

Из раздела: Циклы комментариев

comment_reply_link 32 комментария
Полезные 2 Вопросы 2 Все
  • Владимир cайт: seobook.info

    Подскажите, а как-нибудь закрыть эту ссылочку в nofollow можно?

    Я понял, что не один из аргументов не даёт возможности вывести rel="nofollow" в <a>.

    Ответить5.7 лет назад #
    • Владимир cайт: seobook.info

      Решение нашёл.

      Может кому-то ещё пригодится.

      Задаём ссылки выводимой comment_reply_link атрибут rel="nofollow"

      В functions.php темы добавить:

      function custom_comment_reply_link_nofollow( $link ) {
      	global $user_ID;
      
      	if ( get_option( 'comment_registration' ) && ! $user_ID )
      		return $link;
      	else
      		return str_replace( '")\'>', '")\' rel=\'nofollow\'>', $link );
      }
      add_filter( 'comment_reply_link', 'custom_comment_reply_link_nofollow' );

      Работает.)

      Нашёл здесь http://diythemes.com/thesis/rtfm/add-relnofollow-to-comment-reply-links/

      2
      Ответить5.7 лет назад #
      • Kama4464

        Спасибо что не забыли и поделились решением. Возможно кому-то пригодится!

        Ответить5.7 лет назад #
    • Максим

      Я например вообще не стал заморачиваться, скопировал функцию comment_form() с ядра ВП, переименовал ее в new_comment_form() и закинул в свой functions.php и вызвал вместо стандартной функции в файле comments.php. Теперь я могу извращаться над этой формой как хочу, классы к ссылкам прописывать, атрибуты и т.д.

      Ответить3.1 года назад #
      • Kama4464

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

        Ответить3.1 года назад #
  • Евгений cайт: motogp-news.ru @

    А не поможете ли Вы мне, пожалуйста? Хочу сделать кнопку "ответить" после комментарию, вставляю в comments.php, но ничего не происходит. sad С чем это может быть связано? Может в functions.php нужно что-то добавить? search Тема написана самим с чистого листа. Если поможете, буду вам безгранично благодарен. good

    Ответить5.1 лет назад #
  • Максим

    Кстати, на счет comment-reply.js. А возможно ли воспользоваться этим скриптом не по назначению laugh ? Есть ли возможность, например у какой нибудь ссылки "Оставить комментарий", добавить ей атрибут onclick"..." и чтоб форма подъехала к этой ссылке или диву например? KAMA, сори за извращение над ВП smile , но так как форма по умолчанию находится всегда внизу под всеми комментариями, то я, например, в качестве удобства для пользователя, разместил бы ссылку над комментариями - "Оставить комментарий" и для красоты бы сделал чтоб форма снизу подъезжала к этой ссылке smile Но я не владею JS к сожалению no Если не трудно, заморочитесь кто нибудь good

    Ответить3.1 года назад #
    • Kama4464

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

      Это проще сделать используя jQuery. Буквально одной строкой можно, при условии что jQuery подключается уже:

      <a href="javascript:void(0)" onclick="jQuery(this).after( jQuery('#respond') );">Оставить комментарий</a>

      тут #respond - это селектор (атрибут id) блока с формой комментирования. Возможно его нужно будет изменить под шаблон.

      П.С. Добавил себе на сайт такую кнопку. Правда сделал еще проверку: добавлять кнопку если комментариев больше 10. Спасибо за комментарий! thank_you

      1
      Ответить3.1 года назад #
      • Максим

        И Вам спасибо за скрипт thank_you

        Ответить3.1 года назад #
      • Alex

        Что-то я совсем запутался. В начале формы комментариев я ставлю якорь из серии #respond, но как правильно осуществить переход на этот якорь ??? wacko

        Заранее извиняюсь, если не вижу и не понимаю очевидных вещей sorry

        Ответить3 года назад #
        • Kama4464

          В коде такой код:

          <div id="respond"><div>

          А ссылка на этот якорь будет такой

          <a href="#respond">Текст</a>
          Ответить3 года назад #
          • Alex
            В коде такой код: ``` <div id="respond"><div> ```
            ага, есть такое в файле comments.php. Про установку якоря тоже ясно. за кнопку ответить отвечает следующий код: ``` <div class="reply"> <?php comment_reply_link( array_merge( $args, array('depth' => $depth, 'max_depth' => $args['max_depth'], 'reply_text' => 'Ответить')) ) ?> </div> ``` Никак не могу понять, как правильно при клике отправить на этот якорь wacko
            Ответить3 года назад #
            • Kama4464

              У вас ссылка Ответить появляется? Что-то у вас не то... Там все просто совсем:

              1. ставите <div id="respond"><div> в HTML
              2. Вставляете в комментарии comment_reply_link()
                Все! Теперь по клику на ссылку, которую вывела функция comment_reply_link(), пользвателя должно перекинуть к id="respond".

              Вообще comment_reply_link() рассчитана на совместное использование вместе со скриптом comment-reply.js. Прочитайте: http://wp-kama.ru/function/comment_reply_link

              Ответить3 года назад #
              • Alex

                Все равно ничего не понимаю. Это не разжевывание моего вопроса: http://wp-kama.ru/function/comment_reply_link?all_comments#comment-7429 ???

                Функцию вывода комментариев брал отсюда http://wp-kama.ru/function/wp_list_comments

                Ответить3 года назад #
                • Desome cайт: desome.net

                  Вам же написали в первом же примере есть

                  <div class="reply">
                  <?php comment_reply_link( array_merge( $args, array('depth' => $depth, 'max_depth' => $args['max_depth'], 'reply_text' => '<a href="#respond">Ответить</a>')) ) ?>
                  </div>
                  Ответить3 года назад #
                  • Alex

                    Извиняюсь. Видимо не заметил или же на тот момент просто пост не был обновлен.

                    Добавил в функцию якорь для перехода по "ответить", подключил comment-reply.js двумя предложенными способами через файл функций - переадрессации на форму комментариев не появилось (((

                    Ответить3 года назад #
                    • Desome cайт: desome.net

                      У формы комментариев name="respond"

                      -1
                      Ответить3 года назад #
  • Alex

    Desome, ничего не понял

    У формы комментариев name="respond"

    форма комментариев заключена в див

    <div id="respond">тут поля из формы и кнопки<div>

    Я подставил в кнопку ответа ссылку на якорь

    '<a href="#respond">Ответить</a>'

    примем после добавления этой ссылки у меня почему-то задвоилась кнопка ответа. Подключил скрипт в файле с функция (тестировал все варианты из поста), но все равно при клике на кнопку "ответить пользователю" меня не перебрасывает на форму комментариев. Тестировал в ФФ и Хроме

    Ответить3 года назад #
    • Kama4464

      Desome, не так понял видимо. То что вам нужно, если я правильно понял - переход к якорю - это базовая HTML функция и просто обязана работать! У вас похоже проблема какая-то. Может скрипт подъема формы к кнопке работает не правильно: форму не поднимает и событие клика отменяет?

      Ответить3 года назад #
      • Alex

        В этом то все и дело, что у меня форма никуда не поднимается. В моем исходном шаблоне нет подключения comment-reply.js

        если прописать так:

        <div class="reply">
        <script type="text/javascript" src="/wp-includes/js/comment-reply.js"></script>
        <?php comment_reply_link( array_merge( $args, array('depth' => $depth, 'max_depth' => $args['max_depth'], 'reply_text' => 'Ответить')) ) ?>
        </div>

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

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

        Пример работы можно посмотреть тут

        Ответить3 года назад #
        • Kama4464

          У вас на странице два раза указан id="respond": все комментарии обернуты в такой div и сама форма комментирвоания... Кроме того, выведете кнопку ответить обычным HTML без comment_reply_link() она выводит сложную ссылку... Вот так:

          <a class="comment-reply-link" href="#respond">Ответить</a>
          Ответить3 года назад #
          • Alex
            У вас на странице два раза указан id="respond"
            shock искал по исходному коду, находится только один раз, и обернута только форма комментариев
            Кроме того, выведете кнопку ответить обычным HTML без comment_reply_link() она выводит сложную ссылку...
            Заменил. Но в таком случае не передается на форму комментариев имя пользователя, которому мы отвечаем. sorry
            1
            Ответить3 года назад #
          • Alex

            Сегодня поразмыслил и понял, что если использовать ссылку на кнопке типа

            <a class="comment-reply-link" href="#respond">Ответить</a>

            то передать имя автора и сохранить древовидность не удастся, т.к. из ссылки пропадает элемент ?replytocom=N

            1
            Ответить3 года назад #
  • Тимур, а как можно сделать чтобы при ответе на комментарий в самом комментарии (когда он уже был добавлен) выводилось что то вроде: "Вася ответил пользователю Саше" или допустим что то вроде: "ответ на комментарий №7".(?) есть ли какая то спецфункция? И еще один вопрос, как cделать чтобы выводилось имя того кому отвечаешь - когда подъезжает поле комментировать при ответе рядышком со ссылкой "Отменить ответ" (cancel_get-comment-reply), чтобы было что-то примерно так: "Ответ для Васи" и ниже "Отменить ответ".

    1
    Ответить3 года назад #
    • Kama4464

      Вообще для всего этого есть визуально представление - древовидные комментарии...

      Чтобы вывести имя комментатора на коммента которого ответили используйте такой код:

      $current_comment_id = 7755;
      $comment = get_comment( $current_comment_id )->comment_author;
      // Вернет: Евгений

      как cделать чтобы выводилось имя того кому отвечаешь

      Тут надо на jQuery код написать.

      1
      Ответить3 года назад #
      • Ясно. Спасибо. Просто сделал такой дизайн где древо смотрится не очень. Наверно будет проще переделать немного, чем мучится потом, еще раз спасибо. yes

        Ответить3 года назад #
  • Web-Blog21 cайт: web-blog.su

    Спасибо за статью, пригодилось! beach

    Ответить1.9 года назад #
  • Leon1010 cайт: i-leon.ru

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

    Мне нужно, чтобы при ответе на комментарий, часть формы комментирования, которая заключена в div id="hide-from-respond" скрывалась (точнее убиралась из html кода, чтобы данные из нее не оправлялись), а при отмене ответа, появлялась там снова.

    И второй вопрос:
    Функция comment_reply_link генерирует ссылку с параметром aria-label="Комментарий к записи Сергей". Но, при ответе на комментарий текст в div id="reply-title" не заменяется на этот. Так и должно быть? Если да, то как сделать, чтобы менялась?

    Пример страницы: http://wikigrib.ru/raspoznavaniye-gribov-35227/

    1
  • alex

    Как удалить эту ссылку?

  • Алексей

    Благодарю за хороший материал. Подключил скрипт и все заработало сразу! ok

    Ответитьмесяц назад #

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

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