Блог mev'a

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

Наблюдение из-за укрытия

Многие владельцы блогов на движке Wordpress знакомы с плагином Livejournal Crossposter, который позволяет дублировать посты блога в "ЖеЖешечку". Ведь это же удобно: пост будет висеть в ленте друзей у френдов - и его увидят не только сами френды, но и их френды, посмотрев в ленту друзей.

Многие из таких владельцев делают неполный кросспост (полный текст или комментирование доступны только на блоге). Отсюда еще один плюс: заинтересовавшийся народ пойдет к вам на блог.
Вопрос: как оценить эту толпу ЖЖ-юзеров и отследить их движение по вашему сайту?
Ответ: с помощью меченных ссылок (подробнее под катом)

Возможность попасть из жж-поста в ваш блог осуществляется через "шапку/подвал" (термин создателя плагина), то есть через ссылки, которые помечаются в жж-посте.

Необходимо заставить плагин помещать в ЖЖ-пост меченные ссылки. Для этого надо поправить код плагина следующим образом.

Шаг №1.

Находим в файле "/wp-content/plugins/ljxp/lj_crosspost.php" строчку

$postHeader = $options['custom_header'];

Кусок кода ниже обрабатывает пользовательскую настройку "шапки/подвала", добавленный текст выделен жирным:


foreach($tags as $_term_id => $_name)
$htags[] = '<a href="'.get_tag_link($_term_id).'?utm_source=livejournal&amp;utm_medium=feed&amp;utm_campaign=feed" rel="bookmark">'.$_name.'</a>';


foreach($cats as $_term_id => $_name)
$hcats[] = '<a href="'.get_category_link($_term_id).'?utm_source=livejournal&amp;utm_medium=feed&amp;utm_campaign=feed" rel="bookmark">'.$_name.'</a>';


$htags = implode(', ', (array)$htags);
$hcats = implode(', ', (array)$hcats);


$find = array('[blog_name]', '[blog_link]', '[permalink]', '[comments_link]', '[comments_count]', '[tags]', '[categories]');


$replace = array($blogName, get_settings('home').'?utm_source=livejournal&amp;utm_medium=feed&amp;utm_campaign=feed', get_permalink($post_id).'?utm_source=livejournal&amp;utm_medium=feed&amp;utm_campaign=feed', get_permalink($post_id).'?utm_source=livejournal&amp;utm_medium=feed&amp;utm_campaign=feed#comments', lj_comments($post_id), $htags, $hcats);


$postHeader = str_replace($find, $replace, $postHeader);

Так мы поправили ссылки в "шапке/подвале".

Шаг №2

В том же файле находим строчку:

case "link":
$the_event .= sprintf('<p><a href="%s#more-%s">', get_permalink($post_id), $post_id) . __('Read the rest of this entry &raquo;', LJXP_DOMAIN) .'</a></p>';
break;

Меняем ее на такую:

case "link":
$the_event .= sprintf('<p><a href="%s?utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed#more-%s">', get_permalink($post_id), $post_id) . __('Read the rest of this entry &raquo;', LJXP_DOMAIN) .'</a></p>';
break;

Это ссылка с текстом "Читать запись полностью".

Шаг №3

Осталось внести в настройку плагина необходимые коррективы - в поле "Заданный заголовок блога для использования в шапке/подвале" помещаем текст:

Запись опубликована в <a href="[blog_link]" target="_blank">Блоге mev'a</a>. Оставляйте <a href="[comments_link] target="_blank">комментарии</a> там.

Теперь в ЖЖ будут отправляться меченные "шапка/подвал" и ссылка на полную запись  в блоге.

Но ведь в посте могут встречаться ссылки на другие страницы блога... Что делать в этом случае?

Нам надо заменить все внутренние ссылки в посте на меченные. Я это сделал с помощью самописной функции.

Шаг №4

Добавляем в файл "/wp-includes/link-template.php" функцию:

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);;
}

Эта функция позволит с помощью регулярного выражения заменять нужные нам ссылки на меченные.

Если вы заметили, в регулярном выражении жирным выделен домен сайта - ведь нам нужны именно внутренние ссылки (вы соотвественно должны подставить свой домен).

Данная функция будет обрабатывать все внутренние ссылки на страницы блога (исключая ссылки на файлы), в том числе содержащие GET-параметры ("a=1", etc.) и якоря ("#comments").

Эту функцию я также буду использовать и для другой фишки, о которой расскажу в следующем посте.

Шаг №5

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

Находим все в том же файле "/wp-content/plugins/ljxp/lj_crosspost.php" строчку:

if(!$post->post_password) {

Ниже будет код вставки контента, его-то мы и должны обработать нашей функцией.

Редактируем код следующим образом (измененное выделено жирным):

if(!$post->post_password) {
if(strpos($post->post_content, "<!--more-->") === false) {
$the_event .= apply_filters('the_content', addGAtags($post->post_content,'livejournal','feed','feed'));
}
else {
$content = explode("<!--more-->", $post->post_content, 2);
$content[0]=addGAtags($content[0],'livejournal','feed','feed');
$content[1]=addGAtags($content[1],'livejournal','feed','feed');

$the_event .= apply_filters('the_content', $content[0]);
switch($options['more']) {
case "copy":
$the_event .= apply_filters('the_content', $content[1]);
break;
case "link":
$the_event .= sprintf('<p><a href="%s?utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed#more-%s">', get_permalink($post_id), $post_id) .
__('Read the rest of this entry &raquo;', LJXP_DOMAIN) .
'</a></p>';
break;
case "lj-cut":
$the_event .= '<lj-cut text="' .
__('Read the rest of this entry &amp;raquo;', LJXP_DOMAIN) .
'">' . apply_filters('the_content', $content[1]) . '</lj-cut>';
break;
}
}
}

Вуаля! Теперь скрипт будет отсылать в ЖЖ меченные ссылки. А мы сможем их отследить с помощью сегментов с расширенными настройками.

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

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

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

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

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


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

Creative Commons License