Come creare un plugin child in WordPress

19 mar 2011, 12:19:10
Visualizzazioni: 19.9K
Voti: 11

Vorrei creare un plugin child..

Spiegazione:

Ho un plugin genitore chiamato X. Questo funziona in modo indipendente (come altri plugin esistenti).

Ora ho deciso di aggiungere alcune funzionalità extra a quel plugin X (consideralo come un upgrade). Quindi voglio creare funzionalità extra attraverso un altro plugin Y, che dipenderà da (ed erediterà da) X.
Questo plugin Y non funzionerà senza il plugin X.

Come posso farlo?

0
Tutte le risposte alla domanda 3
1
20

Il modo migliore per farlo è avere il tuo plugin X realizzato con i propri hook per azioni e filtri, in modo che nuovi plugin (nel tuo caso Y) possano interagire con le funzioni e i dati del plugin X. Definire i tuoi hook è abbastanza facile e semplice.

Action Hook

dal codex:

Le azioni sono gli hook che il core di WordPress lancia in punti specifici durante l'esecuzione, o quando si verificano eventi specifici. Il tuo plugin può specificare che una o più delle sue funzioni PHP vengano eseguite in questi punti, utilizzando l'Action API.

esempio di un nuovo action hook:

Function whatever(){
   //operazioni normali che fai di solito 
  do_action('Nome-Del-Tuo-Action-hook', $args1,$args2)
  //operazioni normali che fai di solito
}

Ora possiamo interagire con quella funzione e usare i suoi argomenti ($args1,$args2) usando l'hook 'Nome-Del-Tuo-Action-hook'

add_action('Nome-Del-Tuo-Action-hook','hook_function_callback');

Filter Hook

dal codex:

I filtri sono gli hook che WordPress lancia per modificare testi di vario tipo prima di aggiungerli al database o di inviarli allo schermo del browser. Il tuo plugin può specificare che una o più delle sue funzioni PHP venga eseguita per modificare specifici tipi di testo in questi momenti, utilizzando la Filter API.

esempio di un nuovo filter hook:

Function whatever(){
   //operazioni normali che fai di solito 
   $output = apply_filters('Nome-Del-Tuo-Filter-hook', $output,$args1,$args2)
  //operazioni normali che fai di solito
}

Ora possiamo interagire con quella funzione, filtrare $output e usare i suoi argomenti ($args1,$args2) usando l'hook 'Nome-Del-Tuo-Filter-hook'

add_filter('Nome-Del-Tuo_hook','hook_function_callback');

Un buon esempio di questo sarebbe Contact Form 7

  • Contact Form 7 - Addon Campaign Monitor
  • 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

e molti altri che (quasi tutti) sono plugin che estendono le funzionalità di Contact Form 7 basandosi sui suoi hook.

19 mar 2011 13:23:10
Commenti

Grazie. Questa è una soluzione molto dettagliata e ben scritta. La mia unica osservazione è che potresti utilizzare un nome più chiaro per Function whatever() ... resta comunque un'ottima risposta, GRAZIE

Metagrapher Metagrapher
2 ott 2015 18:21:36
2

Crea degli hook nel tuo plugin principale a cui il plugin figlio può collegare le proprie funzioni. Inoltre, avvolgi il plugin figlio in if(function_exists('funzione-del-plugin-principale')) o class_exists se si tratta di una classe.

19 mar 2011 13:22:14
Commenti

Non penso che questa sia una buona soluzione, poiché l'intero motivo per cui si vorrebbe avere un plugin figlio anziché modificare il plugin originale è proprio per non dover modificare il plugin originale (o "genitore"). Gli hook nel plugin genitore per l'estensibilità sono utili, ma la soluzione del richiedente non poteva basarsi su di essi. (...come io e molti altri siamo sicuramente nella stessa situazione.)

Metagrapher Metagrapher
2 ott 2015 18:20:10

@Metagrapher OP indica che vuole essere in grado di creare un plugin figlio di un plugin, quindi si trattava più di come architettare le cose in modo che un plugin sia in grado di essere esteso tramite plugin figli.

Ashfame Ashfame
19 ago 2016 19:06:23
1

Ho appena passato del tempo a farlo da solo e ho effettuato così tante modifiche che non potevo semplicemente sovrascrivere le azioni.

Ho creato questo strumento che ti permette di creare un plugin child, proprio come un child theme. Puoi apportare aggiornamenti al plugin e comunque aggiornarlo senza perdere le tue modifiche.

Sto postando questo qui perché è pertinente e spero che possa essere utile alla prossima persona che si imbatte in questo problema.

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

26 mar 2020 21:54:18
Commenti

Ho trovato questo utile ma devo assicurarmi che funzioni ancora. È stato sviluppato 3 anni fa e ora siamo alla versione 6.3 di WordPress.

Harsha Harsha
18 ago 2023 15:47:16