Migliori Pratiche Oggettive per lo Sviluppo di Plugin?

23 ago 2010, 06:53:13
Visualizzazioni: 18K
Voti: 138

Inizio una wiki della community per raccogliere le migliori pratiche oggettive per lo sviluppo di plugin. Questa domanda è stata ispirata dai commenti di @EAMann su wp-hackers.

L'idea è collaborare per definire quali potrebbero essere le migliori pratiche oggettive, in modo da poterle eventualmente utilizzare in un futuro processo di revisione collaborativa della community.

AGGIORNAMENTO: Dopo le prime risposte è chiaro che dobbiamo avere un solo suggerimento/migliore-pratica per ogni risposta e che le persone dovrebbero verificare l'elenco per evitare duplicati prima di pubblicare.

3
Commenti

Non capisco davvero come dovrebbe funzionare il wiki della community su questo (e gli altri) con SE correttamente, ma forse è una domanda da fare su meta. Si accumuleranno soprattutto duplicati nelle risposte.

hakre hakre
23 ago 2010 14:57:34

@hakre: Ottimo punto. Dopo aver visto questa cosa aggiungerò alla descrizione che le persone dovrebbero aggiungere solo un'idea per "risposta" e modificherò la mia risposta esistente per dividerla in più risposte.

MikeSchinkel MikeSchinkel
23 ago 2010 19:21:00

Lettura correlata: I 10 errori più comuni nei plugin Wordpress

Sisir Sisir
4 dic 2013 12:01:48
Tutte le risposte alla domanda 6
3

Testa il tuo plugin

Dovremmo assolutamente avere alcuni strumenti di test nel nostro ambiente di sviluppo plugin.

Basandoci su questa risposta di Ethan Seifert a una domanda sui test, queste sono le buone pratiche da seguire:

  • Il tuo Unit Testing dovrebbe testare la quantità più piccola di comportamento che una classe può eseguire.
  • Quando arrivi al livello di functional testing è qui che puoi testare il tuo codice con le dipendenze di Wordpress.
  • A seconda di cosa fa il tuo plugin - considera l'uso di test basati su Selenium che verificano la presenza di dati nel DOM utilizzando gli ID
16 feb 2011 06:44:57
Commenti

Sebbene i test siano importanti, dire che i test unitari dovrebbero testare il più piccolo invece del più grande sembra poco saggio. Se hai difficoltà a testare i problemi dipendenti da WordPress, allora immergiti semplicemente nel core di WordPress, troverai un sacco di variabili globali interne che puoi utilizzare per verificare se gli elementi hanno funzionato.

Backie Backie
16 feb 2011 12:51:40

Ma coprire prima il più piccolo è fondamentale, così da poter raggiungere il test funzionale con WordPress come dice la risposta, non è corretto?

Fernando Briano Fernando Briano
17 feb 2011 05:55:53

Questo è un plugin, non un'applicazione. Puoi testare un'applicazione Java senza Java Runtime? Sì, scrivendo Java come mockup e poi testando il tuo plugin. Le probabilità sono che i bug siano nel tuo mockup. *) disclaimer oppure compilandolo in codice nativo.

edelwater edelwater
18 feb 2011 03:18:28
0

Preoccupati delle future versioni di WordPress e del tema

Nota: Dopo aver riletto questo consiglio, ora mi dissocio da questa pratica poiché controllare ogni funzione per verificarne l'esistenza potrebbe rallentare il tuo sito.

Verifica se le funzioni sono deprecate direttamente nel tuo tema.

Questo è un esempio di "potrebbe essere così".

