Posts Tagged ‘ WordPress

Woopra – система сбора статистики посещений

March 07, 09 by TracKer

Долгое время я пользовался одной очень удобной системой статистики BBClone. Удобность заключалась в том, что все посешения записывались как сессии в порядке очереди, и можно было просмотреть откуда пришел посетитель, по каким страницам ходил, сколько на них пробыл… Однако, при наличии WordPress скрыть BBClone было весьма сложно (при попытке установить пароль на его папку вылазила 500-я ошибка), из-за чего не чистые на душу спамеры спамили статистику реферер-смамом.

И вот недавно в поисках альтернативы я наткнулся на статью Дмитрия Донченко про Woopra и решил попробовать. Регистрация открыта, инвайты не требуются. Добавил сайт – апрува ждал 4 дня. После этого нужно скачать программу для просмотра статистики (можно и не качать) и плагин для WordPress, с помощью которого можно выделять отдельных посетителей/коментаторов (они помечаются так называемыми тегами).

Первое что понравилось – это посессионная статистика действий каждого посетителя. Можно увидеть кто в определенный момент времени был на сайте: на какой странице, сколько времени на ней провел, откуда пришел и куда перешел.

Woopra

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

Woopra Live

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

Конечно точность отслеживания ограничивается наличием (включенным) у посетителей JavaScript, например оисковую систему отследить не удастся, так они не выполняют код JS. Однако по функционалу давольно мощная система, которая, по крайней мере, мне заменила маленький, но удаленький BBClone.

Относительно же вопроса, что лучше Google Analytics или Woopra, помоему он тут не совсем уместен. Это всеравно что сравнивать Танк и Легковой автомобиль. Google Analytics помоему больше направлен на универсальный более промышленный формат, в то время как Woopra делает больший акцент на небольшие сайты типа блогов. Каждый из них хорош для своего сегмента.

Постовой: Открылся новый форум для вебмастеров. Есть хорошая подборка шаблонов для WordPress.

Как избавиться от внешних ссылок в WordPress

January 20, 08 by TracKer

Спросил меня недавно NOMAD “Как избавиться от ВС в комментариях”, решил поделиться опытом, как это сделать в WordPress.

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

О том как сделать скрипт переадресации я писал в этом посте: Убираем внешние ссылки. Сделать нужно все что написано в посте, вплоть до запрета его индексации в robots.txt.

Как только скрипт готов идем в папку с темплейтом вашего блога, к примеру “/wp-content/themes/default/” находим файл “functions.php” и редактируем его.

Перед тем как перейти непосредственно к редактированию, разберем основные источники ВС в блоге на WordPress и методы борьбы с ними.

И так первый источник ВС это ссылки на автора темы. Обычно они расположен в футере (footer.php), но бывают и исключения, поэтому первым делом следует прошерстить темплейт на их наличие. Бороться с ними не сложно. Такие ссылки можно просто взять в “<noindex>“, примерно так:

<noindex>Powered by <a href="http://wordpress.org/">WordPress</a></noindex>

Все что попадает в “<noindex>” не будет учитываться роботом Яндекса, поэтому с этим тегом нужно быть по осторожнее.

Со статическими ВС разобрались, теперь приступим к динамическим. Осталось несколько мест где могут появляться ВС, это: посты (содержание постов), комментарии и sidebar (их может быть несколько и называться они могут по разному, но это сути не меняет). Теперь перейдем непосредственно к редактированию “functions.php” о котором я писал выше.

Начнем с Постов. Чтобы избавиться от ВС в содержании поста необходимо поставить фильтр на “the_content”. Система фильтров в WordPress очень хорошо развита и позволяет фильтровать практически все что угодно. Итак ставим фильтр:

add_filter('the_content', 'removeLinks');

Вторым параметром к add_filter мы указываем функци, которая и будет фильтровать текст. Собственно код функции:

function preg_callback2($matches) {
  $url = explode(':', $matches[2]);
  if (($url[0] == 'http') || ($url[0] == 'https')) {
    $need = "http://tracker2k.kiev.ua";
    $replace = "http://tracker2k.kiev.ua/redirect.php?";
    if (substr($matches[2], 0, strlen($need)) != $need) {
      $matches[2] = $replace.$matches[2];
    }
  }
  return $matches[1].$matches[2].$matches[3];
} 
 
