Настройка комментариев на сайте WordPress

Сайтостроение WordSmall

Пропустим часть объяснения о пользы или необходимости комментариев на сайте, а также что они из себя в целом представляют. Это, по сути, должно быть ясным без кучи лишних слов. На данном этапе нас интересует настройка WordPress комментарий. Основную часть статьи займут технические моменты или, другими словами, хаки. Исходя из этого код формирования ваших комментарий должен быть расположен в теме файла functions.php для последующего его редактирования.

Дата комментария: точное время отправки

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

<time datetime="<?php comment_date('Y-m-d'); ?>"><?php comment_date(get_option('date_format')); ?></time>

Она будет расположена в файле functions.php. Все что нам остается так это заменить ее на следующею:

<time datetime="<?php comment_time( 'c' ); ?>">
    <?php printf( __( '%1$s at %2$s' ), get_comment_date( '', $comment ), get_comment_time() ); ?>
</time>

Кнопка в комментариях «ответ по нику»

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

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

//Ответ по нику
$(document).ready(function() {
//класс блока, в котором расположена кнопка "ответить"
$('.reply').click(function() {
//заменить класс блока .author на тот, в котором располежена функция вывода автора
var atname = $(this).parent().find('.author').text();
$("#comment").attr("value","<b>" + atname + "</b>, ").focus();
});
//После нажатия "отменить ответ" оставить пустое поле ввода
$('#cancel-comment-reply-link').click(function() {
$("#comment").attr("value",'');
});
});
//end

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

К примеру, функция автора (ник) обернутая в блок с классом как в показе скрипта.

<div class="author"><?php comment_author(); ?></div>

Таким же макаром кнопка ответа в комментариях.

<div class="reply">
<?php comment_reply_link(array_merge($args, array('depth' => $depth, 'max_depth' => $args['max_depth'], 'reply_text' => "ответ по нику"))); ?>
</div>

Количество комментарий только одним числом

Внутри статьи в самом верху часто выводят общее количество комментарий данного поста. Обычно оно имеет формат числа с надписью «комментарий-ев» и является якорям ссылки на форму сообщения. Но такой вид не всегда подходить по оформлению или его расположению.

комментарий одним числом

Мы немного отредактируем, уберем надпись, оставив только число комментарий. Код состоит из двух частей: функция, стили CSS, которые на свое усмотрение можете изменить.

<?php if ( ! post_password_required() && ( comments_open() || get_comments_number() ) ) { ?>
<span class="comments-number">
<a href="#comments" title="Оставить комментарий для: <?php the_title_attribute(); ?>">
<?php $commentscount = get_comments_number(); echo $post->comment_count; ?>
</a>
</span>
<?php } else {  ?>
<span class="comments-number">Комментарии закрыты</span>
<?php } ?>
.comments-number {
  display: inline-block;
  position: relative;
  background: #F35030;
  padding: 7px 10px;
  color: white;
  font-size: .8em;
  line-height: 1;
  float: right;
  box-shadow:.1em .2em .4em 0px rgba(0,0,0,.1);
  border-radius: 2px;
}

.comments-number:after {
  content: '';
  display: block;
  position: absolute;
  top:98%;
  left:.7em;
  width: 0;
  height: 0;
  border-color: #f35030 transparent transparent #f35030;
  border-style: solid;
  border-width: 0.35em;
}
.comments-number a{
  color: #fff !important;
}

Кнопки быстрого редактирования комментарий

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

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

// кнопки удалить, спам в комментариях
function comment_manage_link($id) {
    global $comment, $post;
    $id = $comment->comment_ID;
    if(current_user_can( 'moderate_comments', $post->ID )){
            if ( null === $link ) $link = __('Редактировать');
            $link = '<a class="comment-edit-link" href="' . get_edit_comment_link( $comment->comment_ID ) . '" title="' . __( 'Редактировать комментарий' ) . '">' . $link . '</a>';
            $link = $link . '  <a href="'.admin_url("comment.php?action=cdc&c=$id").'">Удалить</a> ';
            $link = $link . '  <a href="'.admin_url("comment.php?action=cdc&dt=spam&c=$id").'">Спам</a>';
            $link = $before . $link . $after;
            return $link;
            }
}
add_filter('edit_comment_link', 'comment_manage_link');

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

<span class="edit_comment"><?php edit_comment_link('edit','&nbsp;&nbsp;',''); ?></span>

Отключить комментария на страницах, постах и в определенных категориях

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

Страницы

Для отключения комментарий на страницах нужно в админ-панели перейти во вкладку «Страницы-Все страницы». Возле нужной вам страницы нажмите на ссылочную кнопку «Свойства». После открытия дополнительных параметров снимите галочку с пункта «Разрешить комментарии» и нажмите на кнопку «Обновить».

отключить комы вп

Записи

Для отключения в записях придется внести немного изменений в файл single.php или еще бывает content.php. То есть в тот файл, который отвечает за содержимое внутри статьи (он отличается во многих темах). Находим в одном из этих файлов функцию отвечающею за вывод комментарий, выглядит она так:

<?php comments_template(); ?>

Удалять ее вовсе не стоит, так как вдруг в будущем вы передумаете и захотите открыть обсуждение. Мы ее всего лишь закомментируем, вот таким образом:

<?php //comments_template(); ?>

А если нужно закрыть сообщения для конкретной записи, то в разделе «Записи», наведя курсор мыши на любой пост, выбрать из действий «Свойства» и снять галочку с «Разрешить комментарии» и жмем кнопку «Обновить».

отключить в постах комменты

Определенная категория

А по этой части нам поможет плагин Disable Comments on Post Categories. Он лишен каких-либо настроек или параметров. Он только отображает все ваши имеющие категории на сайте с возможность поставить галочку напротив любой где требуется закрыть комментария.

Удаляем replytocom ссылку

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

Поисковики, в свою очередь, плохо относятся к дублям страниц, что очень сильно может повлиять на выдачу результатов. Даже если у вас установлен атрибут канонической ссылки rel="canonical", то все же для полной уверенности просто необходимо предотвратить дублирование подобных ссылок, чтобы не навлечь на себя беду.

Откройте файл functions.php и в конце перед знаком закрытия ?> добавляем следующею функцию:

//Удаление ссылки replytocom
add_filter('comment_reply_link', 'add_nofollow', 420, 4);
function add_nofollow($link, $args, $comment, $post){
return preg_replace( '/href=\'(.*(\?|&)replytocom=(\d+)#respond)/', 'href=\'#comment-$3', $link );
}

После этого, если посмотреть исходный код, увидим, как полного адреса страницы с окончанием replytocomв кнопки ответа больше нет. Вместо него, образовывается якорь ссылки подобного вида #comment-804.

Для полного счастья добавим еще к ссылкам ответа атрибут rel="nofollow" с помощью такого фрагмента кода:

//Добавить комментарий ответ ссылки в nofollow
function add_nofollow_to_reply_link( $link ) {
    return str_replace( '")\'>', '")\' rel=\'nofollow\'>', $link );
}
add_filter( 'comment_reply_link', 'add_nofollow_to_reply_link' );

Как отображать новые комментарии первыми

По умолчанию комментарии в записях сортируются от самого позднего до самого раннего. Выходит так, что самые свежие, которые более актуальные, располагаются в самом низу всех остальных. Если вас такой порядок не устраивает, тогда в админ-панеле на вкладке «Настройки – Обсуждение» изменяем один параметр как показано на картинке ниже и в концы странице жмем кнопку «Сохранить изменения».

ранние комменты

По каким-либо причинам если это не сработает, то добавьте еще в файл functions.php такую функцию:

//сортировка комментарий от раннего к позднему
add_filter('comments_array',function($comments){return array_reverse($comments);});

Подключаем скрипт comment-reply.js

Изначально в некоторый темах может отсутствовать подключение скрипта comment-reply.js. Он отвечает за подпрыгивание формы комментариев до сообщения, возле которого была нажата кнопка ответа. В случае его не подключения будет срабатывать обратный эффект или же во все прыжок на месте. В файл functions.php добавляем код:

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

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

Автор, он же Андрей, он же Admin, он же WordSmall

Лентяй-любитель, окончил высшую школу безделья с многочисленными знаками отличия. Создатель этого небольшого «чудо-блога» о еще более «чудном» контенте.

E-mail Google+ Twitter
Комментариев: 6
  • Алексей

    Привет, интересует такой вопрос, как сделать кнопку ( далее >> ) в футере записи как показано на скриншоте.

    Что бы при вставке тега — more — в пост он выводился кнопкой в футере записей.

    • WordSmall

      Здравствуйте. В статье нет ни слова о кнопке «Далее».

  • Андрей

    Добрый день. Есть проблема, разбиваю комментарии на странице и вывожу сначала более поздние. Но если комментарии разбиты по 25 штук на страницу, а всего 26 комментариев, то на оригинальной странице будет всего 1 комментарий, а остальные 25 будут на второй странице. Вот пример

    Как сделать так, чтоб на оригинальной странице выводилось 25 комментариев, а не остатки от пагинации??? Спасибо.

    • WordSmall

      Добрый день. Просто в настройках «Обсуждение» поставьте для отображения первую страницу.

  • Костя

    Добрый день! Как настроить в консоли, чтобы записи и комментарии к ним выводились в формате не дд.мм.гг, а только дд.мм без Года? Спасибо

    • WordSmall

      День добрый. Нужно редактировать файлы темы, изменив функцию вывода даты. Указав примерно следующею: . Только день и месяц.

Добавить комментарий
bold quote code