Недавно я писал заметку как сделать древовидные комментарии в WordPress. Всё работает, но вскрылась проблема. Теперь после каждого коммента есть ссылка «ответить», которая формально ведет на пост с параметром ?replytocom=. Что значит дубликат контента и нагрузка на сервер. Некоторые запрещают индексацию этих страниц, но во первых не все боты обращают внимание на robots.txt, а во вторых есть и другие моменты, ради которых эти ссылки вообще хочется скрыть ото всех кроме тех, кто реально может оставить ценный коммент. Я сделал это с помощью jQuery.

Вообще параметры передаваемые с ?replytocom= нужены вордпрессу для постройки дерева. Он передается форме в скрытое поле
input type=’hidden’ name=’comment_parent’ id=’comment_parent’ value=’$replytoid’
функцией get_comment_id_fields() {
в строке 1167 файла includes/comment-template.php
Соответственно есть масса способой скрыть ссылку, можно например передать параметры через форму, можно через json вобщем по всякому можно. Но jQuery хорош тем что не нужно менять шаблон ( ну разве что удалить пару строк, и одну строку добавить ).
Итак что сделал я:
1. После
[cc lang=”php”][/cc]
добавляем собственно наш файлик с кодом, важно что после wp_head, потому что в нем подгружается библиотека jquery,

2. В cooments.php удаляем строки:
[cc lang=”php”]

$depth, ‘max_depth’ => $args[‘max_depth’] ))) ?>

[/cc]
3. Ну и в наш файлик myjs.js пишем код:
[cc lang=”javascript”]
jQuery(document).ready(function($) {
//*************

// рисуем ссылку на ответ тогда когда читатель машет мышой над комментом
jQuery(“.comment_block”).mouseenter(function(){
var id = jQuery(this).attr(“id”).substr( 8 ); // получаем номер коммента
var post_id = jQuery(“.post”).attr(“id”).substr( 5 ); // получаем номер поста
// эти номера важны, в зависимости от вашей темы так они могут не взяться – проверяйте
// при неправильном post_id все ответы буду валиться в другую статью
// и сабстр тоже смотрите сами у вас всё может быть по другому

// формируем ссылку
var reply = “

“;
// аппендим
jQuery(this).append( reply );
;
});

// и убираем когда мыша с коммента уходит
jQuery(“.comment_block”).mouseleave(function(){
jQuery(“.reply”).hide(‘slow’); // В опере 9,6 remove работает через жопу, поэтому приходится пользоваться сначала hide
jQuery(“.reply”).remove();
});
//*************
});[/cc]

В итоге блок с ?replytocom= виден только юзеру с включенной жабой, да ещё который машет мышой над комментами. Всем остальным ?replytocom= не видно, не индексируется, не сканится ботами и телепортами.

24 января 2011 |

Уже есть один комментарий к “Проблема с ?replytocom в древовидных комментариях WordPress”

  1. Gilbert 17 мая, 2011

    В добавок к раставлению точек над i еще и снятие лишней нагрузки с сервака! вот так день =))))
    спасибо!

Есть что сказать по теме статьи? Пожалуйста - пишите!