function removeLinks($content) {
  if (! is_feed()) {
    $content = preg_replace_callback('@(]*href=")([^>\"]*)("[^>]*>)@i', "preg_callback2", $content);
    $content = preg_replace_callback('@(]*href=\')([^>\"]*)(\'[^>]*>)@i', "preg_callback2", $content);
  }
  return $content;
}

Для замены ссылок я использовал регулярные выражения, поэтому добавилась еще одна функция обратного вызова. Чтобы адаптировать под себя вам следует заменить всего два параметра в функции preg_callback2, а именно $need и $replace. В $need следует указать полный адрес вашего сайта без слеша в конце, а в $replace путь в redirect.php со знаком вопроса (“?“) в конце. В принципе с постами мы закончили.

Теперь перейдем к комментариям. С ними, в принципе, дела обстоят точно также. Следует отфильтровать всего три – четыре параметра, с использованием описанной выше функции. Другими словами к написанному выше следует дописать:

add_filter('comment_text', 'removeLinks');
add_filter('get_comment_author_link', 'removeLinks');
add_filter('get_comment_author_url_link', 'removeLinks');
add_filter('comment_url', 'removeLinks');

Идем дальше. Следующим пунктом идет sidebar. С ним сложнее всего. С сайдбаре может быть множество виджетов генерируемых другими плагинами, которые в свою очередь генерируют ВС. Однако весь сайдбар ставить в <noindex> было бы ошибкой, так как можно лишится индексации многих страниц и разделов. Я расскажу о тех Виджетах с которыми работал.

Проше всего бороться с ВС у виджета Text, в нем у меня лежали каунтеры, кнопки и пр. Тут всеголишь следует добавить в начало и конец кода в Виджете “<noindex>” и “</noindex>” соответственно. Далее виджет Links, он используется для генерации Blogroll. Тут необходимо установить еще один фильтр и написать еще одну функцию:

function removeLinks_Blogroll($p1) {
  foreach ($p1 as $obj) {
    $obj->link_url = "http://tracker2k.kiev.ua/redirect.php?" . $obj->link_url;
  }
  return $p1;
} 
 
add_filter('get_bookmarks', 'removeLinks_Blogroll');

Подразумевается, что в Blogroll все ссылки Внешние, поэтому их проверка не производится. Чтобы адаптировать под себя, следует заменить “http://tracker2k.kiev.ua/redirect.php?” на то же значения что и $replace в preg_callback2. Также генерировать ВС может виджет Meta, вместо него я использую собственный, заменяющий его. Чтобы внести изменения в остальные виджеты генерирующие ВС необходимо править код WordPress, что весьма не хорошо. Некоторые виджеты, работающие на базе дополнительных плагинов дают возможность вставлять свои теги в свои начало и конец, например Flickr.
Собственно все.

В итоге у вас должен получиться следующий код:

function preg_callback2($matches) {
  $url = explode(':', $matches[2]);
  if (($url[0] == 'http') || ($url[0] == 'https')) {
    $need = "http://tracker2k.kiev.ua";
    $replace = "http://tracker2k.kiev.ua/redirect.php?"; 
 
    if (substr($matches[2], 0, strlen($need)) != $need) {
      $matches[2] = $replace.$matches[2];
    }
  }
  return $matches[1].$matches[2].$matches[3];
} 
 
function removeLinks($content) {
  if (! is_feed()) {
    $content = preg_replace_callback('@(]*href=")([^>\"]*)("[^>]*>)@i', "preg_callback2", $content);
    $content = preg_replace_callback('@(]*href=\')([^>\"]*)(\'[^>]*>)@i', "preg_callback2", $content);
  }
  return $content;
} 
 
add_filter('the_content', 'removeLinks');
add_filter('comment_text', 'removeLinks');
add_filter('get_comment_author_link', 'removeLinks');
add_filter('get_comment_author_url_link', 'removeLinks');
add_filter('comment_url', 'removeLinks');  
 
function removeLinks_Blogroll($p1) {
  foreach ($p1 as $obj) {
    $obj->link_url = "http://tracker2k.kiev.ua/redirect.php?" . $obj->link_url;
  }
  return $p1;
} 
 
add_filter('get_bookmarks', 'removeLinks_Blogroll');