Блог mev'a

все, что я хотел сказать

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

В прошлом посте я показал как метить ссылки при кросспостинге в Livejournal.

Сегодня я расскажу и покажу как пометить RSS-фид.

Зачем это надо? Ваш фид видят большое число пользователей. С помощью rss-клиентов или rss-агрегаторов - не важно. Ведь хочется же оценить толк от RSS-ленты? Часто ли переходят из ленты к вам в блог?

Такие же вопросы интересовали и меня.

В результате нескольких часов мучений работающее решение было найдено - весь мой фид был помечен (ссылки на статьи, внутренние ссылки на другие страницы блога).

Как это сделать - читайте под катом.

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

Итак, начнем.

Задача: добиться того, чтобы все ссылки в rss-ленте, ведущие на сайт, были помечены метками Google Analytics.

Ссылки могут быть двух видов:

  • ссылки самой rss-ленты (ссылка на источник ленты, на пост, на комментарии к посту)
  • ссылки в контенте (вы указали в посте ссылку на другую страницу сайта, внизу поста могут выводиться связанные записи) - их тоже будет полезным пометить

Займемся ссылками первого вида.

Шаг №1

Откроем файл /wp-includes/feed.php

Найдем функцию get_bloginfo_rss, которая выдает информацию о блоге (в т.ч. ссылку на блог).

function get_bloginfo_rss($show = '') {
$info = strip_tags(get_bloginfo($show));
return apply_filters('get_bloginfo_rss', convert_chars($info), $show);
}

Добавим немножко кода (измененное выделено жирным):

function get_bloginfo_rss($show = '') {
$info = strip_tags(get_bloginfo($show));
$result=convert_chars($info);
if($show=='url'):
return apply_filters('get_bloginfo_rss', $result.'?utm_source=feed&utm_medium=feed&utm_campaign=feed', $show);
else:
return apply_filters('get_bloginfo_rss', $result, $show);
endif;

}

Теперь фид будет ссылаться на блог меченной ссылкой.

Шаг №2

Найдем функцию the_permalink_rss, которая выдает ссылку на пост.

function the_permalink_rss() {
echo apply_filters('the_permalink_rss', get_permalink());
}

Подправим ее таким образом (измененное выделено жирным)

function the_permalink_rss() {
echo apply_filters('the_permalink_rss', get_permalink().'?utm_source=feed&utm_medium=feed&utm_campaign=feed');
}

Ниже добавим новую функцию:

function the_commentslink_rss() {
echo apply_filters('the_commentslink_rss', get_permalink().'?utm_source=feed&utm_medium=feed&utm_campaign=feed#comments');
}

Открываем файл /wp-includes/feed-rss2.php, находим там строчку

<comments>...</comments>

Заменяем ее на следующую:

<comments><?php the_commentslink_rss() ?></comments>

Теперь в нашем фиде ссылки на пост и комментарии будут меченными.

Шаг №3

Дошло дело и до второго вида ссылок - внутренние ссылки в тексте статей.

Используем нашу функцию addGAtags из прошло поста

function addGAtags($text,$tag_source,$tag_medium,$tag_campaign)
{
$stringAG="utm_source=".$tag_source."&utm_medium=".$tag_medium."&utm_campaign=".$tag_campaign;
$patterns=array(
"#[\"']{1}(http://((www.)?chenado.net.*?)(/\?){1}(.*?)?(\#comment([s0-9\-]*))?)[\"']{1}#",
"#[\"']{1}(http://((www.)?chenado.net.*?)/(\#comment([s0-9\-]*))?)[\"']{1}#"
);
$replaces=array(
"http://$2/?$5&".$stringAG."$6",
"http://$2/?".$stringAG."$4"
);
return preg_replace($patterns,$replaces,$text);
}

Она должна быть добавлена в файл /wp-includes/link-template.php

Находим в файле /wp-includes/post-template.php функцию the_content. Под нею добавляем новую функцию (по сути это копия функции the_content только с одной добавленной строчкой - она выделена жирным):

function the_rss_content($more_link_text = null, $stripteaser = 0, $more_file = '') {
$content = get_the_content($more_link_text, $stripteaser, $more_file);
$content = apply_filters('the_content', $content);
$content=addGAtags($content,'feed','feed','feed');
$content = str_replace(']]>', ']]&gt;', $content);
echo $content;
}

В файле /wp-includes/feed-rss2.php находим строчку

<content:encoded><![CDATA[<?php the_content() ?>]]></content:encoded>

и меняем ее на:

<content:encoded><![CDATA[<?php the_rss_content() ?>]]></content:encoded>

Вуаля!!! Теперь все ссылки, ведущие на сайт, внутри статей будут помечены метками Googla Analytics.

Вот пример отображения поста с моего блога в Google Reader. С помощью плагина Web Developer я отобразил параметры ссылки. Все ссылки помечены :)

Все ссылки в rss-ленте помечены метками Google Analytics

Все ссылки в rss-ленте помечены метками Google Analytics

Осталось обратить ваше внимание на ряд важных пунктов:

  1. все изменяемые файлы следует перед экспериментами бекапить
  2. эксперименты лучше проводить на своем чистом фиде http://yoursite.domain/feed/, потому как FeedBurner и иже с ним обновляют ленту периодически, и внесенные вами исправления вы сразу не увидите. Также если вы используете плагин FeedBurner FeedSmith, который редиректит на feedburner.com, не забудьте его отключить на время экспериментов
  3. пользуйтесь валидатором фидов http://feedvalidator.org/ - поможет выявить ошибки экспериментов

Вопросы и пожелания приветствуются :) И если кому оказался полезным данный способ – не забудьте отписаться в комментариях.

Популярность: 5%

Связанные записи

Распечатать запись Распечатать запись
Получить PDF


2 комментария

  1. Сергей М. пишет 8 октября 2009 4:09 пп

    И для кого тогда реалиована система хуков в Вордпрессе, если наживую менять код там, где навешены фильтры?

    Вместо первого изменения открываем function.php темы (или бацаем плагинчик) и вешаем на фильтр функцию с нужными действиями add_filter(’get_bloginfo_rss’,’shunt_rss’)

    Аналогично по остальны пунктам. И тогда не придется делать бессмысленную последнюю функцию, а просто проверить на is_feed по фильтру the_content.

  2. mev пишет 8 октября 2009 4:21 пп

    Сергей, спасибо за подсказку. С хуками движка дел не имел. Но теперь точно разберусь и укажу более гибкое решение в посте.

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

Creative Commons License