Подключение к плагинам

12

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

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

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

Нужно ли нам просто пытаться стать лучшими разработчиками плагинов, чтобы мы все могли хорошо играть вместе?

Райан Элкинс
источник
1
Отличный вопрос!
MikeSchinkel
«Является ли единственным реальным решением попросить автора включить пользовательские хуки, чтобы другие разработчики могли использовать свою работу?» В большинстве случаев да. Есть определенные ситуации, когда вы можете подключиться к их плагину косвенно, но обычно это не так. Скажите им писать свои плагины, как если бы они писали для ядра WordPress - включайте фильтр / действие везде, где это может понадобиться.
Viper007Связь
1
Подсказка: документируйте хуки, которые предоставляет ваш плагин, чтобы другие авторы плагинов могли взаимодействовать с ним.
Хакре

Ответы:

6

@ Райан Элкинс:

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

Ищите альтернативные хуки в ядре WordPress

Если это что-то быстрое и грязное иногда, вы можете использовать другие нисходящие хуки из ядра, чтобы изменить то, что вам нужно, или как восходящие, так и нисходящие хуки с помощью ob_start()/ ob_end_clean()(см. Ответ @Todd Perkins на « Работа с большими выходами HTML через код плагина ») для примера кода.)

Чтобы отследить зацепки, вы можете воспользоваться плагином Instrument Hooks, который я разместил вчера, чтобы помочь вам найти зацепки, которые вы потенциально можете использовать.

Отправить патч с вашим желаемым крючком для разработчика плагинов

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

Если вы не знакомы с созданием патча, здесь есть хорошая статья о патчировании ядра WordPress, для которого большинство применимо к патчированию плагинов, а для того, что нет, надеюсь, будет очевидно, что делать:

Надеюсь это поможет?

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

Может быть, все было бы иначе, если бы у WordPress была возможность автоматически устанавливать плагины, от которых зависели другие плагины? Как правило, мне обычно приходится писать много нужных мне функций с нуля, потому что клиенты хотят определенным образом и доступными плагинами, в то время как 90% там не позволяют мне гибко обновлять оставшиеся 10%.

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

MikeSchinkel
источник
2

Неужели мы просто должны попробовать и чтобы быть лучше разработчиков плагинов , так что мы можем все играть хорошо вместе?

Для начала да.

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

Это было бы хорошим решением.

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

Арлен Бейлер
источник
2

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

Очевидно, что вы говорите о системе, аналогичной той, которую Google поощряет с Android и системой Intent, что приложение может публиковать действия, которые оно может выполнять от имени других приложений, которые затем могут подключаться к ним и передавать данные обратно и вперед. Лично я думаю, что это то, к чему мы должны стремиться как хорошие разработчики - мы используем WordPress, потому что он уже потрясающий, достаточно удивительный, чтобы принимать решение о том, использовать его или разрабатывать аналогичный собственный продукт, в большинстве случаев довольно просто. Сам по себе репозиторий плагинов - это то же самое, в основном как конечный пользователь + разработчик - зачем разрабатывать плагин для твиттера, когда он идеально подходит.

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

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

Что касается плагина Twitter, который вы хотите подключить, отправьте автору электронное письмо, я уверен, что он будет рад добавить их для вас.

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

Итак, чтобы ответить на ваш последний вопрос:

Нужно ли нам просто пытаться стать лучшими разработчиками плагинов, чтобы мы все могли хорошо играть вместе?

Да.


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

никто
источник
Это сработало бы, но что, если бы функция другого плагина имела такое же имя?
Арлен Бейлер
К сожалению, возможно, это не так, потому что вы должны знать, что и кем ретвитнулось. Проверка функции - это решение во время выполнения, нам нужно решение в реальном времени, которое запускается, когда соответствующая функция вызывается или возвращает данные.
Арлен Бейлер
@Arlen - скажем, вам нужно было создать собственную функцию, которая проверяет, есть ли конкретная функция. Он будет запускаться после 'plugins_loaded', и, если он там есть, он устанавливает логическое значение, которое включает функции. Это сильно зависит от неизменности кода, но я не понимаю, почему он не будет работать?
никто не
0

определить функцию:

function my_footer() {
    do_action('my_footer');
}

теперь вы можете зацепить этот крючок: add_action('my_footer', 'example_function', 1);# больше информации смотрите в моем посте .

bueltge
источник
не => сейчас, это собственное => это. Верный?
Арлен Бейлер
Я понимаю, как добавить пользовательские хуки - вопрос в том, как подключить чей-либо плагин, в идеале таким образом, чтобы не требовалось прямой модификации его плагина.
Райан Элкинс
@Arlen: большое спасибо, извините за мой плохой английский @Ryan: это невозможно, когда у плагина нет крючка; но вы можете проверить замену функции или класса, когда автор попросит об этом в своем плагине. Но можно запросить активные плагины и подключить ранее в WP как другой плагин и заменить его функцию.
Bueltge