Conectarea la plugin-uri

14 aug. 2010, 22:10:22
Vizualizări: 3.23K
Voturi: 12

Lucrez la un plugin care ar trebui să poată efectua acțiuni atunci când un utilizator face ceva prin intermediul unui plugin diferit.

Pot adăuga hook-uri personalizate în acele plugin-uri, dar evident acest lucru nu funcționează bine atunci când vreau să distribui plugin-ul meu. Există o metodă bună de a adăuga hook-uri în plugin-urile altor persoane din plugin-ul meu? Singura soluție reală este să cer autorului să includă hook-uri personalizate pentru ca alți dezvoltatori să poată construi pe baza muncii lor?

Exemplu: Vreau să fac ceva în plugin-ul meu când cineja retweet-ează un articol. Dacă ar exista un hook personalizat în plugin-ul popular de retweet-uri la care aș putea să mă conectez, ar fi perfect. Nu există, așa că pot modifica plugin-ul lor pentru a-l include, dar asta funcționează doar pentru copia mea și nu vreau să încerc să redistribui acel cod modificat.

Trebuie doar să încercăm să fim dezvoltatori mai buni de plugin-uri pentru a putea colabora între noi?

3
Comentarii

Excelentă întrebare!

MikeSchinkel MikeSchinkel
15 aug. 2010 00:45:27

"Este singura soluție reală să ceri autorului să includă hook-uri personalizate astfel încât alți dezvoltatori să poată construi pe baza muncii sale?" În majoritatea cazurilor, da. Există anumite situații în care poți reuși să te conectezi indirect la plugin-ul lor, dar de obicei nu este cazul. Spune-le să scrie plugin-urile lor ca și cum ar scrie pentru nucleul WordPress - include un filtru/acțiune oriunde ar putea fi nevoie.

Viper007Bond Viper007Bond
15 aug. 2010 04:50:05

Sfat: Documentează hook-urile pe care le oferă plugin-ul tău, astfel încât alți autori de plugin-uri să poată interacționa cu el.

hakre hakre
17 aug. 2010 14:37:13
Toate răspunsurile la întrebare 4
0

@Ryan Elkins:

Cred că răspunsul depinde de cât de importantă este fiecare situație pentru tine. În unele cazuri, ai nevoie de ceva rapid și simplu, în altele ar putea fi o cerință mai semnificativă. Iată două idei care îmi vin în minte:

Caută Hook-uri Alternative în Nucleul WordPress

Dacă ai nevoie de o soluție rapidă și simplă, uneori poți folosi alte hook-uri din nucleul WordPress pentru a modifica ceea ce ai nevoie, sau poți combina hook-uri din ambele direcții folosind ob_start()/ob_end_clean() (vezi răspunsul lui @Todd Perkins la "Gestionarea output-ului HTML mare prin codul plugin-ului" pentru un exemplu de cod.)

Pentru a identifica hook-urile potențiale, poți folosi plugin-ul Instrument Hooks pe care l-am publicat ieri pentru a te ajuta să găsești hook-urile pe care le poți utiliza.

Trimite un Patch cu Hook-ul Dorit Dezvoltatorului Plugin-ului

Dacă cerința ta este mai importantă pentru tine sau pentru comunitate, aș recomanda să adaugi direct hook-ul de care ai nevoie în plugin. Apoi testează-l bine pentru a te asigura că rezolvă într-adevăr problema, după care poți trimite un patch dezvoltatorului plugin-ului în speranța că acesta îl va integra. Astfel, îi faci lucrul cât mai ușor, oferindu-i cod testat, iar tu ai ocazia să verifici dacă soluția este într-adevăr ce ai nevoie. Nu pot să-ți spun de câte ori am crezut că am nevoie de un anumit hook, doar pentru a descoperi după încercări că aveam nevoie de altceva.

Dacă nu ești familiarizat cu crearea de patch-uri, iată un articol bun despre aplicarea de patch-uri în nucleul WordPress, unde majoritatea informațiilor se aplică și plugin-urilor, iar pentru celelalte, sper să fie evident ce trebuie făcut:

Sper că aceste informații te ajută?

P.S. Un lucru care mă dezamăgește și pe care îl abordează întrebarea ta este procentul mare de plugin-uri care sunt concepute doar pentru utilizatori finali, adică fără hook-uri proprii. Imaginează-ți dacă WordPress ar fi fost conceput ca majoritatea plugin-urilor? Ar fi inflexibil și o soluție foarte limitată.

Poate lucrurile ar fi diferite dacă WordPress ar avea capacitatea de a instala automat plugin-uri de care depind alte plugin-uri? În prezent, deseori trebuie să scriu o mare parte din funcționalitățile de care am nevoie de la zero, pentru că clienții vor lucruri într-un anumit fel, iar plugin-urile disponibile, deși acoperă 90% din necesități, nu îmi oferă flexibilitatea de a adapta restul de 10%.

Chiar aș dori ca cei care conduc comunitatea WordPress să identifice o metodă de a recompensa plugin-urile care urmează cele mai bune practici (cum ar fi adăugarea de hook-uri pentru alți dezvoltatori), similar modului în care răspunsurile bune sunt recompensate pe un site StackExchange.

15 aug. 2010 00:45:10
0

Trebuie doar să încercăm și fim dezvoltatori mai buni de plugin-uri, astfel încât să putem colabora armonios?

Pentru început, da.

Singura soluție reală este să cerem autorului să includă hook-uri personalizate, astfel încât alți dezvoltatori să poată construi pe baza muncii sale?

Aceasta ar fi o soluție bună.

Ați putea, de asemenea, să copiați celălalt plugin și să adăugați modificările dorite, deși aceasta ar implica mai mult efort.

14 aug. 2010 22:37:32
3

Cred că îți răspunzi singur la întrebare, făcând-o oarecum retorică.

Evident, te referi la un sistem similar cu cel promovat de Google pentru Android și sistemul de Intenții, unde o aplicație poate publica acțiuni pe care le poate efectua în numele altor aplicații, care apoi se pot conecta la ele și pot trimite date în ambele sensuri. Personal, cred că este ceva spre care ar trebui să tindem ca developeri buni – folosim WordPress pentru că este deja fantastic, suficient de fantastic încât alegerea dintre a-l folosi sau a dezvolta un produs intern similar este destul de ușoară în majoritatea cazurilor. Repository-ul de plugin-uri este același lucru, în special pentru utilizatorii finali și developeri – de ce să dezvolți un plugin pentru Twitter când există deja unul perfect funcțional.

Aceeași întrebare "de ce să dezvolți duplicate" stă la baza întrebării tale. Sistemul de Intenții al Android permite aplicațiilor să utilizeze funcții deja create și să trimită date între ele, iar acest sistem este popular și folosit des, tocmai pentru că este promovat intens. Există un sistem similar implementat deja în WordPress, dar este foarte rar folosit în afara cârligelor (hooks) prezente în codul de bază, care sunt folosite intens.

Ar fi benefic pentru comunitate dacă ar exista mai multe cârlige în plugin-urile personalizate, dar, după cum spui tu, nu există o modalitate ușoară de a adăuga cârlige atunci când și unde ai nevoie de ele.

În ceea ce privește plugin-ul Twitter în care dorești să te conectezi, trimite un email autorului – sunt sigur că ar fi bucuros să adauge cârligele necesare pentru tine.

Dacă găsești un loc în care crezi că ar fi util să adaugi un cârlig în plugin-ul tău, fă-o și documentează-l bine. Dacă tot mai mulți oameni vor începe să adauge cârlige în plugin-uri sau va exista o presiune generală în acest sens, lucrul acesta se va întâmpla în cele din urmă.

Deci, pentru a răspunde la întrebarea ta finală:

Trebuie doar să încercăm să fim developeri mai buni de plugin-uri, astfel încât să putem colabora frumos împreună?

Da.


Edit: M-am mai gândit la întrebarea inițială și la cea mai bună metodă de implementare a cârligelor – nu ai putea adăuga o acțiune care să se execute doar dacă funcția specifică pe care încerci să o rulezi din plugin este prezentă?

14 aug. 2010 22:44:39
Comentarii

Asta ar funcționa, dar dacă o altă funcție dintr-un alt plugin ar avea același nume?

Arlen Beiler Arlen Beiler
14 aug. 2010 22:59:42

Hopa, poate că nu ar funcționa, pentru că trebuie să știi ce se retweetează și de cine. Verificarea funcției este o soluție la runtime, ceea ce avem nevoie este o soluție în timp real, una care rulează atunci când funcția în cauză este apelată sau returnează date.

Arlen Beiler Arlen Beiler
14 aug. 2010 23:01:42

@Arlen - Să presupunem că ai crea propria ta funcție care verifică dacă funcția respectivă există. Aceasta ar fi rulată după 'plugins_loaded', iar dacă există, setează un boolean care activează funcționalitățile. Depinde foarte mult de cod care nu se schimbă, dar nu văd de ce nu ar funcționa?

nobody nobody
15 aug. 2010 00:03:50
3

definește o funcție:

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

acum poți atașa funcții la acest hook: add_action('my_footer', 'example_function', 1);# mai multe informații găsești în articolul meu.

14 aug. 2010 22:35:01
Comentarii

not => now, this own => this. Corect?

Arlen Beiler Arlen Beiler
14 aug. 2010 22:40:25

Înțeleg cum să adaug hook-uri personalizate - întrebarea este cum să mă conectez la plugin-ul altcuiva, ideal într-un mod care nu necesită modificarea directă a plugin-ului lor.

Ryan Elkins Ryan Elkins
14 aug. 2010 22:41:51

@Arlen: mulțumesc mult, îmi cer scuze pentru engleza mea proastă

@Ryan: nu este posibil, când plugin-ul nu are un hook; dar poți verifica dacă poți înlocui funcția sau clasa, când autorul permite acest lucru în plugin-ul său. Dar este posibil să verifici plugin-urile active și să te conectezi mai devreme în WP decât celălalt plugin și să înlocuiești funcția lui.

bueltge bueltge
15 aug. 2010 00:47:55