Cum să creezi un plugin WordPress de tip copil

19 mar. 2011, 12:19:10
Vizualizări: 19.9K
Voturi: 11

Aș dori să creez un plugin de tip copil..

Explicație :-

Am un plugin părinte numit X. Acesta va funcționa independent (ca alte plugin-uri existente).

Acum am decis să adaug câteva funcționalități extra la plugin-ul X (gândiți-vă la el ca la un upgrade). Așa că vreau să creez funcționalitățile suplimentare prin intermediul unui alt plugin Y, care va depinde de (și va moșteni de la) X.
Acest plugin Y nu va funcționa fără plugin-ul X.

Cum pot face acest lucru?

0
Toate răspunsurile la întrebare 3
1
20

Cea mai bună metodă de a face acest lucru este să vă creați propriul plugin X cu cârlige (hooks) personalizate pentru acțiuni și filtre, astfel încât alte pluginuri (în cazul dumneavoastră Y) să poată interacționa cu funcțiile și datele pluginului X. Definirea propriilor cârlige este destul de ușoară și simplă.

Cârlig de Acțiune (Action Hook)

din codex:

Acțiunile sunt cârligele pe care nucleul WordPress le lansează în anumite puncte de execuție sau când apar evenimente specifice. Pluginul dumneavoastră poate specifica să execute una sau mai multe funcții PHP în aceste puncte, folosind API-ul de Acțiuni.

exemplu de cârlig de acțiune nou:

Function whatever(){
   //acțiuni obișnuite pe care le faceți în mod normal 
  do_action('Numele-Cârligului-Tău-de-Acțiune', $args1,$args2)
  //acțiuni obișnuite pe care le faceți în mod normal
}

Acum putem interacționa cu acea funcție și să folosim argumentele sale ($args1,$args2) folosind cârligul 'Numele-Cârligului-Tău-de-Acțiune'

add_action('Numele-Cârligului-Tău-de-Acțiune','functie_callback_pentru_cârlig');

Cârlig de Filtru (Filter Hook)

din codex:

Filtrele sunt cârligele pe care WordPress le lansează pentru a modifica diverse tipuri de text înainte de a le adăuga în baza de date sau de a le trimite la ecran. Pluginul dumneavoastră poate specifica să execute una sau mai multe funcții PHP pentru a modifica anumite tipuri de text în aceste momente, folosind API-ul de Filtre.

exemplu de cârlig de filtru nou:

Function whatever(){
   //acțiuni obișnuite pe care le faceți în mod normal 
   $output = apply_filters('Numele-Cârligului-Tău-de-Filtru', $output,$args1,$args2)
  //acțiuni obișnuite pe care le faceți în mod normal
}

Acum putem interacționa cu acea funcție, filtra $output și folosi argumentele sale ($args1,$args2) folosind cârligul 'Numele-Cârligului-Tău-de-Filtru'

add_filter('Numele-Cârligului-Tău-de-Filtru','functie_callback_pentru_cârlig');

Un bun exemplu în acest sens este 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

și multe altele, dintre care majoritatea sunt pluginuri care extind funcționalitatea Contact Form 7 pe baza cârligelor sale.

19 mar. 2011 13:23:10
Comentarii

Mulțumesc. Aceasta este o soluție foarte detaliată și bine scrisă. Singura mea observație este că ai putea folosi un nume mai clar pentru Function whatever() ... totuși, un răspuns excelent, MULȚUMESC

Metagrapher Metagrapher
2 oct. 2015 18:21:36
2

Adaugă câteva hook-uri în plugin-ul părinte la care plugin-ul copil își poate atașa propria funcție. De asemenea, înfășoară plugin-ul copil în if(function_exists('functia-plugin-părinte')) sau class_exists dacă este o clasă.

19 mar. 2011 13:22:14
Comentarii

Nu cred că aceasta este o soluție bună, deoarece întregul motiv pentru care cineva ar dori să aibă un plugin copil în loc să modifice pluginul original este tocmai pentru a nu fi nevoit să modifici pluginul original (sau "părinte").

Hook-urile din pluginul părinte pentru extensibilitate sunt utile, dar soluția celui care a întrebat nu ar putea să se bazeze pe ele. (...așa cum eu și mulți alții suntem cu siguranță în aceeași situație.)

Metagrapher Metagrapher
2 oct. 2015 18:20:10

@Metagrapher OP indică faptul că dorește să poată crea un plugin copil al unui plugin, așa că a fost mai degrabă o întrebare despre cum să arhitectezi lucrurile astfel încât un plugin să fie capabil să fie extensibil prin plugin-uri copil.

Ashfame Ashfame
19 aug. 2016 19:06:23
1

Tocmai am trecut prin asta și am avut atât de multe modificări încât nu puteam pur și simplu să suprascriu acțiunile.

Am creat această unealtă care îți permite să creezi un plugin copil, similar cu o temă copil. Poți să faci actualizări la plugin și totuși să-l actualizezi fără să-ți pierzi modificările.

Postez asta aici pentru că este relevant și sper să fie util pentru următoarea persoană care va întâmpina această problemă.

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

26 mar. 2020 21:54:18
Comentarii

Am considerat acest lucru util, dar trebuie să mă asigur că încă funcționează. A fost dezvoltat acum 3 ani și acum suntem la versiunea WordPress 6.3.

Harsha Harsha
18 aug. 2023 15:47:16