WordPress: Изменеие содержимого страницы при помощи фильтров
На данный момент мы в состоянии написать плагины, которые могут добавить какой либо текст в существующий контент, этот рецепт покажет вам как изменить содержимое страницы, прежде чем она отобразится на экране. Для пущей полезности мы будем работать с плагином который мы делали ранее, который пока что просто добавляет код Google Analytics в head страниц. Теперь нам надо прицепить специальный JavaScript код ко всем ссылкам, которые есть в постах и страницах, чтобы отслеживать, как посетители перемещаться по сайту.
На всякий случай приведу код плагина который мы делали ранее в статье WordPress: Добавление контента в тег head страниц . Внизу страницы вы найдете все ссыкки на предыдущие статьи данной серии.
<?php
/*
Plugin Name: Plugin Header Output
Plugin URI:
Description: Page Header Output
Version: 1.0
Author: Somebody
Author URI: http://xxxxxx.xx/
License: GPLv2
*/
// Регистрируем callback-функцию
add_action ('wp_head', 'page_header_output');
function page_header_output() { ?>
<script type="text/javascript">
var gaJsHost = ( ( "https:" == document.location.protocol ) ?
"https://ssl." : "http://www." );
document.write( unescape( "%3Cscript src='" + gaJsHost +
"google-analytics.com/ga.js'" +
"type='text/javascript'%3E%3C/script%3E"
));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker( "UA-xxxxxx-x" );
pageTracker._trackPageview();
} catch( err ) {}
</script>
<?php }
Что нужно теперь ...
- Перейдите в каталог плагина wp-content/plugins/page-header-output
- Откройте файл page-header-output.php в редакторе кода и добавьте после существующего там кода
следующую строку, которая зарегистрирует нашу callback-функцию в the_content фильтре:
add_filter('the_content', 'link_filter_analytics' );
-
После добавим реализацию callback-функции link_filter_analytics:
function link_filter_analytics ( $the_content ) { $new_content = str_replace( "href", "onclick=\"recordOutboundLink(this, 'Outbound Links', '" . home_url() . "' );return false;\" href", $the_content ); return $new_content; }
- Далее нам понадобится зарегистрировать еще одну callback-функцию, которая должна будет выполниться,
когда WordPress строит footer шаблона страницы. Такую возможность нам предоставляет action хук
wp_footer:
add_action( 'wp_footer', 'footer_analytics_code' );
- И после сразу же добавим её реализацию:
function footer_analytics_code() { ?> <script type="text/javascript"> function recordOutboundLink( link, category, action ) { _gat._getTrackerByName()._trackEvent( category, action ); setTimeout( 'document.location = "' + link.href + '"', 100 ); } </script> <?php }
- Сохраните и закройте файл плагина. Больше кода в нем не будет.
Теперь если открыть в браузере просмотр исходного кода, напрмер главной страницы, то можно увидеть, что на ссылки добавились Javascript обработчики событий onclick необходимые для работы Google Analytics, а если прокрутить страницу вниз, то мы увидим, что у нас появился еще один JavaScript тег с кодом, реализующим функцию recordOutboundLink
Как это работает...
Наша первая функция link_filter_analytics(), которую мы зарегистрировали в filter хуке при работе будет получать на вход аргумент строку - контент всей страницы, перед тем как WordPress отдаст её браузеру пользователя. Таким образом эта наша функция может делать с этим контентом все что угодно. В данном случае мы просто воспользовались PHP функцией str_replace, что бы заменить все вхождения строк:
href
на строки:
onclick="recordOutboundLink(this, 'Outbound Links', 'http://xxxx.xx' );return false;" href
Таким образом мы добавили всем ссылкам необходимые JavaScript обработчики.
Что бы обработчики заработали, нам пришлось так же добавить реализацию JavaScript функции: recordOutboundLink. Мы сделали это путем регистрации нашей функции footer_analytics_code в action хуке: wp_footer. Который дал нам возможность вывести нужный нам JavaScript в футере шаблона страницы. В итоге мы имеем плагин решающий задачи, связанные с отслеживанием активности на вашем веб-сайте с помощью Google Analytics.
Предыдущие статьи этого цикла: