Нещодавно автор блогу 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 не враховувались.

Author

Дмитро Кондрюк в веб-індустрії з 2003 року. В 2009р. заснував проект Український WordPress (що у подальшому став офіційним сайтом команди локалізації WordPress в Україні). З 2010 року засновник і технічний директор проекту Український хостинг для WordPress (WPHost.me) - повноцінного хостинг-сервісу, максимально оптимізованого на використання CMS WordPress.

Коментувати

Коментарі

  1. Спасибо за доработку плагина. Все получилось, сделал папку с иконками – заработало. Но, почему-то не на всех переходах с гугла отображается иконка просто появляется пустая рамка с альтом \”изображение\”.
    Можно ли сделать так, что когда посетитель приходит с неизвестного поисковика, плагин подставляет картинку специальную картинку, например allSE.ico
    Буду признателен за решение.

  2. Добрый день.
    А почему вы не используете этот плагин?
    Я недвано сменил шаблон и отелючил этот плагин, резко упал трафик, но что странно по основным запросам позиции в поисковиках не поменялись. Теперь сижу в раздумьях стот ли включать обратно.

    • судя по всему, вы не поставили / в конце, т.е. у вас сейчас адрес иконки генерируется такой:

      http://gaeilge.ru/wp-content/uploads/iconnyandex.ico

      поставьте так /wp-content/uploads/iconn/ и должно работать 🙂

  3. столкнулся с ещё одной проблемой – иконки не отображаются в ie, в файерфоксе, хроме и опере всё нормально, а internet explorer не отображает

  4. А як в плагін добавити пошукову систему 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 – пошуковий запит яндекса уже не відображається, відображається пошуковий запит Мети не повністю, тільки англійське слово, українське не відображається і то не з іконкою Мети, а з іконкою яндекса.