Agganciarsi ai plugin

14 ago 2010, 22:10:22
Visualizzazioni: 3.23K
Voti: 12

Sto lavorando a un plugin che idealmente dovrebbe poter eseguire azioni quando un utente compie qualcosa attraverso un plugin diverso.

Potrei aggiungere hook personalizzati in quei plugin, ma ovviamente questa soluzione non funzionerebbe bene quando vorrei distribuire il mio plugin. Esiste un buon modo per aggiungere hook ai plugin di altre persone dal mio plugin? L'unica soluzione reale è chiedere all'autore di includere hook personalizzati così che altri sviluppatori possano costruire sul loro lavoro?

Esempio: Voglio fare qualcosa nel mio plugin quando qualcuno ritwitta un articolo. Se ci fosse un hook personalizzato nel popolare plugin per i retweet a cui potermi agganciare per attivare la mia funzione, sarebbe perfetto. Non c'è, quindi potrei modificare il loro plugin per includerlo, ma questo funzionerebbe solo per la mia copia, e non voglio provare a ridistribuirlo.

Dobbiamo semplicemente cercare di essere migliori sviluppatori di plugin per poter lavorare meglio insieme?

3
Commenti

Ottima domanda!

MikeSchinkel MikeSchinkel
15 ago 2010 00:45:27

"L'unica vera soluzione è chiedere all'autore di includere hook personalizzati in modo che altri sviluppatori possano costruire sul loro lavoro?" Nella maggior parte dei casi, sì. Ci sono situazioni in cui puoi riuscire ad agganciarti indirettamente al loro plugin, ma di solito non è così. Digli di scrivere i loro plugin come se stessero scrivendo per il core di WordPress -- includi un filtro/action ovunque potrebbe servire.

Viper007Bond Viper007Bond
15 ago 2010 04:50:05

Suggerimento: Documenta gli hook che il tuo plugin fornisce in modo che altri autori di plugin possano interagire con esso.

hakre hakre
17 ago 2010 14:37:13
Tutte le risposte alla domanda 4
0

@Ryan Elkins:

Immagino che la risposta dipenda da quanto sia importante ogni caso d'uso per te. In alcuni casi potrebbe essere qualcosa di rapido e approssimativo, in altri potrebbe trattarsi di un caso d'uso più significativo. Ecco le due cose che mi vengono in mente:

Cerca Hook Alternativi nel Core di WordPress

Se è qualcosa di rapido e approssimativo, a volte puoi utilizzare altri hook a valle del core per modificare ciò che ti serve, oppure sia hook a monte che a valle tramite l'uso di ob_start()/ob_end_clean() (vedi la risposta di @Todd Perkins a "Gestire output HTML ampio tramite codice del plugin" per un esempio di codice).

Per individuare gli hook che potresti utilizzare, dai un'occhiata al plugin Instrument Hooks che ho pubblicato ieri per aiutarti a trovare gli hook potenzialmente utili.

Invia una Patch con l'Hook Desiderato allo Sviluppatore del Plugin

Se il tuo caso d'uso è più significativo per te o per la community, ti consiglierei di aggiungere direttamente l'hook di cui hai bisogno al plugin. Quindi testalo accuratamente per assicurarti che risolva effettivamente il tuo caso d'uso, dopodiché puoi inviare una patch allo sviluppatore del plugin sperando che la applichi. In questo modo rendi le cose più facili per loro fornendo codice già testato e hai l'opportunità di lavorare sul caso d'uso per verificare che sia davvero ciò che ti serve. Non so quante volte ho pensato di aver bisogno di un certo hook, solo per scoprire dopo averlo implementato che mi serviva sì un hook, ma diverso da quello che avevo inizialmente immaginato.

Se non hai familiarità con la creazione di patch, ecco un buon articolo sull'applicazione di patch al core di WordPress, la maggior parte del quale si applica anche ai plugin, e per il resto spero sia ovvio cosa fare:

Spero sia utile?

P.S. Una cosa che trovo un po' deludente e che la tua domanda evidenzia è la percentuale di plugin progettati solo per utenti finali, cioè senza hook propri. Immagina se WordPress fosse progettato come la maggior parte dei plugin? Sarebbe inflessibile e una soluzione molto di nicchia.

Forse le cose sarebbero diverse se WordPress avesse la capacità di installare automaticamente i plugin da cui altri dipendono? Così com'è, spesso devo scrivere gran parte della funzionalità di cui ho bisogno da zero perché i clienti vogliono le cose in un certo modo e i plugin disponibili, pur essendo al 90% ciò che serve, non mi danno la flessibilità per aggiustare il restante 10%.