if ( ! function_exists( 'wp_some_fn' ) ) 
{
    $theme_data = wp_get_theme();
    $error = new WP_Error( 'wp_some_fn', sprintf( __( 'La funzione %1$s è deprecata. Si prega di informare l\'autore', TEXTDOMAIN ), "Tema: {$theme_data->Name}: Versione {$theme_data->Version}" );

    // interrompi
    if ( is_wp_error( $error ) )
        return print $error->get_error_message();
} 
// altrimenti se nessun errore - la funzione esiste e funziona
wp_some_fn();

Per una gestione degli errori corretta/migliore pratica vedi questa risposta: link

Potresti inserire anche il $cause nella funzione. Questo ti aiuterà, insieme ai tuoi utenti, a tenere traccia delle funzioni o classi nel tuo tema che potrebbero cambiare.

22 ott 2010 18:46:51
2

Usa Nomi Appropriati

Dai nomi significativi a hook e filtri (classi, funzioni e variabili), in modo che le persone possano identificarli anche dopo un anno, quando non ricordano più da dove proviene quel pezzo di codice. Non importa se i nomi degli hook/filtri diventano lunghi. Es. tuonomeunico_hook/filter_cosafa.

  • Se il tuo file contiene una classe chiamata "dbdbInit", allora il file che contiene la classe dovrebbe chiamarsi "dbdbInit.class.php".
  • Se all'interno della tua classe dbdbInit hai una funzione che registra ad es. custom_post_types, chiamala register_custom_post_types().
  • Se hai un array che contiene i nomi per i custom_post_types, chiama la variabile a cui è assegnato l'array $custom_post_type_names.
  • Se hai una funzione che gestisce un array scrivi function array_handler( $array ) { // gestisci l'array}..
  • Cerca semplicemente di nominare le cose in modo che tu sappia cosa fa un elemento/a cosa appartiene dal suo nome.

Un'altra cosa: Se devi eseguire il debug, nel 99% dei casi ricevi tutti i messaggi non solo per il tuo codice, ma anche per WordPress. Quindi cerca di usare lo stesso prefisso, ad es. "dbdb", per le tue classi, funzioni pubbliche e variabili/oggetti. In questo modo puoi trovarle facilmente tra centinaia di file. (WordPress carica 64 file prima del tuo tema e circa 1.550 funzioni, senza contare hook e filtri.)

24 ago 2010 10:02:38
Commenti

Non ho davvero un'idea chiara di cosa significhi. La prima frase non è completa. Questo testo deve essere riscritto e chiarito.

MikeSchinkel MikeSchinkel
25 ago 2010 23:02:22

Rispettare gli standard di WordPress quando si nominano file e funzioni è anche una buona pratica, ad esempio "class-db-init.php" http://codex.wordpress.org/WordPress_Coding_Standards

gabrielk gabrielk
21 giu 2011 19:29:54
9

Disaccoppiare dal codice core di WordPress

Un Plugin dovrebbe ridurre al minimo necessario l'impatto delle API di WordPress per separare il codice del plugin dal codice di WordPress. Questo riduce l'impatto dei cambiamenti all'interno del codice base di WordPress sul plugin. Inoltre, migliora la compatibilità cross-version del codice del tuo plugin.

Questo non significa non usare le funzioni di WordPress (usale, come suggerisce Riutilizza le funzioni esistenti), ma evitare di intrecciare troppo il tuo codice con le funzioni di WordPress, separando invece la logica di business del tuo plugin dalla funzionalità di WordPress.

23 ago 2010 15:08:57
Commenti

Sto avendo difficoltà con la formulazione di questo concetto. Intendi dire che un plugin dovrebbe utilizzare l'API di WordPress ogni volta che è possibile, invece di accedere direttamente alle tabelle SQL e/o alle variabili globali?

MikeSchinkel MikeSchinkel
25 ago 2010 22:41:41

Beh. Una volta abbiamo dovuto gestire i dati di un form in un progetto, quindi accedere a $_REQUEST. Poi hanno modificato lo slashing all'interno di quella variabile. Quindi invece di usare $_REQUEST direttamente, usa una funzione che ha una singola chiamata a $_REQUEST per l'intero plugin. In caso lo slashing venga modificato, solo questa funzione dovrà essere cambiata. Questo non va contro l'uso dell'API di WordPress ma serve per disaccoppiare il plugin da essa, così puoi reagire meglio ai cambiamenti nel core di WP. Questo aiuta a mantenere i tuoi plugin nel lungo periodo. Per un semplice gadget, non è necessario.

hakre hakre
25 ago 2010 23:10:13

Essendo uno sviluppatore a intermittenza da 23 anni ho visto molti cicli e molte best practice suggerite andare e venire. Ho visto il pendolo oscillare ampiamente in entrambe le direzioni. Ora credo nella moderazione. Nei miei primi anni astrassi tutto, ma ho imparato che l'astrazione aggiunge complessità che spesso è peggiore del beneficio atteso. Quando vediamo qualcosa che ci causa problemi come persone, cerchiamo subito modi per proteggerci da esso in futuro, ma spesso la medicina è più dannosa della malattia. Negli USA, Sarbanes-Oxley è un esempio di questo.

MikeSchinkel MikeSchinkel
26 ago 2010 10:01:40

Una volta credevo che le variabili globali fossero semplicemente negative. Poi ho lavorato con WordPress e sai una cosa? Hanno i loro vantaggi se usate con moderazione. Potrei scrivere un libro su questo argomento (anche se non ho intenzione di farlo; troppo lavoro per un ritorno troppo basso). Dove mi trovo ora? La semplicità ha il valore più alto. Probabilmente è meglio non astrarre e poi risolvere i problemi quando e se si presentano, piuttosto che sprecare molte più energie per paura che possano verificarsi. Quindi sono propenso a votare contro questa idea.

MikeSchinkel MikeSchinkel
26 ago 2010 10:04:16

Basta una breve domanda che ho posto su wp-hackers: ti odiano se usi variabili globali come $wp_taxonomies, perché sono "interne" (so che ce ne sono alcune che dovrebbero essere usate come $wp_query o $post)...

kaiser kaiser
16 feb 2011 12:12:10

@kaiser - O qualcosa è interno o cambiarlo romperà la compatibilità all'indietro. Ecco a te il namespace globale in WordPress.

hakre hakre
16 feb 2011 12:19:49

@hakre: Chi ha detto qualcosa riguardo al cambiamento? Recuperare e utilizzare i dati da questo è ciò di cui sto parlando. Non esiste sempre una funzione che faccia ciò di cui hai bisogno e prima di finire a fare query SQL personalizzate, semplicemente le uso.

kaiser kaiser
16 feb 2011 12:32:09

@kaiser: Cambiare nel senso che i dati cambieranno in queste variabili. O addirittura tu volevi modificare i dati anche all'interno degli array globali? ;) È un enorme risparmio di tempo. Anche se le cose si rompono con una nuova versione, è facile da sistemare.

hakre hakre
16 feb 2011 13:16:31

@hakre: No, non sto giocando/mettendo mano ai dati che vengono forniti dalle variabili globali $vars. E sì: meglio procedere in questo modo e rompersi in una versione futura invece di pasticciare con 5 funzioni che potrebbero anche diventare deprecate (e non essere marcate come tali) e poi sistemare tutto in 5 minuti. Risparmio di tempo: +1.

kaiser kaiser
16 feb 2011 13:21:24
Mostra i restanti 4 commenti
4

Utilizza le opzioni di WordPress per le stringhe di output del plugin

Per rendere il plugin facilmente utilizzabile e personalizzabile, tutte le stringhe di output dovrebbero essere modificabili. Il modo migliore per farlo è utilizzare le opzioni di WordPress per memorizzare le stringhe di output e fornire un backend per modificare i valori predefiniti. Il plugin non dovrebbe utilizzare stringhe visualizzate che non possono essere facilmente modificate tramite il backend del plugin.

Ad esempio: Sociable - ti dà la possibilità di cambiare la frase che appare prima della parte delle icone "condividi e divertiti:"

25 ago 2010 02:30:07
Commenti

Cos'è esattamente una "stringa di plugin"? Puoi fornire esempi di casi d'uso? Inoltre, per favore scrivi in frasi complete così che questa possa essere una risorsa più utile.

MikeSchinkel MikeSchinkel
25 ago 2010 23:06:05

Se hai l'internazionalizzazione, questo dovrebbe essere ridondante.

Raphael Raphael
15 nov 2010 13:29:41

Non sono d'accordo. Rende le cose più facili per gli utenti finali, ma più difficili per gli sviluppatori. Come ha detto Raphael, dovrebbe essere usata l'i18n.

scribu scribu
6 gen 2011 23:09:13

Sono d'accordo con Raphael e scribu. Le funzioni gettext sono facili da filtrare, non c'è bisogno di memorizzare ridondantemente i contenuti testuali nel database.

Rarst Rarst
10 gen 2011 09:42:28
0

Utilizza gli hook di disinstallazione, attivazione e disattivazione

Ci sono tre hook diversi per questo:

  • Disinstallazione register_uninstall_hook();
  • Disattivazione register_deactivation_hook();
  • Attivazione register_activation_hook();

Qui puoi trovare un'istruzione dettagliata con un esempio funzionante.

28 ott 2011 14:24:36