WordPress: Изменеие содержимого страницы при помощи фильтров

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 }

Что нужно теперь ...

  1. Перейдите в каталог плагина wp-content/plugins/page-header-output
  2. Откройте файл page-header-output.php в редакторе кода и добавьте после существующего там кода следующую строку, которая зарегистрирует нашу callback-функцию в the_content фильтре:
    add_filter('the_content', 'link_filter_analytics' );
    
  3. После добавим реализацию 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;
    }
    
  4. Далее нам понадобится зарегистрировать еще одну callback-функцию, которая должна будет выполниться, когда WordPress строит footer шаблона страницы. Такую возможность нам предоставляет action хук wp_footer:
    add_action( 'wp_footer', 'footer_analytics_code' );
    
  5. И после сразу же добавим её реализацию:
    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 }
    
  6. Сохраните и закройте файл плагина. Больше кода в нем не будет.

Теперь если открыть в браузере просмотр исходного кода, напрмер главной страницы, то можно увидеть, что на ссылки добавились 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.

Предыдущие статьи этого цикла:

  1. WordPress: С чего начинаются плагины
  2. WordPress: Добавление контента в тег head страниц
  3. WordPress: Функции для работы с путями
  4. WordPress: Использование хуков фильтров
  5. WordPress: Добавление содержимого в каждый пост при помощи фильтров

Добавить комментарий


Защитный код
Обновить



Кто на сайте
Сейчас 187 гостей онлайн