WordPress: Использование хуков фильтров

WordPress: Использование хуков фильтров

Помимо добавления функциональности или контента, часто нужно работать с контентом иным образом. Например модифицировать или удалять его частично или полностью перед тем тем как он будет показан пользователю на странице. Данную возможность в WordPress предоставляют так называемые filter хуки. filter хуки — это второй тип хуков в WordPress. Напомню, что нам уже известен один вид хуков: action. В этом рецепте мы напишем плагин, который будет использовать filter хук для модификации заголовков страниц, а конкретно он будет добавлять к заголовку текущей страницы тип контента этой самой страницы.

  1. Перейдите в каталог плагинов WordPress: wp-content/plugins
  2. Создайте новую директорию для плагина под названием title-filter
  3. Зайдите в директорию плагина и создайте php-файл: title-filter.php
  4. Откройте ваш новый файл в текстовом редакторе и добавьте необходимый комментарий-заголовок назвав плагин "Title Filter"

     

    <?php

    /*

        Plugin Name: Title Filter

        Plugin URI:

        Description: Page Title Filter

        Version: 1.0

        Author: Somebody

        Author URI: http://xxxxxx.xx/

        License: GPLv2

    */

  5. Добавьте следующую строку кода, которая прикрепит функцию к хуку wp_title, который выполняется когда WordPress подготавливает заголовок страницы (title) перед выводом его в тег head страницы:

    add_filter( 'wp_title', 'title_filter' );

  6. Далее добавим реализацию прикрепленной callback-функции:

     

    function title_filter( WordPress: Использование хуков фильтров ) {

        // Установим в заголовок тип контента

        if ( is_front_page() )

            $new_title = 'Front Page >> ';

        elseif ( get_post_type() == 'page' )

            $new_title = 'Page >> ';

        elseif ( get_post_type() == 'post' )

            $new_title = 'Post >> ';

     

        if ( isset( $new_title ) ) {

            return $new_title . WordPress: Использование хуков фильтров;

        }

     

        return WordPress: Использование хуков фильтров;

    }

  7. Сохраняем файл
  8. Идем в админку нашего сайта во вкладку Plugins
  9. Находим наш плагин в списке и активируем его

Если вы все сделали правильно, то увидите что ваши заголовки страниц приняли вид: ТИП >> ЗАГОЛОВОК

Как это работает…

Функция add_filter используется для того что бы вы могли подцеплять к хукам типа filter свои callback-функции. Хуки типа filter позволяют плагинам изменять, дополнять, удалять или полностью менять данные в процессе их подготовки WordPress — ом перед тем как он отдаст их пользователю. Для этого в callback-функции хуков фильтров должны принимать аргумент — данные с которыми нужно будет что-то сделать.

Про функции filter-хуков удобно думать так как будто это действительно некие фильтры в которые втекают и вытекают данные, с которыми в этих фильтрах что то происходит.

В отличии от callback-функций action — хуков в callback-функциях filter-хуков желательно воздержаться от непосредственно вывода данных в поток при помощи инструкция типа print, echo и т.п. т.к. работа этих функций происходит до того момента как содержимое будет полностью готово для отправки пользователю то результаты могут быть непредсказуемы и ожидаемая строка, которую вы выведете с помощью echo например, в итоге может оказаться где угодно на странице. Вместо этого callback-функции filter-хуков обязаны вернуть результат своей работы при помощи инструкции return.

При более детальном взгляде можно заметить сходство функции add_filter с уже знакомой нам функцией add_action, с которой мы познакомились ранее:

add_filter( $hook_name, $your_function_name, [$priority], [$accepted_args] );

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

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

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

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

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

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

Помимо демонстрации того как изменить заголовок страницы этот наш плагин так же демонстрирует как можно использовать некоторые WordPress функции-условия и WordPres функции-запросы.

Функция is_front_page очень удобна, когда нужно сделать так что бы код выполнялся только на фронтенде, но не в админке (или наоборот с инвертированием результата). Эта функция вернет Boolean true или false и её очень удобно использовать в операторах-условиях.

Помимо posts, pages и пользовательских типов постов, WordPress может отображать множество информации на сайте. Для создания плагинов, которые будут адаптироваться ко всем этим типам контента, функция get_post_type может быть очень удобна, она возвращает тип WordPress поста.

Так же по аналогии с функцией do_action для action хуков, для filter хуков так же существует функция явного вызова на выполнение всех прикрепленных хуку функций это функция : apply_filters

apply_filters( $tag, $value, $var ... );

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

 

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

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

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

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

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

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

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