Инициализационные хуки WordPress: преимущества и типичные ошибки. Типичные ошибки при использовании хуков инициализации

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

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

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

Введение в инициализационные хуки

WordPress предоставляет большой набор хуков для использования в разработке плагинов и тем. В стандартном запросе все хуки действий выполняются в определенной последовательности. А именно, все они исполняются после того, как ядро WordPress завершает процесс загрузки.

Так, инициализационные хуки используются в основном, как вы уже догадались, для инициализации процесса в темах и плагинах. Давайте посмотрим на доступные хуки init в порядке их исполнения:

  • init выполняется после того, как WordPress закончила загрузку, но до отправки заголовков.
  • widgets_init применяется для регистрации боковых виджетов приложения. Функция register_widget выполняется внутри этого хука.
  • admin_init выполняется в первую очередь, когда пользователь заходит в администраторскую часть WordPress. Обычно он используется для инициализации настроек, специфичных для админки.

Кроме этих трех, существует также хук, называемый admin_bar_init. Он запускается после того, как инициализирована администраторская панель. WordPress Codex не дает пояснения к этому хуку, и его использует небольшое число плагинов.

WordPress исполняет каждый хук в определенной последовательности (которую вы можете посмотреть в разделе Codex). Важно учитывать порядок выполнения при использовании каждого хука действий. Посмотрите на следующие сценарии, чтобы лучше понять разницу.

Определение admin_ init внутри хука init

Если нужно, мы можем определять хуки WordPress одни внутри других. В стандартном запросе, хук admin_init исполняется перед хуком init. Поэтому давайте попробуем получить что-нибудь, встроив admin_init внутри хука init:

add_action("init", "test_init"); function test_init(){ add_action("admin_init", "test_admin_init"); } function test_admin_init() { echo "Admin Init Inside Init"; }

function test_init () {

echo "Admin Init Inside Init" ;

После выполнения этого кода, используя конструкцию echo, мы получим желаемый результат.

Определение внутри init хука admin_ init

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

add_action("admin_init", "test_admin_init"); function test_admin_init() { add_action("init", "test_init"); } function test_init() { echo "Init Inside Admin Init"; }

add_action ("admin_init" , "test_admin_init" ) ;

function test_admin_init () {

add_action ("init" , "test_init" ) ;

function test_init () {

echo "Init Inside Admin Init" ;

Как и ожидалось, здесь мы не получим никакого результата, потому что хук init выполняется до хука admin_init, и таким образом он становится недоступным после определения admin_init.
Как видите, для создания удачных плагинов необходимо понимать процедуру и порядок выполнения хуков. Последовательность запуска важна для всех хуков в WordPress.

Исследование хуков init и admin_ init

Среди множества хуков инициализации, init и admin_init стоят изучения, так как именно они широко используются во многих плагинах. Поэтому использование других хуков инициализации всегда сравнивается непосредственно с этими двумя.

Сейчас мы рассмотрим функциональность init и admin_init хуков.

init исполняется в каждом запросе как для фронт-энда, так и для администраторской части WordPress сайта. admin_init выполняется после того, как администраторская часть завершает процесс загрузки. Соответственно, он тоже выполняется в каждом запросе на чтение страницы в админской части сайта. Чтобы воспользоваться его преимуществами, пользователи должны быть авторизованы.

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

Как правильно использовать init хуки

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

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

init хук

  • Регистрация пользовательских типов записей – WordPress рекомендует использовать initхук для регистрации новых пользовательских типов контента.
  • Инициализация конфигурации и настроек вашего плагина – конфигурации и настройки плагина должны быть определены в каждом запросе и, следовательно, наилучшим подходом к этому будет включить их в хук init.
  • Доступ к данным, отправленным пользователем (Используя $_GET и $_POST) – Мы можем без каких-либо действий перехватить данные, отправленные пользователем, но рекомендуется использовать init хук, так как при этом гарантируется выполнение действия в каждом запросе.
  • Добавление новых правил перезаписи – Можно определить новые правила перезаписи, используя хук init, но помните, что новые правила возымеют эффект только после обновления всех правил перезаписи.
  • Добавление или удаление пользовательских действий – Плагины содержат множество пользовательских действий, позволяющих расширить функциональность. Могут быть такие сценарии, где нам потребуется добавить новые пользовательские действия, равно как удалить существующие. В этих случаях, необходимо выполнять эти действия внутри init хука.
  • Указание пути к языковым файлам плагина — WordPress предлагает многоязыковую поддержку, и поэтому мы можем загрузить файл, в котором содержатся переведенные строки. Это также можно разместить внутри init хука.

Хук admin_ init.

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

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

Типичные ошибки при использовании хуков инициализации

Часто мы обнаруживаем сценарии, в которых разработчики неправильно понимают, как использовать хуки инициализации. Неправильное их использование может привести к проблемам с производительностью (а также к низкому качеству ваших плагинов).

Давайте определим основные ошибки и найдем, как их избежать:

  • Обновление правил перезаписи – Это ресурсоемкая операция, которая обновляет и сортирует все правила перезаписи для добавления новых и удаления ненужных правил. Многие разработчики предпочитают обновлять правила перезаписи внутри действий init и заканчивают тем, что создают избыточную нагрузку в каждом запросе. Чтобы избежать этого, мы должны придумать, как провести обновление правил перезаписи вручную, используя кнопку, или обновлять их внутри таких нерегулярных действий, как сохранение настроек плагина.
  • Доступ к базе данных – Предоставление различной функциональности требует доступа к базе данных, но важно убрать лишние запросы к БД внутри хуков инициализации, так как в противном случае они будут выполняться в каждом запросе. В данном случае, идеальным решением будет встроить хуки с запросами к БД в функционально-специфичные хуки, чтобы избежать чрезмерной нагрузки.
  • Выполнение процедур обновления до новых версий – Чтобы иметь возможность обновить функционал плагинов до новых версий, в них должна быть продумана процедура апгрейда. Обычно разработчики применяют init хуки, чтобы проверить версии плагинов и настроек перед тем, как запустить процесс апгрейда. Мы можем позволить пользователям обновить плагин, предоставив им пользовательское окно, вместо автоматической проверки в каждом запросе.
  • Выполнение хуков инициализации вместо функционально-специфичных хуков – Это одна из самых типичных ошибок, допускаемых разработчиками. Существует множество хуков в WordPress, которые созданы для разных, уникальных целей. Важно использовать их, чтобы избежать возможных конфликтов и сделать код расширяемым. Такие хуки как admin_init и init, в принципе, могут использоваться вместо специальных, поэтому разработчики склонны применять их, не задумываясь о последствиях. Некоторые из типичных сценариев, где разработчики используют init и admin_init хуки вместо рекомендуемых:
  • admin _ menu – Можно добавлять страницы меню, используя функцию add_menu_page. Рекомендуется использовать admin_menu хук для создания страниц админки. Однако многие разработчики предпочитают применять admin_init, так как он исполняется после admin_menu хука.
  • wp _ enqueue _ scripts – Наиболее удачный способ добавления скриптов и стилей– это использовать wp_enqueue_scripts хук. Но многие применяют для загрузки скриптов и стилей wp_enqueue_script внутри init.

Существует много похожих ситуаций, где разработчики используют привычный хук init вместо функционально-специфичного хука, и этого нужно по возможности избегать.

Хуки инициализации: двигаемся дальше

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

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

Срабатывает перед подключением подобранного файла шаблона темы, например: single.php , page.php , search.php , 404.php и т.д. Этот фильтр используется для изменения пути до такого файла.

Фильтр срабатывает после события template_redirect и после того, как WordPress подберет файл, который будет использоваться в качестве файла шаблона. Для каждого типа страницы, файл разный: см. Иерархию файлов темы . Например, мы зашли на постоянную страницу, WordPress подбирает какой файл шаблона должен быть показан - это файл page.php: home/site.ru/wp-content/themes/mytheme/page.php . С помощью этого фильтра можно изменить путь такого файла.

Во время этого фильтра уже можно использовать условные теги и переменная $post уже определена.

Использование add_filter("template_include", "filter_function_name_11"); function filter_function_name_11($template) { // Фильтр... return $template; } $template(строка) Полный путь до файла, который будет подключен в качестве шаблона. Пр: home/wptest.ru/wp-content/themes/publisher/page.php . Примеры #1 Файл в каталоге темы

Шаблон постоянной странице можно задать создав файл в каталоге темы и в начале файла указать PHP комментарий:

Заголовок

Какой-то текст

class="no-js">