WordPress: Добавление контента в тег head страниц

WordPress: Добавление контента в тег head страниц

Одной из задач, решаемых с помощью WordPress плагинов является добавление пользовательского контента в тег head страниц, генерируемых WordPress. Данный рецепт покажет вам, как зарегистрировать нужный action hook, чтобы иметь возможность добавить такой дополнительный контент.

В предыдущей статье Wordpress: С чего начинаются плагины мы разобрали самую основу создания плагинов. В этой статье мы продвинемся немного дальше.

Дабы этот пример не был совсем уж бесполезным, мы напишем плагин, который будет вставлять JavaScript код Google Analytics в теге head страницы, который многие используют, чтобы иметь статистику по своему сайту. Итак начнем по шагам:

  1. Пройдите в директорию плагинов движка WordPress: wp-content/plugins
  2. Создайте там новую директорию и назовите её page-header-output
  3. Зайдите внутрь директории и создайте новый текстовый файл назовите его page-header-output.php
  4. Откройте ваш новый файл в текстовом редакторе и добавьте необходимый комментарий-заголовок назвав плагин "Page Header Output."
    <?php
    /*
        Plugin Name: Plugin Header Output
        Plugin URI:
        Description: Page Header Output
        Version: 1.0
        Author: Somebody
        Author URI: http://xxxxxx.xx/
        License: GPLv2
    */
    
    
  5. После комментария добавьте следующую строку кода, чтобы зарегистрировать функцию, которая будет вызываться в момент, когда WordPress формирует тег head страницы:
        add_action ('wp_head', 'page_header_output');
    
  6. Далее реализуем функцию 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 }
    
  7. Сохраняем файл
  8. Идем в админку нашего сайта во вкладку Plugins
  9. Находим наш плагин в списке и активируем его

Теперь перейдите на главную страницу вашего сайта и откройте её HTML-код. Если вы все сделали правильно то сможете увидеть что в теге head страницы теперь выводится необходимый Javascript-код.

Итак, что же мы сделали? Функция add_action используется для привязки кода плагинов к одному из двух типов WordPress хуков: action hooks. Хуки в WordPress позволяют добавлять различные функциональные возможности при помощи callback-функций. action hooks позволяют запустить нужный код в нужных точках, в нужный момент при формировании страницы фронтенда или админки, которая затем будет отображаться пользователю. Этот код обычно добавляет содержимое на сайт или изменяет способ выполнения данного действия.

Рассмотрим написанный код. Первая строка кода связывает нашу функцию page_header_output с action hook по имени wp_head, он является одним из более чем 500 action hooks, которые доступны в текущих версиях WordPress. Хук wp_head позволяет любой привязанной к нему функции добавить необходимый вам контент в тег head страницы перед её отображением пользователю.

Как было сказано в данном случае контент будет отображаться, т.е. мы можем написать нашу функцию обратного вызова очень просто, поместив код Google Analytics между тегами ?> и <?php

Можно заметить, что в настоящее время код не очень гибкий, поскольку вы должны захардкодить свой ​​номер учетной записи Google Analytics для того, чтобы аналитика нормально функционировала. В дальнейших уроках я покажу, как исправить это досадное недоразумение.

Давайте взглянем поближе на функцию add_action:

add_action('hook_name', 'your_function_name', [priority], [accepted_args]);

Первый параметр это имя хука WordPress к которому мы хотим привязать нашу callback-функцию. Это имя нужно постараться написать без ошибок; в противном случае наша функция не будет вываться, и к тому же мы не увидим никакого сообщения об ошибке - помните об этом факте.

Вторым параметром является имя callback-функции, которая будет вызываться для выполнения действий. Эта функция может иметь любое имя, с единственным условием - оно должно быть уникальным, чтобы избежать коллизий с именами функций из других плагинов, или из кода WordPress. В этом рецепте имя функции строится из имени плагина, что делает его более-менее уникальным.

Параметр priority является необязательным(заключен в квадратные скобки) и имеет значение по умолчанию - 10. Это приоритет выполнения привязанной callback-функции относительно других функций, привязанных к этому же хуку.

В любом плагине можно зарегистрировать одну или более callback-функции на нужный action hook, с помощью функции add_action. Функции навешенные на один и тот же хук ставятся в очередь. Так вот параметр priority - делает эту очередь приоритетной.

Если вам нужно, чтобы ваша функция вызывалась до или после других функций, навешенных на этот же хук - измените значение параметра priority. Тут как в линуксе: чем меньше число, тем больше приоритет.

Последний параметр: accepted_args, имеет значение по умолчанию 1. Ему всегда должно быть присвоено число. Этот параметр устанавливает число агрументов, которые будут переданы привязанной callback-функции.

Некоторые из хуков не передают никаких параметров в callback-функции, некоторые передают один (тут значение по-умолчанию подходит очень хорошо), а некоторые хуки передают более одного параметра, вот в этом случае и требуется указывать параметр accepted_args.

Хук wp_head, рассматриваемый здесь, не передает никаких параметров своим callback-функциям, но другие хуки могут передавать. Некоторые из этих хуков будут рассмотрены в будущем.

Кстати, функции, прикрепленные к хуку можно запустить на выполнение и "в ручную" вызвав функцию do_action:

do_action ($tag, [$arg1, ... ]);

Первый параметр это строка - имя хука, callback-функции, которого нужно запустить на выполнение. Второй и далее параметры это аргументы для callback-функций.

Мало того этот механизм можно использовать для создания собственных уникальных хуков. Первый параметр это будет имя вашего уникального хука назовем его MyBestHook. Где-то в коде вешаем на наш хук столько функций сколько нужно:

add_action( 'MyBestHook', 'myFunc1', 10, 2);
add_action( 'MyBestHook', 'myFunc2', 10, 2);

function myFunc1($param1, $param2) {
	// ...
}
function myFunc2($param1, $param2) {
	// ...
}

Далее при нужных обстоятельствах, в нужное время вызываем наш хук при помощи do_action:

if ( ... ) {
	do_action( 'MyBestHook', 'some arg 1', 'some arg 2');
} else {
	do_action( 'MyBestHook', 'some arg 3', 'some arg 4');
}

Вот такие пироги с хуками. Продолжение следует...

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


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



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