Vorrei davvero che chi guida la community di WordPress trovasse un modo per garantire che i plugin che seguono le best practice (come l'aggiunta di hook per altri sviluppatori) vengano premiati, proprio come le buone risposte vengono premiate su un sito StackExchange.

15 ago 2010 00:45:10
0

Dobbiamo semplicemente provare e ad essere migliori sviluppatori di plugin per poter lavorare bene insieme?

Per cominciare, sì.

L'unica vera soluzione è chiedere all'autore di includere hook personalizzati in modo che altri sviluppatori possano espandere il loro lavoro?

Sarebbe una buona soluzione.

Potresti anche copiare l'altro plugin e aggiungere le modifiche necessarie, anche se sarebbe più complicato.

14 ago 2010 22:37:32
3

Penso che tu abbia già risposto alla tua domanda nella domanda stessa, rendendola in qualche modo retorica.

Ovviamente stai parlando di un sistema simile a quello che Google incoraggia con Android e il sistema Intent, dove un'applicazione può pubblicare azioni che è in grado di eseguire per conto di altre applicazioni, che possono poi agganciarsi a esse e scambiare dati avanti e indietro. Personalmente credo che sia qualcosa verso cui noi, come buoni sviluppatori, dovremmo tendere: usiamo WordPress perché è già fantastico, abbastanza fantastico da rendere la decisione tra usarlo o sviluppare un prodotto interno simile piuttosto semplice nella maggior parte dei casi. Lo stesso vale per il repository dei plugin, sia come utente finale che come sviluppatore: perché sviluppare un plugin per Twitter quando ce n'è già uno perfettamente funzionante?

Lo stesso principio del "perché sviluppare duplicati" è al centro della tua domanda. Il sistema Intent di Android permette alle applicazioni di utilizzare funzioni già create e di passare dati tra di esse, ed è popolare e molto utilizzato perché viene spinto con forza. C'è un sistema simile già implementato in WordPress, ma è raramente utilizzato al di là degli hook presenti nel codice core, che invece sono ampiamente sfruttati.

La comunità trarrebbe beneficio se ci fossero più hook nei plugin personalizzati, ma come dici tu, non c'è un modo semplice per aggiungere hook quando e dove servono.

Per quanto riguarda il plugin di Twitter a cui vuoi agganciarti, manda un'email all'autore: sono sicuro che sarà felice di aggiungerli per te.

Se nel tuo plugin c'è un punto in cui pensi che sarebbe utile inserire un hook, fallo e documentalo bene. Se più persone inizieranno a inserire hook nei loro plugin, o se ci sarà una spinta generale in questa direzione, alla fine succederà.

Quindi, per rispondere alla tua domanda finale:

Dobbiamo solo cercare di essere sviluppatori di plugin migliori per poter collaborare tutti insieme?

Sì.


Modifica: Ho riflettuto ancora sulla domanda e sul modo migliore per implementare gli hook. Non potresti aggiungere un'azione che viene eseguita se la particolare funzione del plugin che stai cercando di utilizzare è presente?

14 ago 2010 22:44:39
Commenti

Funzionerebbe, ma cosa succederebbe se una funzione di un plugin diverso avesse lo stesso nome?

Arlen Beiler Arlen Beiler
14 ago 2010 22:59:42

Ops, forse non funzionerebbe, perché devi sapere cosa viene ritwittato e da chi. Controllare la funzione è una soluzione in runtime, ciò di cui abbiamo bisogno è una soluzione in tempo reale, una che viene eseguita quando la funzione in questione viene chiamata o restituisce dati.

Arlen Beiler Arlen Beiler
14 ago 2010 23:01:42

@Arlen - Diciamo che dovessi creare la tua funzione che verifica se la funzione specifica è presente. Verrebbe eseguita dopo 'plugins_loaded', e se è presente imposta un booleano che abilita le funzionalità. Dipende molto dal fatto che il codice non cambi, ma non vedo perché non dovrebbe funzionare?

nobody nobody
15 ago 2010 00:03:50
3

definisci una funzione:

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

ora puoi agganciarti a questo hook: add_action('my_footer', 'example_function', 1);# per maggiori informazioni vedi il mio post.

14 ago 2010 22:35:01
Commenti

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

Arlen Beiler Arlen Beiler
14 ago 2010 22:40:25

Capisco come aggiungere hook personalizzati - la domanda è come agganciarsi al plugin di qualcun altro, idealmente in un modo che non richieda la modifica diretta del loro plugin.

Ryan Elkins Ryan Elkins
14 ago 2010 22:41:51

@Arlen: molte grazie, scusa per il mio inglese non perfetto

@Ryan: non è possibile, quando il plugin non ha un hook; ma puoi verificare se sostituire la funzione o la classe, quando l'autore lo prevede nel suo plugin. Però è possibile controllare i plugin attivi e agganciarsi prima in WordPress rispetto all'altro plugin e sostituire la sua funzione.

bueltge bueltge
15 ago 2010 00:47:55