Підключення до плагінів


12

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

Я можу додати спеціальні гачки в ці плагіни, але очевидно, це не спрацює, коли я хочу розповсюдити свій плагін. Чи є хороший спосіб додати гачки до інших плагінів із мого власного плагіна? Є єдиним реальним рішенням попросити автора включити спеціальні гачки, щоб інші розробники могли будувати свою роботу?

Приклад: Я хочу зробити щось у своєму плагіні, коли хтось ретвітує статтю. Якби в будь-якому популярному ретвіті плагіну був спеціальний гачок, це те, що я міг би підключитися та звільнитися, це було б чудово. Немає, тому я можу змінити їх плагін, щоб включити його, але це працює лише для моєї копії, і я не хочу намагатися перерозподілити це.

Чи потрібно просто намагатися бути кращими розробниками плагінів, щоб ми могли разом грати добре?


1
Чудове запитання!
MikeSchinkel

"Є єдиним реальним рішенням попросити автора включити спеціальні гачки, щоб інші розробники могли будувати свою роботу?" У більшості випадків так. Існують певні ситуації, коли вам вдасться побічно зачепити їх плагін, але це зазвичай не так. Скажіть їм написати свої плагіни так, ніби вони пишуть для ядра WordPress - включіть фільтр / дію там, де це може знадобитися.
Viper007Bond

1
Підказка: Документуйте гачки вашого плагіна, щоб інші автори плагінів могли взаємодіяти з ним.
хакре

Відповіді:


6

@Ryan Elkins:

Я думаю, що відповідь залежить від того, наскільки вам імпортувати кожен випадок використання. У деяких випадках це щось потрібне швидко і забрудниться, в інших це може бути більш вагомим випадком використання. Ось дві речі, які спадають на думку:

Шукайте альтернативні гачки в WordPress Core

Якщо це щось швидке і забруднене, ви можете використовувати інші гачки нижче за течією, щоб змінити те, що вам потрібно, або як гаки вгору за течією, так і за течією через використання ob_start()/ ob_end_clean()(див. Відповідь @Todd Перкінса на " Робота з великим вихідним HTML за допомогою коду плагіна ". для прикладу коду.)

Для відстеження гачків ви можете використати перевірку плагіна Instrument Hooks, який я опублікував вчора, щоб допомогти вам знайти гачки, які ви потенційно можете використовувати.

Надішліть Патч із бажаним гачком розробнику плагінів

Якщо ваш випадок використання більш важливий для вас або для громади, я рекомендую продовжувати додавати плагін, який вам потрібен. Потім перевіряйте його, щоб переконатися, що він справді вирішує ваш використання, після чого ви можете надіслати патч розробнику плагінів, сподіваючись, що він або вона застосує його. Таким чином ви полегшуєте їх якомога простіше, надаючи їм перевірений код, і ви самі працюєте за допомогою справи, щоб переконатися, що це дійсно те, що вам потрібно. Я не можу сказати вам, як часто я думав, що мені потрібен певний гачок, щоб знайти його лише після спроби впровадити той, що мені потрібен гачок, але той, який відрізнявся, ніж я спочатку передбачав.

Якщо ви не знайомі зі створенням виправлення, тут ви знайдете хорошу статтю про виправлення ядра WordPress, яка найбільше стосується плагінних виправлень, а також для того, що не робить, сподіваємось, буде очевидно, що робити:

Сподіваюся, це допомагає?

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

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

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


2

Невже ми просто повинні спробувати і щоб бути краще розробників плагінів , так що ми можемо все грати добре разом?

Для початку так.

Є єдиним реальним рішенням попросити автора включити спеціальні гачки, щоб інші розробники могли будувати свою роботу?

Це було б хорошим рішенням.

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


2

Я думаю, ви відповідаєте на своє запитання, щоб це стало дещо риторичним.

Очевидно, ви говорите про подібну систему, яку підтримує Google із Android та системою «Намір», що програма може публікувати дії, які вона здатна робити від імені інших програм, які потім можуть підключитися до них і передавати дані назад і вперед. Особисто я вважаю, що це те, до чого ми мусимо керуватися як хороші розробники - ми використовуємо WordPress, оскільки це вже приголомшливо, досить приголомшливо для того, щоб прийняти рішення щодо того, використовувати його чи розробити подібний внутрішній продукт, досить просто у більшості випадків. Сам репозиторій плагінів - це те саме, головним чином як кінцевий користувач + розробник - навіщо розробляти плагін Twitter, коли він ідеально хороший.

Те саме "навіщо розробляти дублікати" лежить в основі вашого питання тут. Система Android Intent дозволяє програмам використовувати вже створені функції та передавати дані між ними, і це популярно і часто використовується, оскільки воно настільки сильно натиснуто. Існує подібна система, вже впроваджена в WordPress, але вона дуже рідко використовується поза гачками, наявними в основному коді, які використовуються дуже багато.

Користь для спільноти була б корисною, якби було більше гачків у користувальницьких плагінах, але, як ви кажете, немає простого способу додати гачки, коли і де вони вам потрібні.

Що стосується плагіна Twitter, який ви хочете підключити, надішліть автору повідомлення електронною поштою, я впевнений, що він буде радий додати їх вам.

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

Отже, щоб відповісти на ваше закінчення питання:

Чи потрібно просто намагатися бути кращими розробниками плагінів, щоб ми могли разом грати добре?

Так.


Редагувати: Я ще трохи подумав про власне питання та найкращий спосіб реалізації гачків, не могли б ви додати дію, яка буде виконуватися, якщо б була присутня конкретна функція, яку ви намагаєтеся запустити у плагіні?


Це спрацювало б, але що робити, якщо інша функція плагіна мала те саме ім’я?
Арлен Бейлер

На жаль, це може бути, тому що ви повинні знати, що ретвітується та ким. Перевірка функції - це рішення на час виконання, що нам потрібно - це рішення в режимі реального часу, яке запускається під час виклику відповідної функції або повернення даних.
Арлен Бейлер

@Arlen - Скажіть, ви повинні створити свою власну функцію, яка перевіряє, чи існує певна функція. Він буде запущений після 'plugins_loaded', і якщо він є, він встановлює булеву функцію, яка забезпечує можливості. Він сильно залежить від коду, який не змінюється, але я не можу зрозуміти, чому він не працює?
ніхто

0

визначте функцію:

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

тепер ви можете зачепитися за цей гачок: ще add_action('my_footer', 'example_function', 1);# інформації дивіться у моєму дописі .


не => тепер, це власне => це. Правильно?
Арлен Бейлер

Я розумію, як додати спеціальні гачки - питання полягає в тому, як підключити чужий плагін, в ідеалі таким чином, що не потребує прямої модифікації їх плагіна.
Ryan Elkins

@Arlen: велике спасибі, вибачте за мою погану англійську @Ryan: це неможливо, коли у вас немає плагіна гаком; але ви можете перевірити на заміну функції або класу, коли автор запитає про це у своєму плагіні. Але можна попросити активні плагіни та підключити раніше WP як інший плагін і замінити його функцію.
булгель
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.