Я работаю над плагином, который в идеале мог бы делать что-то, когда пользователь делает что-то через другой плагин.
Я могу добавить пользовательские хуки в эти плагины, но, очевидно, это не будет хорошо работать, когда я хочу распространять свой плагин. Есть ли хороший способ добавить хуки к плагинам других людей из моего собственного плагина? Является ли единственное реальное решение попросить автора включить пользовательские хуки, чтобы другие разработчики могли использовать свою работу?
Пример: я хочу сделать что-то в своем плагине, когда кто-то ретвитит статью. Если бы в любом популярном плагине для ретвитов был пользовательский хук, к которому я мог подключиться и запустить, это было бы здорово. Нет, поэтому я могу изменить их плагин, чтобы включить его, но это работает только для моей копии, и я не хочу пытаться распространять это.
Нужно ли нам просто пытаться стать лучшими разработчиками плагинов, чтобы мы все могли хорошо играть вместе?
Ответы:
@ Райан Элкинс:
Я думаю, что ответ зависит от того, насколько важен каждый сценарий использования. В некоторых случаях это может быть чем-то, что вам нужно быстро и грязно, в других это может быть более значимым вариантом использования. Вот две вещи, которые приходят на ум:
Ищите альтернативные хуки в ядре WordPress
Если это что-то быстрое и грязное иногда, вы можете использовать другие нисходящие хуки из ядра, чтобы изменить то, что вам нужно, или как восходящие, так и нисходящие хуки с помощью
ob_start()
/ob_end_clean()
(см. Ответ @Todd Perkins на « Работа с большими выходами HTML через код плагина ») для примера кода.)Чтобы отследить зацепки, вы можете воспользоваться плагином Instrument Hooks, который я разместил вчера, чтобы помочь вам найти зацепки, которые вы потенциально можете использовать.
Отправить патч с вашим желаемым крючком для разработчика плагинов
Если ваш вариант использования более важен для вас или сообщества, я бы порекомендовал пойти дальше и добавить нужный вам плагин в плагин. Затем тщательно протестируйте его, чтобы убедиться, что он действительно соответствует вашему варианту использования, после чего вы можете отправить исправление разработчику плагина в надежде, что он или она применит его. Таким образом, вы делаете их максимально легкими, предоставляя им проверенный код, и вы сами работаете над вариантом использования, чтобы убедиться, что это действительно то, что вам нужно. Я не могу сказать вам, как часто я думал, что мне нужен определенный хук, только чтобы найти после того, как я попытался реализовать тот, который мне нужен, но тот, который отличался от того, который я сначала предполагал.
Если вы не знакомы с созданием патча, здесь есть хорошая статья о патчировании ядра WordPress, для которого большинство применимо к патчированию плагинов, а для того, что нет, надеюсь, будет очевидно, что делать:
Надеюсь это поможет?
PS Одна вещь, которую я нахожу немного разочаровывающей, это то, что ваши вопросы адресованы процентным соотношением плагинов, которые предназначены только для конечных пользователей, то есть не имеют собственных хуков. Представляете, если WordPress были разработаны как большинство плагинов? Это было бы негибким и очень нишевым решением.
Может быть, все было бы иначе, если бы у WordPress была возможность автоматически устанавливать плагины, от которых зависели другие плагины? Как правило, мне обычно приходится писать много нужных мне функций с нуля, потому что клиенты хотят определенным образом и доступными плагинами, в то время как 90% там не позволяют мне гибко обновлять оставшиеся 10%.
Я действительно хотел бы, чтобы те, кто возглавляет сообщество WordPress, нашли способ гарантировать, что плагины будут вознаграждены за следование лучшим рекомендациям (например, добавление хуков для других разработчиков), так же, как хорошие ответы будут вознаграждены на сайте StackExchange.
источник
Для начала да.
Это было бы хорошим решением.
Вы также можете скопировать другой плагин и просто добавить любые изменения, хотя это будет более хлопотно.
источник
Я думаю, что вы отвечаете на свой вопрос в вопросе, так что это становится несколько риторическим.
Очевидно, что вы говорите о системе, аналогичной той, которую Google поощряет с Android и системой Intent, что приложение может публиковать действия, которые оно может выполнять от имени других приложений, которые затем могут подключаться к ним и передавать данные обратно и вперед. Лично я думаю, что это то, к чему мы должны стремиться как хорошие разработчики - мы используем WordPress, потому что он уже потрясающий, достаточно удивительный, чтобы принимать решение о том, использовать его или разрабатывать аналогичный собственный продукт, в большинстве случаев довольно просто. Сам по себе репозиторий плагинов - это то же самое, в основном как конечный пользователь + разработчик - зачем разрабатывать плагин для твиттера, когда он идеально подходит.
То же самое «зачем разрабатывать дубликаты» лежит в основе вашего вопроса здесь. Система Android Intent позволяет приложениям использовать уже созданные функции и передавать данные между ними, что является популярным и часто используемым, потому что оно проталкивается так сильно. Существует похожая система, уже реализованная в WordPress, но очень редко используемая, помимо хуков, присутствующих в основном коде, которые используются довольно часто.
Сообществу было бы полезно, если бы присутствовало больше хуков в пользовательских плагинах, но, как вы говорите, нет простого способа добавить хуки, когда и где они вам нужны.
Что касается плагина Twitter, который вы хотите подключить, отправьте автору электронное письмо, я уверен, что он будет рад добавить их для вас.
Если есть место, которое, по вашему мнению, было бы хорошим местом, чтобы зацепить ваш плагин, сделайте это и хорошо документируйте. Если больше людей начнут вставлять хуки в плагины, или будет общий толчок к этому, это произойдет в конце концов.
Итак, чтобы ответить на ваш последний вопрос:
Да.
Изменить: я подумал еще немного о фактическом вопросе и лучший способ реализации хуков, не могли бы вы добавить действие, которое будет запускаться, если присутствует конкретная функция, которую вы пытаетесь запустить из плагина?
источник
определить функцию:
теперь вы можете зацепить этот крючок:
add_action('my_footer', 'example_function', 1);
# больше информации смотрите в моем посте .источник