WordPress что такое хуки
Что Такое Хуки WordPress? – Полное Руководство для Начинающих
Хуки WordPress – это функции, которые позволяют вам манипулировать процедурой без изменения файла в ядре WordPress. Хук может быть применён как к событию (action hook), так и к фильтру (filter hook).
Хуки нужны любому пользователю WP. С их помощью можно создавать новые функции или редактировать дефолтные настройки тем (англ) и плагинов (англ).
Назначение Хуков WordPress
Основное назначение хуков – автоматический запуск функции. Кроме того, этот метод также даёт возможность изменять, расширять или ограничивать функциональность темы или плагина.
Пример хука в WordPress:
В этом примере мы видим, что для того, чтобы прикрепить функцию mytheme_enqueue_script к событию wp_enqueue_scripts был создан хук. Этот хук запускает новое событие на сайте, поэтому он называется хуком событий.
Хуки часто используются при создании компонентов плагина приложения. Они применяются не только в системах управления контентом (CMS), таких как WordPress, но и на сайтах электронной коммерции (англ) и на корпоративных интранет-сайтах.
Кроме того, как мы упоминали выше, хуки делятся на две категории: события и фильтры. С помощью хука событий мы добавляем процесс, в то время как хук фильтра используется, чтобы изменить значения процесса.
Как Пользоваться Хуками WordPress?
Для того, чтобы работать с хуками WordPress всё-таки понадобится немного знаний HTML (англ) и PHP. Однако даже если вы новичок в веб-разработке, с созданием хуков не должно возникнуть никаких проблем.
Достаточно просто перейти на страницу публикации и переключиться на текстовый редактор. Когда вы там, вы просто можете вставить готовый хук, скопированный с других сайтов или тот, который вы создали сами.
Создаём Хуки-События
Чтобы добавить хук-событие, вы должны активировать функцию add_action () в плагине WordPress. Эту функцию можно активировать, записав показанные ниже паттерны в файле functions.php:
Как мы видим выше, чтобы работать правильно, хуки WordPress используют шкалу приоритетов. Эта шкала является автоматическим порядковым значением, основанным на шкале от 1 до 999. Она определяет приоритет функций, связанных с этим конкретным хуком.
Обратите внимание на шаблон в этом примере:
Эта команда применима ко всем видам хуков-событий в WordPress.
А вот пример remove_filter :
Кроме того, вы также можете использовать команду remove_filter, чтобы отключить несколько фильтров в определённой последовательности. Вот пример:
Практические Примеры Хуков WordPress
Как мы уже упоминали, существует множество хуков, которые вы можете использовать для создания специальных функций WordPress. Вот некоторые из них.
admin_post_thumbnail_size
Хук должен выглядеть следующим образом:
Параметр $size может быть изменён. Допустим, вы хотите установить размер миниатюры в 240×240 пикселей, это будет выглядеть так:
Вы также можете задать нестандартный размер для вашей миниатюры, добавив функцию array(). Вот как будет выглядеть код:
В этом примере функция array () устанавливает желаемый размер миниатюры – 240×400 пикселей. Таким образом, вы можете подобрать наиболее подходящее расширение.
after_password_reset
Вот как он должен выглядеть:
customize_loaded_components
Однако важно отметить, что customize_loaded_components не может быть добавлен в тему, так как он срабатывает только во время события plugins_loaded.
Параметр $components представляет собой пакет основных функций для загрузки, а $this относится к объекту в существующем классе.
Вы можете настроить функцию array () так, чтобы она определяла, какие компоненты исключить. В приведённом выше примере показано, что виджеты и nav_menus являются компонентами, исключёнными из основного процесса.
Выводы
Подводя итог, можно сказать, что хуки WordPress – это функции, позволяющие изменить стандартную конфигурацию вашего сайта. С их помощью, вы можете добавлять специальные функции или деактивировать процессы без изменения файла ядра.
Хуки можно разделить на две категории: события и фильтры.
Хотя принципы создания хуков почти одинаковы, они выполняют совершенно разные функции.
Хук-событие используется для создания новых функций, а хук-фильтр используется для изменения существующего кода в файле function.php.
Кроме того, есть множество хуков, которые вы можете встроить в WordPress. Попробуйте поэкспериментировать с использованием различных типов хуков, чтобы манипулировать функциями на ваше усмотрение.
А поднакопив немного опыта, вы даже сможете создавать собственные плагины с этой фичей. Удачи!
Ольга уже около пяти лет работает менеджером в сфере IT. Написание технических заданий и инструкций — одна из её главных обязанностей. Её хобби — узнавать что-то новое и создавать интересные и полезные статьи о современных технологиях, веб-разработке, языках программирования и многом другом.
Хуки в WordPress (фильтры и события)
В этой я постарался собрать всю базовую информацию о хуках WordPress и объяснить её на пальцах. Принцип работы хуков не сложный, но далеко не все хорошо его понимают и это большое упущение, потому что хуки это очень мощный инструмент для изменения поведения ядра WP, создания плагинов и тем.
Есть два типа хуков:
Фильтр (filter) Изменяет значение переменной — получает значение и возвращает его (изменённое или нет). Событие (action) Запускает произвольный код — колбэк функция прикрепленный к хуку сработает в момент срабатывания хука в коде.
К хукам (фильтрам, событиям) прикрепляются PHP функции (callbacks), затем эти функции сработают, в момент срабатывания хука. Такое поведение в программировании называется перехват.
В функцию прикрепленную к хуку могут передаваться параметры (дополнительные данные). На основе этих данных в функции можно создавать какую-либо логику. Читайте ниже.
Простой пример хука-события (action):
Пример с передачей параметра:
В программной части фильтры и события — это одно и тоже, т.е. в коде работает и то и другое одинаково, можно например заменять функцию add_filter() на add_action() — все будет работать! Разделение нужно, потому что это разные вещи по смыслу.
Список всех хуков WP смотрите на странице «Все хуки WordPress».
Всего в WordPress их около 2000. Некоторые важные хуки я описал и продолжаю описывать, они находятся тут.
Как работают Фильтры в WordPress
Для работы фильтра используются две функции:
add_filter( hook_name, function, priority, args_num ) — добавляет/прикрепляет функцию к фильтру, которая будет вызвана в момент срабатывания фильтра. Такая функция называется «коллбэк-функция».
Пример
Еще пример
Как работают События в WordPress
Для работы события используются две функции:
Пример
Допустим, мы делаем тему и в каком-то месте темы нам нужно вызвать функцию, но мы заранее не знаем как функция будет называться. Т.е. пользователи сами будут добавлять функцию в это место.
Для этого в этом месте шаблона мы может вызвать не функцию а событие, назовем его my_action и затем прикрепить к этому событию функцию:
Приоритет хука
Приоритет важен когда к хуку прикрепляется несколько callback-функций. Приоритет определяет порядок, когда callback-функция будет выполняться по отношению к другим callback-функциям.
Приоритет указывается в третьем параметре для функции которая прикрепляет функцию к хуку:
Если две функции прикреплены к одном хуку с одинаковым приоритетом, то они будут выполняться в порядке их прикрепления.
Рассмотрим как работают приоритеты на примере:
В момент срабатывания хука init функции выполняться в следующем порядке:
Как видно, чем больше число приоритета, тем позднее выполниться хук.
Для фильтров приоритеты работают точно также.
Параметры хука
Например, когда WordPress сохраняет запись, запускается событие save_post. Этот хук может передать два параметра: ID записи и объект записи :
Однако можно указать что мы хотим получить 2 параметра. Для этого укажем четвертый параметр add_action() :
Ограничение в один параметр по умолчанию сделано для быстродействия системы хуков.
Для фильтров все работает аналогично
При создании фильтра в него можно передать сколько угодно параметров через запятую:
Теперь, при добавлении коллбэка. Мы можем использовать эти параметры. Для этого нужно указать количество передаваемых параметров:
Функция фильтра будет выглядеть так:
Удаление хука
Чтобы удалить сам хук, нужно изменить код и удалить вызов хука, обычно это сделать невозможно, потому что хуки находятся в ядре или в плагине. Здесь мы поговорим о том как можно удалить прикрепленный к хуку коллбэк-функцию.
Для удаления функции привязанной к фильтру или событию, используется одна из функций:
Для удаления хука нужно знать:
Если нужно удалить хук с приоритетом отличным от 10 и вы его не указали, то хук НЕ будет удален!
Пример удаления хука
В теме нам нужно удалить это событие, чтобы текст в подвале не выводился. Для этого в файле темы functions.php можно прописать такой код:
Важный момент: удалять хук нужно после того как он добавлен, но еще не отработал.
Еще пример удаления хука
Демонстрация добавления и удаления хука в одном коде:
Удаление с приоритетом (приоритет должен совпадать):
Удаление статического метода класса:
Удаление хука добавленного анонимной функцией
Удалить хук с замыканием не так просто, например такой код не сработает:
Надежно удалить хук с использованием замыкания, можно только если замыкание создавалось в переменную и у нас есть доступ к этой переменной:
Ненадежный, но все же способ удалить хук с замыканием, когда у нас нет доступа к замыканию:
Пример её использования:
Создание своего хука
При написании плагина, в него можно и нужно добавлять хуки, чтобы дать возможность пользователям внедряться в код плагина, не меняя код самого плагина. Так, прикрепляя коллбэки к вашему хуку пользователи вашего плагина смогут изменять его код из кода другого плагина или темы.
Чтобы создать событие или фильтр в коде, к которому потом можно будет добавлять функции, используется функция
Синтаксис у этих функций такой:
Пример создания хука-события
Допустим, у нас есть плагин опроса и при голосовании хорошо бы добавить событие этого голосования. Чтобы можно было из другого кода подключиться к нашему плагину и, допустим, при голосовании, записать какие-то данные пользователя к себе в базу данных. Такой функционал может не предусматриваться плагином, но он может пригодится пользователям вашего плагина и при наличии хука, они легко его допишут.
Теперь, разработчик темы или другого плагина может использовать этот хук и выполнить в момент события нужные ему действия.
Функции хуков
Вспомогательные WordPress функции для фильтров
В WordPress есть специальные функции, которые упрощают работу с фильтрами.
Чтобы было понятнее как это работает, давайте посмотрим на вызов фильтра load_default_widgets :
При вызове функции wp_maybe_load_widgets() срабатывает фильтр. По умолчанию он всегда возвращает true и условие не выполняется — виджет подключаются. А в примерах выше мы возвращаем false и условие выполняется — виджеты не подключаются.
Это демонстративный пример из кода WordPress, чтобы объяснить принцип работы. В практике его лучше не использовать, для отключения виджетов используйте код из описания функции unregister_widget().
Аналогичный пример
Еще один пример
Закроем возможность сброса пароля, с помощью фильтра allow_password_reset :
Теперь все пользователи не смогут сбрасывать пароли на сайте.
Список всех хуков WordPress
Получить список всех хуков может понадобится. В процессе разработки или при поиске ошибок.
Следующий код выведет список всех хуков (фильтров и событий), которые зарегистрированы на момент вызова этого кода:
Как получить функции прикрепленные к указанному хуку?
Часто бывает нужно посмотреть, какие функции прикреплены к отдельному фильтру или событию.
Теперь, чтобы вывести список всех функций/методов прикрепленных к фильтру или событию нужно вызвать эту функцию, и указать ей название хука.
Быстрые и дешевые лайки на любые посты в Instagram можно приобрести на сайте Doctor SMM с гарантией на выполнение заказа. Только здесь Вы найдете ресурс на свой вкус! На сайте представлен широкий выбор формата лайков: русские, англоязычные, автолайки, тв-лайки, микс и пр. Делайте заказ сейчас и получайте выгодные оптовые скидки!
Тимур, Вы, конечно, молодец! Спасибо за трудолюбие, но.
Всегда немного трудно читать материалы, которые готовит «кулибин», который (при неглупом уме) сам до всего докопался, но системного образования и понимания не получил.
Если такому человеку немного почитать и поразбираться на глубоком уровне, то цены ему, обычно, не бывает! Он становится в уровень с мировым развитием в данной области и, благодаря природному уму, способен сделать чего-то больше.
В программировании уже более 50 лет такая техника и технология называется «перехват». Об этом написаны куча учебников и руководств.
Беда в том, что когда Вы создаёте параллельную понятийную вселенную со своими терминами и представлением о жизни, то она не согласуется с остальными материалами и знаниями, накопленными человечеством, а значит живёт своей жизнью. Либо Вы создадите глобальное знание, которое перебьёт остальные источники и станет доминирующей в мире, либо вашу вселенную ожидает упадок.
Именно поэтому обычно сначала изучают текущее развитие вопроса в мире, а потом уже пишут своё на данную тему, но совместимое и/или расширяющее представление о предмете.
10 полезных хук-хаков для WordPress
ВВЕДЕНИЕ
Хуки являются очень полезными фишками в WordPress. Они позволяют как бы «посадить» пользовательскую функцию «на крючок» функции существующей, разрешая тем самым изменять функциональность WordPress без внесения изменений в файлы ядра движка. В этой статье мы представляем Вам 10 особенно полезных, готовых к использованию хуков для WordPress, с примерами и пояснениями их исходников.
ЧТО ТАКОЕ ХУК?
Для достижения определенного эффекта нам нужно слегка изменить принцип работы WordPress. Некоторые модификации необходимо внести в файлы, которые были названы разработчиками файлами ядра – они нужны для того, чтобы WordPress работал должным образом.
Но изменение файлов ядра – плохая идея: это может создать брешь в системе безопасности блога. Также, все модификации исчезнут, как только Вы обновите движок до новой версии.
Однако, расширение функциональности все же необходимо. Для этого разработчиками был придуман Plugin API.
Хуки являются одним из главных блоков для построения плагинов. Почти каждый подключаемый плагин использует хуки для расширения функциональности WordPress.
КАК ИСПОЛЬЗОВАТЬ ХУКИ В ВАШЕМ БЛОГЕ
Пока Вы не написали свой плагин, Вы должны записать хуки в файл functions.php. Этот файл находится в директории wp-content/themes/yourtheme (где /yourtheme – директория, в которой находится текущая тема).
Вот пример, который показывает, как подключить Вашу пользовательскую функцию к функции ядра движка:
В этом примере мы подключили пользовательскую функцию myCustomFunction() к функции ядра publish_post(). Функция myCustomFunction() будет выполняться при каждом выполнении функции publish_post().
Конечно, мы можем также удалить хук, используя функцию remove_action():
1. ОТКЛЮЧАЕМ АВТОМАТИЧСКОЕ ФОРМАТИРОВАНИЕ В WORDPRESS
Проблема.
Вы, наверное, уже замечали, что типограф WordPress по умолчанию превращает «прямые» кавычки в «кривые» и делает другие мелкие изменения в форматировании поста.
Это хорошо, если блоггер размещает обычный контент (подразумеваются обычный текст и картинки). Но некоторые постят исходный код, чтобы потом его обсуждать, и они будут очень недовольны, когда из-за этих «кривых» кавычек интерпретатор иди компилятор выдадут им сообщения о синтаксических ошибках.
Решение.
Просто вставьте в файл functions.php нижеследующий код:
После того, как Вы это сделали, можете использовать тэг [raw] для того, чтобы текст поста был не отформатирован автоматически:
[raw]This text will not be automatically formatted.[/raw]
Объяснение кода.
Первым делом, мы создаем функцию, которая, основываясь на регулярных выражениях, находит тэг [raw] в содержании Вашего поста.
Далее, мы привязываем нашу функцию my_formatter() к функции the_content(), что означает выполнение нашей функции всякий раз, когда вызывается функция the_content().
Для того, чтобы отключить автоформатирование, мы использовали функцию remove_filter().
2. ОПРЕДЕЛЯЕМ БРАУЗЕР ПОСЕТИТЕЛЯ ПРИ ПОМОЩИ ХУКОВ
Проблема.
Кросс-браузерная совместимость – это наиболее распространенная проблема в web-разработке. Вы сэкономите много нервов и времени, если сможете определить браузер пользователя, зашедшего на Ваш блог, а затем создав CSS-класс для тэга body под каждый из браузеров.
Решение.
Ничего сложного: просто вставьте нижеследующий код в файл functions.php, сохраните его – все готово!
После того, как Вы сохраните файл, функция автоматически будет добавлять CSS-класс, соответствующий пользовательскому браузеру, для тэга body:
Объяснение кода.
WordPress имеет глобальные переменные, которые возвращают true, если пользователь использует соответствующий браузер. Если пользователь использует браузер Google Chrome, то переменная $is_chrome примет значение true. Вот для чего мы и создаем функцию browser_body_class(). После этого мы присоединяем ее к WordPress функции body_class().
3. ОПРЕДЕЛЕНИЕ ТЕКСТА ПО УМОЛЧАНИЮ В РЕДАКТОРЕ TinyMCE
Проблема.
Многие блоггеры почти всегда используют для своего блога один и тот же формат. Сообщения в моем блоге WpRecipes.com всегда отображаются одинаково: текст, код, еще немного текста.
Можно сэкономить немало времени, если научить TinyMCE отображать какой-нибудь текст по умолчанию.
Решение.
Как всегда, решением является хук. Копируем код в файл functions.php и смотрим, как он работает.
Объяснение кода.
Этот код хоть и простой, но очень мощный. Просто создаем функцию, которая возвращает требуемый текст (в этом примере мы определяем текст, который спрашивает у посетителей о подписке на RSS-ленту), и присоединяем ее к WordPress-функции default_content(). Вот так.
4. ВСТАВЛЯЕМ КОНТЕНТ АВТОМАТИЧЕСКИ ПОСЛЕ КАЖДОГО ПОСТА
Проблема.
В большинстве блогов для вывода контента после каждого поста файл single.php, но вот беда: этот контент не будет отображаться в RSS-ленте. Хуки помогут исправить эту проблему.
Решение.
Все то же самое – просто копируем следующий код в файл fucntions.php.
Enjoyed this article?
Subscribe to our RSS feed and never miss a recipe!
Объяснение кода.
Суть функции insertFootNote() проста: он лишь конкатенирует желаемый текст к переменной $content, в которой хранится содержание поста.
Затем, мы присоединяем нашу функцию insertFootNote() к функции the_content().
Видите в строке 2 вот такой код:
Если Вам нужно, чтобы текст попадал в RSS-ленту, то замените предыдущий код на этот:
5. ОТКЛЮЧАЕМ СООБЩЕНИЕ С ПРОСЬБОЙ ОБНОВИТЬСЯ В ПАНЕЛИ УПРАВЛЕНИЯ WORDPRESS
Проблема.
Вы можете видеть информацию о наличии новой версии WordPress вверху дашборда. Это действительно хорошая штука, так как обновление закрывает дыры в безопасности и позволяет пользоваться Вам последними возможностями движка. Но если блог не Ваш лично, а является проектом для кого-нибудь из клиентов, то давать возможность клиентам самим обновляться – не есть хорошая идея.
Решение.
Просто вставьте следующий код в файл fucntions.php.
После того, как Вы сохраните файл functions.php, сообщения Вы больше не увидите.
Объяснение кода.
Для начала, убедимся, что текущий пользователь обладает достаточными правами администратора, чтобы можно было обновить WordPress. Как только мы в этом убедились, создаем пару хуков, которые переписывают правила отображения сообщений в дашборде.
6. ОТКЛЮЧАЕМ АВТОСОХРАНЕНИЕ ПОСТОВ
Проблема.
WordPress периодически сохраняет пост по мере его введения. Это полезная возможность, но иногда она не требуется.
Решение.
Для того, чтобы отключить автосохранение поста, просто откройте файл functions.php и вставьте в него следующий код.
Объяснение кода.
И вновь, ничего сложного: мы просто создаем функцию, которая отключается автосохранение и привязываем ее к WordPress-функции wp_print_scripts().
7. ИЗБАВЛЯЕМСЯ ОТ ПОВТОРЯЮЩЕГОСЯ КОНТЕНТА НА СТРАНИЦАХ С КОММЕНТАРИЯМИ
Проблема.
Повторяющийся контент эта довольно распространенная SEO-проблема.
Введенная в WordPress версии 2.7 система разбиения комментариев на страницы эту проблему не решает.
Для предупреждения повторяющегося контента в комментариях будем использовать атрибут rel=«canonical».
Решение.
Копируем следующий код и вставляем его в файл functions.php.
Объяснение кода.
Сначала, мы создаем функцию, которая добавляет к каждой странице с комментариями, кроме первой, тэг link с атрибутом rel=«canonical». Затем, присоединяем эту функцию к WordPress-функци wp_head().
8. ПОЛУЧЕНИЕ ПОСТА ИЛИ СТРАНИЦЫ В КАЧЕСТВЕ PHP-ПЕРЕМЕННОЙ
Проблема.
Возможность получить текущий пост или целую страницу в качестве PHP переменной – действительно крутая вещь. Скажем, Вы можете заменять некоторые части контента при помощи функции str_replace() или делать с ним еще что-нибудь.
Решение.
И снова ничего сложного. Делаем все то же самое: вставляем следующий код в файл functions.php.
Объяснение кода.
9. ИСПОЛЬЗУЕМ ХУКИ И CRON ДЛЯ СОБЫТИЙ ПО РАСПИСАНИЮ
Проблема.
Вы, наверное, уже знаете, что WordPress может использовать события по расписанию. К примеру, можно публиковать посты в конкретное, установленное заранее, время. Используя хуки и wp-cron, мы можем запросто задать расписание для нашего собственного события. В следующем примере мы заставим блог отправлять нам сообщения на e-mail один раз каждый час.
Решение.
Вставляем следующий код в файл functions.php.
Объяснение кода.
Первое, что мы сделаем, конечно, — это создадим функцию, которая будет выполнять требуемое действие. В этом примере эта функция называется my_task_function() и она просто отправляет письмо на указанный e-mail адрес.
Для того, чтобы запланировать выполнение этой функции, мы будем использовать функцию wp_schedule_event(). Последним аргументом, передаваемым ей, будет наш хук, поэтому мы «цепляем» нашу функцию my_task_function() к my_task_hook.
10. СПИСОК ВСЕХ «ХУКНУТЫХ» ФУНКЦИЙ
Проблема.
Когда что-то идет не так, здорово может пригодиться список всех «хукнутых» функций.
Решение.
Как и все предыдущие фрагменты кода следующий также необходимо вставить в файл functions.php. Только не забудьте удалить его после использования. Если Вы этого не сделаете, то сообщения будут появляться и после отладки.
После того, как Вы вставите этот код в файл functions.php, вызовите функцию list_hooked_functions(). Она и покажет Вам список всех «хукнутых» функций.
Объяснение кода.
Данный код выясняет, передается ли имя хука в качестве аргумента функции. Если передается, то на экран выводится имя хука. Также можно посмотреть хуки только для определенной функции: