@tbalero

Как в древовидных комментариях — в конкретном дочернем комментарии отобразить ссылку на родительский комментарий?

На вордпресс сайте для отображения комментариев на страницах записей произвольного типа "movies":
- в шаблоне "single-movies.php" (для отдельной страницы записи типа "movies") используется функция <?php comments_template(); ?>
- создан кастомный файл comments.php, имеющий следующее содержание:
<?php if (comments_open()) { ?>
    <?php if (get_comments_number() == 0) { ?>
    <?php } else { ?>
    <ul class="commentlist">
      <?php
        function my_comment($comment, $args, $depth){
          $GLOBALS['comment'] = $comment; ?>
          <li <?php comment_class(); ?> id="li-comment-<?php comment_ID() ?>">
            <div id="comment-<?php comment_ID(); ?>">

              <div class="row comment_area">

                  <div class="comment_author_ava col-xs-1">
                      <span class="glyphicon glyphicon-user" aria-hidden="true"></span>
                  </div>

                  <div class="comment_content col-xs-11">
                      <div class="comment_author_name">
                        <?php printf(__('<span>%s</span>'), get_comment_author_link()) ?>
                      </div>

                      <?php if ($comment->comment_approved == '0') : ?>
                        <em><?php _e('Ваш комментарий ожидает модерации') ?></em>
                        <br>
                      <?php endif; ?>
                      <?php comment_text() ?>
                      <div class="reply">
                        <span class="date"><?php printf(__('%1$s, %2$s'), get_comment_date(),  get_comment_time()) ?></span> <?php comment_reply_link(array_merge( $args, array('depth' => $depth, 'max_depth' => $args['max_depth']))) ?>
                      </div>
                  </div>

              </div>

            </div>
      <?php }
        $args = array(
          'reply_text' => 'Ответить',
          'callback' => 'my_comment'
        );
        wp_list_comments($args);
      ?>
    </ul>
  <?php } ?>

  <?php
    $fields = array(
      'author' => '<p class="comment-form-author"><input type="text" id="author" name="author" class="author" value="' . esc_attr($commenter['comment_author']) . '" placeholder="Введите ваше имя" pattern="[A-Za-zА-Яа-я -.]{2,}" maxlength="45" autocomplete="on" tabindex="1" required' . $aria_req . '></p>',
      'email' => '<p class="comment-form-email"><input type="email" id="email" name="email" class="email" value="' . esc_attr($commenter['comment_author_email']) . '" placeholder="Введите ваш email" maxlength="90" autocomplete="on" tabindex="2" required' . $aria_req . '></p>'
    );
 
    $args = array(
      'comment_notes_before' => '',
      'comment_notes_after' => '',
      'title_reply'  => 'Добавить комментарий',
      'comment_field' => '<p class="comment-form-comment"><textarea id="comment" name="comment" class="comment-form" cols="45" rows="4" aria-required="true" placeholder="Напишите ваш комментарий" required></textarea></p>',
      'label_submit' => 'Отправить',
      'fields' => apply_filters('comment_form_default_fields', $fields)
    );
    comment_form($args);
  ?>

  <?php } else { ?>
  <h3>Обсуждения закрыты для данной страницы</h3>
  <?php }
?>

*В результате комментарии отображаются корректно
*В админке в настройках - разрешены древовидные (вложенные) комментарии

Вопрос: Как в древовидных комментариях - в конкретном дочернем комментарии отобразить ссылку на родительский комментарий?
*Чтобы ссылку на родительский комментарий отобразить в виде якоря в формате: site.ru/post-type/nazvanie-posta#comment-72 (Чтобы при клике на такую ссылку на текущей странице осуществлялся бы скролл к родительскому комментарию).

*Смысл заключается в том, чтобы затем через стили CSS прописать сдвиг только для дочерних комментариев не далее второго уровня, так, чтобы дочерние комментарии третьего уровня, четвертого уровня и т.д. отображались бы с таким же сдвигом вправо, что и комментарии второго уровня. И при этом, чтобы юзерам было бы понятно, к каком родительскому комментарию написан конкретный дочерний комментарий (для этого как раз и нужно в конкретном дочернем комментарии отображать ссылку на родительский комментарий - как, например, в комментариях ВКонтакте - *там эта ссылка отображается в виде имени юзера, которому адресован конкретный комментарий - в формате: "11 минут назад Алексею").
  • Вопрос задан
  • 400 просмотров
Пригласить эксперта
Ответы на вопрос 1
ilyachase
@ilyachase
web-developer
Судя по всему, $depth в функции my_comment отражает глубину комментария. Ориентируясь на нее, можно хранить id комментария предыдущей глубины, например, с использованием GLOBALS['last_comment_id'] и $GLOBALS['depth'], определенных до вызова comments_template().
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы