Как найти в WordPress нужный хук
Вопрос задан
Изменён 2 года 2 месяца назад
Просмотрен 202 раза
Как найти в WordPress требуемый хук, чтобы подцепить на него свою функцию. Может быть, существует какой-то принцип поиска, подскажите хоть что-то по методологии поиска.
- wordpress
Поддерживая ответ SeVlad, добавлю, что методология поиска актуальных хуков всегда одна — глобальный поиск по файлам ядра. Делать это на сервере через grep
, открывая потом файлы один за другим, — крайне неудобно.
Надо иметь локальную копию всех файлов ядра и плагинов (если и в них нужно искать хуки) и вести поиск с помощью современной IDE, например, PhpStorm. IDE индексирует файлы проекта и проводит поиск мгновенно, с выдачей кратких результатов в окне поиска, откуда можно сразу открывать файлы для дальнейшего изучения.
Можно действовать иначе — открыть нужную вам функцию в ядре, например, wp_insert_post()
и смотреть её код на наличие хуков, которые она вызывает. Если внутри неё есть какие-то вызываемые функции, перейти к ним можно через Ctrl+Click
, а вернуться назад через Ctrl+Alt+Left
.
В общем, IDE — наиболее быстрый способ, чтобы что-то понять в коде ядра.
Как найти в WordPress требуемый хук, чтобы подцепить на него свою функцию. Может быть, существует какой-то принцип поиска, подскажите хоть что-то по методологии поиска.
Оф. список хуков и на русском (может быть не всё актуально)
Названия же интуитивно понятны. add
— добавить, get
— получить, user
(s) — пользователь(ли), post
— запись и тд.
Зарегистрируйтесь или войдите
Регистрация через Google Регистрация через Facebook Регистрация через почтуОтправить без регистрации
ПочтаНеобходима, но никому не показывается
Отправить без регистрации
ПочтаНеобходима, но никому не показывается
By clicking “Отправить ответ”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.
Сигналы Django вместо хуков WordPress
Статья из цикла «взгляд на Python и Django глазами PHP, WordPress разработчика».
Задача: В момент сохранения поста (по джанговски — модели) через админку Django необходимо выполнить некий код. Например, отправить запрос к API маркетплейса.
Как это решается в WordPress. Если коротко, то хуками или фильтрами фильтрами (второе кратно реже). Находим в документации необходимый хук или фильтр, который срабатывает в момент сохранения нужно нам поста, при помощи add_action или add_filter регистрируем функцию, которая будет срабатывать в этот момент, а в самой функции реализуем процесс отправки запроса по API.
Как это решается в Django. Хоть в Джанго и нет привычного любому WP-шнику механизма хуков, но за то есть Сигналы, которые во многом на этот самый механизм хуков похожи. Дословно в документации сказано следующее:
Django включает в себя «диспетчер сигналов», который помогает разделенным приложениям получать уведомления о действиях, происходящих в других частях фреймворка. Иными словами, сигналы позволяют определенным отправителям уведомлять набор получателей о том, что произошло какое-то действие.
Или, говоря привычным ВПшнику языком — в коде основных функций Django существуют хуки, сигналы, которые срабатывают во время тех или иных событий. Например:
django.db.models.signals.pre_save & django.db.models.signals.post_save — Отправляется до или после вызова save() метода модели.
django.db.models.signals.pre_delete & django.db.models.signals.post_delete — Отправляется до или после delete() вызова delete() метода модели или метода набора запросов .
django.db.models.signals.m2m_changed — Отправляется при изменении ManyToManyFieldмодели.
django.core.signals.request_started & django.core.signals.request_finished — Отправляется, когда Django запускает или завершает HTTP-запрос.
Более полный список существующих сигналов можно посмотреть тут.
Выполнение кода при сохранении поста Django
Разберём пример. В файле models.py у нас зарегистрирована модель ProductCategory, а ниже, начиная с from django.db.models.signals import pre_save — обработчик сигнала, который срабатывает всякий раз, когда мы сохраняем модель ProductCategory. В примере используем сигнал pre_save.
class ProductCategory(MPTTModel):
title = models.CharField(max_length=50, unique=True, verbose_name='Название')
slug = models.SlugField(max_length=150, verbose_name='slug', null=False, unique=True)
parent = TreeForeignKey('self', on_delete=models.PROTECT, null=True, blank=True, related_name='children',
db_index=True, verbose_name='Родительская категория')
class Meta:
ordering = ['pk']
verbose_name = 'Категория'
verbose_name_plural = 'Категории'
from django.db.models.signals import pre_save
from django.dispatch import receiver
@receiver(pre_save, sender=ProductCategory)
def my_callback(sender, **kwargs):
print('Сработал сигнал сохранения категории')
Как получить ID сохраняемого поста (записи) в Django
На примере сигнала post_save код сигнала Джаного для получения сохраняемого поста будет выглядеть так:
from django. db.models.signals import post_save
from django.dispatch import receiver
@receiver(post_save, sender=ProductCategory)
def my_callback(sender, instance, raw, using, update_fields, created, **kwargs):
print('Сработал сигнал сохранения категории. ID категории смотри ниже:')
print(instance.id) # собственно выводим ID сохраняемой категории
Конечно, с сигналами не так удобном работать в том плане, что в отличии от привычных вордпресовцу хуков и фильтров вмести с ними не передаются дополнительные параметры, точнее передаются, но далеко не все и не так, как это реализовано в в WordPress. Но, согласитесь, что это всё равно удобно и довольно просто.
Как получить значение произвольного поля при сохранении
Как вы уже поняли, основная «вкусняшка» находится в instance. Например, если в нашей модели Django определено поле ozon_id
class ProductCategory(MPTTModel):
ozon_id = models. PositiveIntegerField(verbose_name='OZON ID', null=True, blank=True)
...
@receiver(post_save, sender=ProductCategory)
def my_callback(sender, instance, raw, using, update_fields, created, **kwargs):
print(instance.ozon_id) # выводим значение поля ozon_id сохраняемой категории
Если вы обратили внимание, то в примерах у коллбэк функции я использовал разное количество аргументов. По факту, если смотреть на последний пример, то для работоспособности нам можно записать всё так:
def my_callback(instance, **kwargs):
print(instance.ozon_id)
т.е в обязательном порядке использовать только **kwargs и непосредственно тот аргумент с которым работаем (в нашем случае это instance).
Как видите, сигналы Django очень полезная и важная штука, разобраться с которой стоит обязательно.
2023-06-18 2023-07-16 | Максим | 0 комментариев | Документация | python, wordpressкрючков | Ресурсы для разработчиков WordPress
Action Hook: Срабатывает после активации плагина.
Источник: wp-admin/includes/plugin.php:718
Используется 1 функцией | Использует 0 функций
Action Hook: Срабатывает после активации сетевого сайта.
Источник: wp-admin/network/sites.php:266
Используется 0 функциями | Использует 0 функций
Action Hook: Срабатывает до загрузки страницы активации сайта.
Источник: wp-activate.php:79
Используется 0 функциями | Использует 0 функций
Action Hook: Срабатывает до загрузки страницы активации сайта.
Источник: wp-activate.php:96
Используется 1 функцией | Использует 0 функций
Action Hook: Срабатывает при активации определенного подключаемого модуля.
Источник: wp-admin/includes/plugin.php:691
Используется 1 функцией | Использует 0 функций
Крючок действия: Запускается в конце виджета панели «Краткий обзор».
Источник: wp-admin/includes/dashboard.php:432
Используется 1 функцией | Использует 0 функций
Action Hook: Срабатывает сразу после добавления существующего пользователя на сайт.
Источник: wp-includes/ms-functions.php:2233
Используется 1 функцией | Использует 0 функций
Action Hook: Срабатывает после добавления опции.
Источник: wp-includes/option.php:724
Используется 1 функцией | Использует 0 функций
Крючок действия: Срабатывает сразу после добавления отношения объект-термин.
Источник: wp-includes/taxonomy.php:2808
Используется 1 функцией | Использует 0 функций
Боевой крюк:
Источник: wp-includes/deprecated.php:2408
Используется 0 функциями | Использует 0 функций
Action Hook: Срабатывает сразу после добавления мета определенного типа.
Источник: wp-includes/meta.php:154
Используется 1 функцией | Использует 0 функций
Filter Hook: Фильтрует, отображать ли дополнительные возможности для пользователя.
Источник: wp-admin/user-edit.php:870
Используется 0 функциями | Использует 0 функций
Action Hook: Срабатывает после добавления меню в строку меню.
Источник: wp-includes/class-wp-admin-bar.php:664
Используется 1 функцией | Использует 0 функций
Action Hook: Срабатывает после добавления вложения.
Источник: wp-includes/post.php:4638
Используется 1 функцией | Использует 0 функций
Крюк действия (устарело): Срабатывает перед формой добавления категории.
Источник: wp-admin/edit-tags.php:387
Используется 0 функциями | Использует 0 функций
Action Hook: Срабатывает после вывода полей для встроенного редактора постов и страниц.
Источник: wp-admin/includes/template.php:393
Используется 1 функцией | Использует 0 функций
Action Hook: Срабатывает после добавления ссылки в базу данных.
Источник: wp-admin/includes/bookmark.php:263
Используется 1 функцией | Использует 0 функций
Action Hook (устарело): Срабатывает перед формой категории ссылки.
Источник: wp-admin/edit-tags. php:397
Используется 0 функциями | Использует 0 функций
Filter Hook: Массив меню администрирования фильтров с классами, добавленными для элементов верхнего уровня.
Источник: wp-admin/includes/menu.php:259
Используется 1 функцией | Использует 0 функций
Action Hook: Срабатывает после добавления всех встроенных метабоксов.
Источник: wp-admin/includes/meta-boxes.php:1701
Используется 1 функцией | Использует 0 функций
Action Hook: Срабатывает при добавлении мета-полей комментариев.
Источник: wp-admin/edit-form-comment.php:266
Используется 0 функциями | Использует 0 функций
Action Hook: Срабатывает при добавлении мета-полей для конкретных ссылок.
Источник: wp-admin/edit-link-form.php:46
Используется 0 функциями | Использует 0 функций
Боевой крюк: Срабатывает после того, как были добавлены все встроенные метабоксы, контекстуально для данного типа записи.
Источник: wp-admin/includes/meta-boxes.php:1718
Используется 1 функцией | Использует 0 функций
Action Hook: Срабатывает перед добавлением параметра.
Источник: wp-includes/option.php:678
Используется 1 функцией | Использует 0 функций
Action Hook: Срабатывает после добавления определенной опции.
Источник: wp-includes/option.php:714
Используется 1 функцией | Использует 0 функций
Filter Hook: Фильтрует новый URL-адрес ping для добавления к данному сообщению.
Источник: wp-includes/post.php:5482
Используется 1 функцией | Использует 0 функций
Перехватчик фильтра: Фильтрует новые метапеременные сайта по умолчанию.
Источник: wp-signup.php:497
Используется 3 функциями | Использует 0 функций
Action Hook: Срабатывает после успешного добавления сетевой опции.
Источник: wp-includes/option.php:1654
Используется 1 функцией | Использует 0 функций
Action Hook: Срабатывает после успешного добавления определенной сетевой опции.
Источник: wp-includes/option.php:1642
Используется 1 функцией | Использует 0 функций
Крюк действия (устаревший): Срабатывает в конце формы добавления тега.
Источник: wp-admin/edit-tags.php:578
Используется 0 функциями | Использует 0 функций
Просто показать крючки для WordPress
Просто показать крючки для WordPress Discover/
WordPress/
Просто показать крючкиQuick & Easy
Найти лучшее Плагины WordPress для вас
У Common Ninja есть большой выбор мощных плагинов WordPress, которые просты в использовании, полностью настраиваются, удобны для мобильных устройств и имеют множество функций — так что обязательно ознакомьтесь с ними!
Testimonial
Testimonial плагины для WordPress
Контактная форма
Плагины контактной формы для WordPress
Карты
Плагины карт для WordPress
Перевод
Плагины перевода для WordPress
Чат
Плагины чата для WordPress
Slider
Плагины слайдера для WordPress
Отзывы
Обзоры плагинов для WordPress
Контакты
Контакты плагины для WordPress
Галереи 9026 1
Плагины галерей для WordPress
SEO
Плагины SEO для WordPress
Формы
Плагины форм для WordPress
Комментарии
Плагины комментариев для WordPress
Резервное копирование
Плагины резервного копирования для WordPress
Privacy
Плагины конфиденциальности для WordPress
Optimize
Плагины Optimize для WordPress
Tabs
Плагины Tabs для WordPress
Social Sharing
Плагины социальных сетей для WordPress
Календарь событий
Плагины календаря событий для WordPress
Комментарии
Плагины комментариев для WordPress
Социальные каналы
Плагины социальных каналов для WordPress
Социальный обмен 9026 1
Плагины для публикации в социальных сетях для WordPress
Портфолио
Плагины для портфолио для WordPress
Видеоплеер
Плагины для видеоплеера для WordPress
всплывающие окна
всплывающие плагины для WordPress
SiteMap
Плагины SiteMap для WordPress
Оплата
Платежные плагины для WordPress
Скоро
Скоро появятся плагины для WordPress
Инвентарь
In плагины ventory для WordPress
Testimonials
плагины Testimonials для WordPress
Portfolio
плагины Portfolio для WordPress
Membership
плагины Membership для WordPress
9026 0 FormsПлагины форм для WordPress
Analytics
Плагины Analytics для WordPress
Календарь событий
Плагины Календаря событий для WordPress
Sliders
Плагины Sliders для WordPress
Analytics
9000 2 Плагины Analytics для WordPressReviews
Плагины Reviews для WordPress
Безопасность
Плагины безопасности для WordPress
Ads
Плагины Ads для WordPress
Music Player 9026 1
Плагины музыкального проигрывателя для WordPress
Обратный отсчет
Плагины обратного отсчета для WordPress
Маркетинг по электронной почте
Плагины для маркетинга по электронной почте для WordPress
Членство
Плагины для членства в WordPress
Электронная торговля
9 0002 Плагины электронной коммерции для WordPressСлужба поддержки
Плагины службы поддержки для WordPress
Видеоплеер
Плагины видеоплеера для WordPress
Вкладки
Плагины вкладок для WordPress
Social Feeds
Плагины Social Feeds для WordPress
Common Ninja Apps
Некоторые из лучших плагинов Common Ninja для WordPress
Просмотрите нашу обширную коллекцию совместимых плагинов и легко вставьте их на любой веб-сайт, блог, интернет-магазин, платформу электронной коммерции или конструктор сайтов.
Твиттер-канал
Создавайте потрясающие твиттер-каналы и улучшайте взаимодействие с пользователем
Увеличитель изображений
Увеличивайте изображения для удобства пользователей и улучшения специальных возможностей
Диаграммы и графики
Эффективное представление данных и конвертация пользователей с помощью элегантных диаграмм и графиков
Список членов команды
Повышайте уровень доверия с помощью виджета «Список участников команды»
Процесс
Представление информации в организованном, визуально привлекательном виде
Календарь
Управление событиями, привлечение посетителей и повышение имиджа вашего бренда
Обзоры App Store
Повышение доверия и повышение доверия для увеличения продаж
Кнопка прокрутки до элемента
Улучшение навигации, улучшение пользовательского опыта и повышение вовлеченности
Карточки-раскладушки
Добавление интерактивности, улучшение дизайна и преобразование большего с помощью карточек-раскладок
Угловая кнопка
Улучшение навигации и улучшение дизайна
Лента YouTube
Создавайте впечатляющие ленты YouTube и улучшайте взаимодействие с пользователем
Всплывающее окно «Что нового»
Держите пользователей в курсе событий и улучшайте их опыт
Другие плагины
Плагины, которые могут вам понравиться
Откройте для себя приложения по платформам