Приветствую! Как и обещал в прошлый раз сегодня речь пойдет про кнопки «Ответить» и «Цитировать» в конце каждого комментария. Если помните, то недавно я писал про древовидные комментарии. К такому повороту событий я не был готов и получилось так, что сам себе подложил свинью :twisted:

Цитирование

К счастью вовремя отредактированный robots.txt исправил ситуацию. Только вчера из индекса Google была удалена последняя страница дублированного контента. В итоге я получил небольшую встряску, которая продолжалась четыре дня.

Древовидную структуру отменил, но дабы не нарушать функциональности комментирования установил плагин Comment Toolbar. Он выводит кнопки «Ответить» и «Цитировать» под каждым комментарием.

Кнопки ответить и цитировать

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

Плагин Comment ToolbarВообще же хочу сказать, что вебмастер просто обязан знать английский язык, чтобы легко ориентироваться в исходном коде :o и не только.

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

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

Итак, при переходе в настройки плагина видим следующее:

Comment Toolbar

Обратите внимание на скриншот — в настройках плагина я выбрал в пункте Выравнивание тулбара: по CSS-настройкам, а для кнопок «Ответить» и «Цитировать» задал стиль CSS:

.comment-toolbar {
font-size:12px;
padding-bottom:5px;
padding-right:10px;
text-align:right;
margin:0px;
}

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

Чтобы избежать ошибок валидации нужно в файле cf_comment_toolbar.php в папке установленного плагина найти строчку

$new_content = "<span id=\"co_".$ID."\">".$content."</span>";

и заменить ее на

$new_content = "<div id=\"co_".$ID."\">".$content."</div>";

Т.е. простая замена тега span на div решает проблему. Очень жаль, что разработчики плагинов не заботятся о валидации, в итоге все приходится допиливать вручную.

Добавление кнопки «ответить» без использования плагина

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

В файл functions.php необходимо добавить код:

add_filter('comment_text', 'Replys');
function Replys($comment_text) {
if (!is_feed()) {
if (comments_open() && have_comments() && get_comment_type() == 'comment') {
if(get_option('page_comments'))
$comment_ID = esc_url(get_comment_link());
else
$comment_ID = '#comment-' . get_comment_ID();
$comment_author = esc_html(get_comment_author());
$yarr = '<p class="replys"><a href="#comment" onclick=\'Replys("' . $comment_ID . '", "' . $comment_author . '")\' >Ответить</a></p>';
return $comment_text . $yarr;}
else { return $comment_text;}}
else { return $comment_text;}}

Затем создайте файл скрипта, например, назовите его reply.js и вставьте в него следующее содержимое:

function Replys(commentID, author) {
	var inReplyTo = ''+author+', ';
	var myField;
	if (document.getElementById('comment') && document.getElementById('comment').type == 'textarea') {myField = document.getElementById('comment');}
	else {return false;}
	if (document.selection) {
		myField.focus();
		sel = document.selection.createRange();
		sel.text = inReplyTo;
		myField.focus();}
	else if (myField.selectionStart || myField.selectionStart == '0') {
		var startPos = myField.selectionStart;
		var endPos = myField.selectionEnd;
		var cursorPos = endPos;
		myField.value = myField.value.substring(0, startPos) + inReplyTo + myField.value.substring(endPos, myField.value.length);
		cursorPos += inReplyTo.length;
		myField.focus();
		myField.selectionStart = cursorPos;
		myField.selectionEnd = cursorPos;}
	else {myField.value += inReplyTo; myField.focus();}
}

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

.replys {
font-size:12px;
text-align:right;
margin:5px 15px 5px 5px;
}

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

Ну вот и подошел к концу очередной пост, скоро будет следующий. Подписывайтесь, если не хотите пропустить!