Как создать дочерний плагин WordPress

19 мар. 2011 г., 12:19:10
Просмотры: 19.9K
Голосов: 11

Я хочу создать дочерний плагин..

Объяснение:

У меня есть родительский плагин под названием X. Он работает независимо (как и другие существующие плагины).

Теперь я решил добавить некоторые дополнительные функции к плагину X (считайте это обновлением). Поэтому я хочу создать дополнительные функции с помощью другого плагина Y, который будет зависеть от (и наследовать) X.
Этот плагин Y не будет работать без плагина X.

Как я могу это сделать?

0
Все ответы на вопрос 3
1
20

Лучший способ сделать это — создать ваш плагин X с собственными хуками для действий и фильтров, чтобы новые плагины (в вашем случае Y) могли взаимодействовать с функциями и данными плагина X. Определение собственных хуков довольно просто и легко.

Хук действия (Action Hook)

Из кодекса:

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

Пример нового хука действия:

Function whatever(){
   //обычные действия, которые вы выполняете 
  do_action('Название-Вашего-Хука-Действия', $args1,$args2)
  //обычные действия, которые вы выполняете
}

Теперь мы можем взаимодействовать с этой функцией и использовать её аргументы ($args1,$args2) через хук 'Название-Вашего-Хука-Действия'

add_action('Название-Вашего-Хука-Действия','функция_обратного_вызова_хука');

Хук фильтра (Filter Hook)

Из кодекса:

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

Пример нового хука фильтра:

Function whatever(){
   //обычные действия, которые вы выполняете 
   $output = apply_filters('Название-Вашего-Хука-Фильтра', $output,$args1,$args2)
  //обычные действия, которые вы выполняете
}

Теперь мы можем взаимодействовать с этой функцией, фильтровать $output и использовать её аргументы ($args1,$args2) через хук 'Название-Вашего-Хука-Фильтра'

add_filter('Название-Вашего-Хука-Фильтра','функция_обратного_вызова_хука');

Хорошим примером этого может служить Contact Form 7

  • Contact Form 7 - Campaign Monitor Addon
  • Contact Form 7 Dynamic Text Extension
  • Contact Form 7 Calendar
  • Contact Form 7 Textarea Wordcount
  • Contact Form 7 Customfield in mail
  • Contact Form 7 to Database Extension

и многие другие, которые (большинство) являются плагинами, расширяющими функциональность Contact Form 7 на основе его хуков.

19 мар. 2011 г. 13:23:10
Комментарии

Спасибо. Это очень детальное и хорошо написанное решение. Единственное, что я хотел бы предложить — использовать более понятное название для Function whatever() ... но в целом отличный ответ, СПАСИБО

Metagrapher Metagrapher
2 окт. 2015 г. 18:21:36
2

Создайте хуки (hooks) в родительском плагине, к которым дочерний плагин сможет подключать свои функции. Также оберните код дочернего плагина в условие if(function_exists('parent-plugin-function')) или class_exists, если используется класс.

19 мар. 2011 г. 13:22:14
Комментарии

Я не считаю это хорошим решением, ведь основная причина, по которой кто-то хочет создать дочерний плагин вместо изменения оригинального плагина, заключается в том, чтобы не приходилось модифицировать исходный (или "родительский") плагин. Хуки в родительском плагине для расширяемости — это хорошо, но решение автора вопроса не могло на них полагаться. (...как и я, и многие другие наверняка в такой же ситуации.)

Metagrapher Metagrapher
2 окт. 2015 г. 18:20:10

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

Ashfame Ashfame
19 авг. 2016 г. 19:06:23
1

Я сам прошел через это и у меня было так много изменений, что я не мог просто перезаписать действия.

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

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

https://github.com/ThomasDepole/wordpress-child-plugin-tool

26 мар. 2020 г. 21:54:18
Комментарии

Я нашел это полезным, но нужно убедиться, что это все еще работает. Это было разработано 3 года назад, а сейчас у нас WordPress версии 6.3.

Harsha Harsha
18 авг. 2023 г. 15:47:16