Нещодавно автор блогу wp-info.ru, Deimos, опублікував пост про цікавий плагін NSx Referers.
Аби не повторюватись, приведу цитату:
Существует много способов для внутренней оптимизации блога, одним из них является вывод поисковых запросов по которым находился твой блог. Вывести их нам поможет плагин NSx Referers, он собирает все поисковые запросы по которым пользователь переходил на блог с поисковых систем Яндекс, Google, Rambler, Bing и т.д. и выводит самые популярные из них.
У коментарях було задане питання, чи можна, щоб у віджеті, який виводить пошукові запити, поруч стояли іконки пошукових систем, з яких був перехід по даному запиту.
Я спробував реалізувати і в мене вийшло :).
Отже, спочатку потрібно завантажити та встановити плагін.
Після цього відредагувати деякі файли плагіну наступним чином:
У файлі nsx-referers-stat.php знайти код в самому кінці:
[php]
$wpdb->query(
"INSERT INTO ".REFTABLE."
VALUES
(”, ‘$url’, ‘NULL’, ‘NULL’, ‘$search’, 1)");
[/php]
Замінити на:
[php]
$wpdb->query(
"INSERT INTO ".REFTABLE."
VALUES
(”, ‘$url’, ‘NULL’, ‘".$host."’, ‘$search’, 1)");
[/php]
Це дозволить записувати в базу хост, з якого прийшли.
Далі замініть вміст файлу nsx-referers-widget.php на цей код:
[php]
<?php
function get_referers()
{
global $wpdb;
$out = ”;
srand((float) microtime() * 10000000);
$siteurl = get_option(‘siteurl’);
$asiteurl = parse_url($siteurl);
$siteurl = $asiteurl[‘scheme’]."://".$asiteurl[‘host’];
$maxc = (int) get_option(‘nsx_rw_count’);
if ($maxc < 1) $maxc = 10;
$top_pages = max((int) get_option(‘nsx_rw_top_pages’),1);
$top_search = max((int) get_option(‘nsx_rw_top_search’),1);
if ($top_pages > 0) $limit = "LIMIT 0, $top_pages"; else $limit = ”;
if ($top_search > 0) $limits = "LIMIT 0, $top_search"; else $limits = ”;
$a_top_pages = $wpdb->get_results( "
SELECT url, sum(hits) as sum_hits, host
FROM ".REFTABLE."
WHERE not (search like ‘%??%’)
GROUP BY url
ORDER BY sum_hits desc
$limit", ARRAY_A );
# echo "$maxc:$top_pages:$top_search:$top_page_rows";
if (count($a_top_pages) > 0)
{
$top_page_rows = $wpdb->num_rows;
$a_top_pages_rand = (array) array_rand($a_top_pages, min($top_page_rows, $maxc));
if (is_array($a_top_pages_rand))
foreach ($a_top_pages_rand as $page_ind)
{
$a_top_page = $a_top_pages[$page_ind];
$search_words = $wpdb->get_results( "
SELECT search, sum(hits) as sum_hits
FROM ".REFTABLE."
WHERE url = ‘{$a_top_page[‘url’]}’ and not (search like ‘%??%’)
GROUP BY search
ORDER BY sum_hits desc
$limits", ARRAY_A );
if ($a_top_page[‘host’] == ‘altavista.com’) {$icon = ‘altavista.ico’;}
if ($a_top_page[‘host’] == ‘search.msn.’) {$icon = ‘msn.ico’;}
if ($a_top_page[‘host’] == ‘yahoo.com’) {$icon = ‘yahoo.ico’;}
if ($a_top_page[‘host’] == ‘bing.com’) {$icon = ‘bing.ico’;}
if ($a_top_page[‘host’] == ‘redtram.com’) {$icon = ‘redtram.ico’;}
if ($a_top_page[‘host’] == ‘rambler.ru’) {$icon = ‘rambler.ico’;}
if ($a_top_page[‘host’] == ‘webalta.ru’) {$icon = ‘webalta.ico’;}
if ($a_top_page[‘host’] == ‘aport.ru’) {$icon = ‘aport.ico’;}
if ($a_top_page[‘host’] == ‘nigma.ru’) {$icon = ‘nigma.ico’;}
if ($a_top_page[‘host’] == ‘go.mail.ru’) {$icon = ‘mail.ico’;}
if ($a_top_page[‘host’] == ‘yandex.’) {$icon = ‘yandex.ico’;}
if ($a_top_page[‘host’] == ‘google.’) {$icon = ‘google.ico’;}
if (count($search_words) > 0)
{
if ($top_search == 0) $ind = mt_rand(0, $wpdb->num_rows – 1);
else $ind = mt_rand(0, min($top_search, $wpdb->num_rows) – 1);
$out .= "<li><img src='{$siteurl}/wp-content/uploads/".$icon."’> <a href='{$siteurl}{$a_top_page[‘url’]}’ >{$search_words[$ind][‘search’]}</a></li>";
}
}
}
return $out;
}
function nsx_referers_widget($args) {
extract($args);
echo $before_widget;
echo $before_title;
echo get_option(‘nsx_rw_title’);
echo $after_title;
echo "<ul>";
echo get_referers();
echo "</ul>";
echo $after_widget;
}
function nsx_referers_widget_control() {
if (!empty($_REQUEST[‘nsx_rw_title’])) {
update_option(‘nsx_rw_title’, $_REQUEST[‘nsx_rw_title’]);
}
if (!empty($_REQUEST[‘nsx_rw_count’])) {
update_option(‘nsx_rw_count’, (int) $_REQUEST[‘nsx_rw_count’]);
}
if (!empty($_REQUEST[‘nsx_rw_top_pages’])) {
update_option(‘nsx_rw_top_pages’, (int) $_REQUEST[‘nsx_rw_top_pages’]);
}
if (!empty($_REQUEST[‘nsx_rw_top_search’])) {
update_option(‘nsx_rw_top_search’, (int) $_REQUEST[‘nsx_rw_top_search’]);
}
echo "<p><label for="nxrw_title">".__(‘Title’, ‘nsx-referers’);
echo ": <input class="widefat" id="nsx_rw_title" name="nsx_rw_title" value="".get_option(‘nsx_rw_title’)."" type="text"></label>";
// <!– <br /><small>(не более 15)</small> –>
echo "</p>";
echo "<p><label for="nxrw_count">".__(‘Number of links’, ‘nsx-referers’);
echo ": <input style="width: 30px; text-align: center;" id="nsx_rw_count" name="nsx_rw_count" value="".get_option(‘nsx_rw_count’)."" type="text"></label>";
// <!– <br /><small>(не более 15)</small> –>
echo "</p>";
echo "<p><label for="nxrw_top_pages">".__(‘Top pages limit’, ‘nsx-referers’);
echo ": <input style="width: 30px; text-align: center;" id="nsx_rw_top_pages" name="nsx_rw_top_pages" value="".get_option(‘nsx_rw_top_pages’)."" type="text"></label>";
// <!– <br /><small>(не более 15)</small> –>
echo "</p>";
echo "<p><label for="nxrw_top_search">".__(‘Top search phrases limit’, ‘nsx-referers’);
echo ": <input style="width: 30px; text-align: center;" id="nsx_rw_top_search" name="nsx_rw_top_search" value="".get_option(‘nsx_rw_top_search’)."" type="text"></label>";
// <!– <br /><small>(не более 15)</small> –>
echo "</p>";
}
function register_nsx_referers_widget() {
register_sidebar_widget(‘NSx Referers Widget’, ‘nsx_referers_widget’);
register_widget_control(‘NSx Referers Widget’, ‘nsx_referers_widget_control’);
}
add_action(‘init’, ‘register_nsx_referers_widget’);
?>
[/php]
Це дозволить використовувати іконки для усіх пошукових систем, що підтримує плагін.
У цій частині коду Ви можете змінити назви іконок:
[php]
if ($a_top_page[‘host’] == ‘altavista.com’) {$icon = ‘altavista.ico’;}
if ($a_top_page[‘host’] == ‘search.msn.’) {$icon = ‘msn.ico’;}
if ($a_top_page[‘host’] == ‘yahoo.com’) {$icon = ‘yahoo.ico’;}
if ($a_top_page[‘host’] == ‘bing.com’) {$icon = ‘bing.ico’;}
if ($a_top_page[‘host’] == ‘redtram.com’) {$icon = ‘redtram.ico’;}
if ($a_top_page[‘host’] == ‘rambler.ru’) {$icon = ‘rambler.ico’;}
if ($a_top_page[‘host’] == ‘webalta.ru’) {$icon = ‘webalta.ico’;}
if ($a_top_page[‘host’] == ‘aport.ru’) {$icon = ‘aport.ico’;}
if ($a_top_page[‘host’] == ‘nigma.ru’) {$icon = ‘nigma.ico’;}
if ($a_top_page[‘host’] == ‘go.mail.ru’) {$icon = ‘mail.ico’;}
if ($a_top_page[‘host’] == ‘yandex.’) {$icon = ‘yandex.ico’;}
if ($a_top_page[‘host’] == ‘google.’) {$icon = ‘google.ico’;}
[/php]
а тут міняємо шлях до іконок на бажаний:
[php]
$out .= "<li><img src='{$siteurl}/wp-content/uploads/".$icon."’> <a href='{$siteurl}{$a_top_page[‘url’]}’ >{$search_words[$ind][‘search’]}</a></li>";
[/php]
До речі, замініть у файлі nsx-referers-stat.php цю частину коду:
[php]
$hosts[‘google.’][‘q’] = ‘q’;
$hosts[‘google.’][‘ek’] = ‘ie’;
$hosts[‘google.’][‘ev’] = ‘windows-1251’;
$hosts[‘altavista.com’][‘q’] = ‘q’;
$hosts[‘search.msn.’][‘q’] = ‘q’;
$hosts[‘yahoo.com’][‘q’] = ‘q’;
$hosts[‘bing.com’][‘q’] = ‘q’;
$hosts[‘redtram.com’][‘q’] = ‘q’;
$hosts[‘yandex.’][‘q’] = ‘text’;
$hosts[‘rambler.ru’][‘q’] = ‘query’;
$hosts[‘webalta.ru’][‘q’] = ‘q’;
$hosts[‘aport.ru’][‘q’] = ‘r’;
$hosts[‘go.mail.ru’][‘q’] = ‘q’;
$hosts[‘nigma.ru’][‘q’] = ‘q’;
[/php]
на цю:
[php]
$hosts[‘google.’][‘q’] = ‘q’;
$hosts[‘google.’][‘ek’] = ‘ie’;
$hosts[‘google.’][‘ev’] = ‘windows-1251’;
$hosts[‘altavista.com’][‘q’] = ‘q’;
$hosts[‘search.msn.’][‘q’] = ‘q’;
$hosts[‘yahoo.com’][‘q’] = ‘p’;
$hosts[‘bing.com’][‘q’] = ‘q’;
$hosts[‘redtram.com’][‘q’] = ‘q’;
$hosts[‘yandex.’][‘q’] = ‘text’;
$hosts[‘rambler.ru’][‘q’] = ‘query’;
$hosts[‘webalta.ru’][‘q’] = ‘q’;
$hosts[‘aport.ru’][‘q’] = ‘r’;
$hosts[‘go.mail.ru’][‘q’] = ‘q’;
$hosts[‘nigma.ru’][‘q’] = ‘s’;
[/php]
Це дозволить плагіну обробляти усі описані пошукові системи, оскільки в оригіналі були помилки і переходи, наприклад, з nigma.ru та yahoo.com не враховувались.
Коментарі
Спасибо за доработку плагина. Все получилось, сделал папку с иконками – заработало. Но, почему-то не на всех переходах с гугла отображается иконка просто появляется пустая рамка с альтом \”изображение\”.
Можно ли сделать так, что когда посетитель приходит с неизвестного поисковика, плагин подставляет картинку специальную картинку, например allSE.ico
Буду признателен за решение.
Думаю решение заключается в том, чтобы после условий
if ($a_top_page[\'host\'] == \'google.\') {$icon = \'google.ico\';}
вставить условие на подобииelse {$icon = \'allse.ico\';}
Добрый день.
А почему вы не используете этот плагин?
Я недвано сменил шаблон и отелючил этот плагин, резко упал трафик, но что странно по основным запросам позиции в поисковиках не поменялись. Теперь сижу в раздумьях стот ли включать обратно.
Просто не нуждаемся в данной функциональности.
А у меня не получилось, иконки не показывает 🙁
чтобы вам помочь, нужна более конкретная информация, что вы сделали, что не работает и как это проявляется. создайте тему на форуме, попробуем решить
Мудрёная у вас регистрация…
Проблема в том, что плагин работает, но иконки не отображаются
в нашей версии плагина прописано:
т.е. иконки должны быть доступны по адресу http://vash_site//wp-content/uploads/
они у вас там есть?
да, я создал папку iconn, и эта строка у меня выглядит:, иконки в формате *ico
судя по всему, вы не поставили / в конце, т.е. у вас сейчас адрес иконки генерируется такой:
http://gaeilge.ru/wp-content/uploads/iconnyandex.ico
поставьте так /wp-content/uploads/iconn/ и должно работать 🙂
да, заработало! дякую!!!
столкнулся с ещё одной проблемой – иконки не отображаются в ie, в файерфоксе, хроме и опере всё нормально, а internet explorer не отображает
попробуйте вместо картинок в формате .ico использовать, например, в формате .jpg
А як в плагін добавити пошукову систему Meta.ua? Я шось намагався, не получається, виникають різні глюки, тільки часу багато потратив. Допоможіть будь-ласка.
спробуйте додати в останній код із статті ще рядок:
$hosts[\'go.mail.ru\'][\'q\'] = \'q\';
а також додайте там, де список іконок пошуковиків, рядок типу такого:
if ($a_top_page[\'host\'] == \'meta.\') {$icon = \'meta.ico\';}
Як я зрозумів ви мали на увазі
$hosts[\'meta.\'][\'q\'] = \'q\';
Я добавив цей код і
if ($a_top_page[\'host\'] == \'meta.\') {$icon = \'meta.ico\';}
Виникають глюки. Заходив з яндекса – відображався пошуковий запит, потім захожу з meta.ua – пошуковий запит яндекса уже не відображається, відображається пошуковий запит Мети не повністю, тільки англійське слово, українське не відображається і то не з іконкою Мети, а з іконкою яндекса.