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.

 

Возможно Вас заинтересуют эти материалы

WordPress: Парные шорткоды

Помимо простых шорткодов в WordPress доступны так же парные или охватывающие шорткоды. Используя синтаксис на

WordPress: Шорткоды с параметрами

В то время как простые шорткоды решают большинство задач по выводу сложного содержимого на странице,

WordPress: Простые шорткоды

Впервые шорткоды стали довольно популярными в WordPress 2.5. Они явились удобным способом предоставить пользователям возможность