Practici Objektive Recomandate pentru Dezvoltarea de Plugin-uri?

23 aug. 2010, 06:53:13
Vizualizări: 18K
Voturi: 138

Inițiem un wiki comunitar pentru a aduna cele mai bune practici obiective pentru dezvoltarea de plugin-uri. Această întrebare a fost inspirată de comentariile lui @EAMann pe wp-hackers.

Ideea este să colaborăm pentru a identifica cele mai bune practici obiective, astfel încât să le putem folosi într-un potențial proces de revizuire comunitar.

ACTUALIZARE: După primele răspunsuri, devine clar că trebuie să avem o singură idee/sugestie/best-practice per răspuns, iar utilizatorii ar trebui să verifice lista pentru a evita duplicatele înainte de a posta.

3
Comentarii

Nu înțeleg cu adevărat cum ar trebui să funcționeze wiki-ul comunitar pe acest site (și pe celelalte) în mod corect cu SE, dar poate aceasta este o întrebare pentru meta. Va aduna doar în mare parte răspunsuri duplicate.

hakre hakre
23 aug. 2010 14:57:34

@hakre: Foarte bun punctul tău. După ce am văzut asta, voi adăuga în descriere că oamenii ar trebui să adauge doar o idee per "răspuns" și voi modifica răspunsul meu existent pentru a fi mai multe răspunsuri.

MikeSchinkel MikeSchinkel
23 aug. 2010 19:21:00

Lectură recomandată: Top 10 cele mai comune greșeli în plugin-urile Wordpress

Sisir Sisir
4 dec. 2013 12:01:48
Toate răspunsurile la întrebare 6
3

Testează-ți pluginul

Ar trebui să avem cu siguranță câteva instrumente de testare în mediul de dezvoltare al pluginului nostru.

Bazat pe acest răspuns al lui Ethan Seifert la o întrebare despre testare, acestea sunt bune practici de urmat:

  • Testele Unitare ar trebui să testeze cea mai mică cantitate de comportament pe care o poate realiza o clasă.
  • Când ajungi la nivelul testării funcționale, aici poți testa codul cu dependențele WordPress.
  • În funcție de ce face pluginul tău – ia în considerare utilizarea testelor bazate pe Selenium care verifică prezența datelor în DOM folosind ID-uri
16 feb. 2011 06:44:57
Comentarii

Deși testarea este importantă, a spune că testele unitare ar trebui să testeze cele mai mici în loc de cele mai mari aspecte pare neînțelept. Dacă ai dificultăți în testarea problemelor dependente de WordPress, atunci pur și simplu aprofundează-te în nucleul WordPress, vei găsi o mulțime de variabile globale interne pe care le poți folosi pentru a verifica dacă elementele au funcționat.

Backie Backie
16 feb. 2011 12:51:40

Dar acoperirea celor mai mici aspecte mai întâi este de bază, astfel încât să poți ajunge la testarea funcțională cu WordPress, așa cum răspunde întrebarea, nu-i așa?

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

Acesta este un plugin, nu o aplicație, poți testa o aplicație Java fără Java Runtime? Da, prin scrierea unui mockup în Java și apoi testarea pluginului tău. Șansele sunt că bug-urile sunt în mockup-ul tău. *) disclaimer sau compilându-l în cod nativ.

edelwater edelwater
18 feb. 2011 03:18:28
0

Grijă pentru versiunile viitoare de WordPress și teme

Notă: După ce am recitit acest sfat, acum mă distanțez de această practică, deoarece verificarea fiecărei funcții pentru existență poate încetini site-ul tău.

Verifică dacă funcțiile sunt învechite direct în tema ta.

Acesta este un exemplu "care ar putea arăta așa".

if ( ! function_exists( 'wp_some_fn' ) ) 
{
    $theme_data = wp_get_theme();
    $error = new WP_Error( 'wp_some_fn', sprintf( __( 'Funcția %1$s este învechită. Te rugăm să informezi autorul', TEXTDOMAIN ), "Tema: {$theme_data->Name}: Versiunea {$theme_data->Version}" );

    // întrerupe
    if ( is_wp_error( $error ) )
        return print $error->get_error_message();
} 
// altfel dacă nu există eroare - funcția funcționează și există
wp_some_fn();

Pentru gestionarea corectă/cea mai bună practică a erorilor, vezi acest răspuns: link

Poți adăuga chiar și $cause în funcție. Acest lucru te va ajuta pe tine și utilizatorii tăi să țină pasul cu funcțiile sau clasele din tema ta care s-ar putea schimba.

22 oct. 2010 18:46:51
2

Folosește Denumiri Adecvate

Denumește hook-urile și filtrele (clasele, funcțiile și variabilele), astfel încât oamenii să le poată identifica chiar și peste un an, când nu-și mai amintesc de unde vine acea bucățică de cod. Nu contează dacă numele hook-urilor/filtrelor devin lungi. Ex. numeletauunic_hook/filter_ceface.

  • Dacă fișierul tău conține o clasă numită "dbdbInit", atunci fișierul care conține clasa ar trebui să se numească "dbdbInit.class.php".
  • Dacă ai în interiorul clasei dbdbInit o funcție care înregistrează, de exemplu, custom_post_types, atunci numește-o register_custom_post_types().
  • Dacă ai un array care conține numele pentru custom_post_types, atunci numește variabila în care este asignat array-ul $custom_post_type_names.
  • Dacă ai o funcție care gestionează un array, scrie function array_handler( $array ) { // gestionează array-ul}..
  • Încearcă pur și simplu să denumești lucrurile într-un mod în care să știi ce face semnul/unde aparține după numele său.

Alt lucru: Dacă trebuie să debug-uiți, atunci, în 99% din cazuri, veți primi toate mesajele nu doar pentru codul vostru, ci și pentru WordPress. Așadar, încercați să folosiți același prefix, de exemplu "dbdb", pentru clasele, funcțiile publice și variabilele/obiectele voastre. Astfel, le puteți găsi cu ușurință între sute de fișiere. (WordPress încarcă 64 de fișiere înaintea temei tale și aproximativ 1.550 de funcții, fără a vorbi despre hook-uri și filtre.)

24 aug. 2010 10:02:38
Comentarii

Nu am o idee clară despre ce înseamnă acest lucru. Prima propoziție nu este completă. Acest text trebuie rescris și clarificat.

MikeSchinkel MikeSchinkel
25 aug. 2010 23:02:22

este bine să respectăm standardele WordPress atunci când denumim fișierele și funcțiile, de exemplu "class-db-init.php" http://codex.wordpress.org/WordPress_Coding_Standards

gabrielk gabrielk
21 iun. 2011 19:29:54
9

Decuplează-te de codul de bază al WordPress

Un Plugin ar trebuireducă impactul API-ului WordPress la minimul necesar pentru a separa codul plugin-ului de cel al WordPress. Acest lucru reduce impactul modificărilor din codul de bază al WordPress asupra plugin-ului. În plus, îmbunătățește compatibilitatea între versiuni a codului plugin-ului tău.

Acest lucru nu înseamnă să nu folosești funcțiile WordPress (folosește-le, așa cum sugerează Reutilizează funcțiile existente), ci să nu-ți împletești codul prea mult cu funcțiile WordPress, ci să separi logica de afaceri a plugin-ului tău de funcționalitățile WordPress.

23 aug. 2010 15:08:57
Comentarii

Am dificultăți cu formularea acesteia. Vrei să spui că un plugin ar trebui să folosească API-ul WordPress ori de câte ori este posibil, în loc să acceseze direct tabelele SQL și/sau variabilele globale?

MikeSchinkel MikeSchinkel
25 aug. 2010 22:41:41

Ei bine. Odată a trebuit să lucrăm cu date de formular într-un proiect, așa că am accesat $_REQUEST. Apoi au schimbat modul în care se face slash-ul în interiorul acestuia. Deci, în loc să folosiți $_REQUEST, utilizați o funcție care are un singur apel către $_REQUEST pentru întregul plugin. În cazul în care modul de slash se schimbă, doar această funcție trebuie modificată. Acest lucru nu este împotriva utilizării API-ului WordPress, ci pentru a decupla pluginul de acesta, astfel încât să puteți reacționa mai bine la modificările din nucleul WP. Acest lucru vă ajută să vă mențineți pluginurile pe termen lung. Pentru un simplu gadget, acest lucru nu este necesar.

hakre hakre
25 aug. 2010 23:10:13

Fiind dezvoltator intermitent timp de 23 de ani, am văzut multe cicluri și multe practici recomandate care au venit și au dispărut. Am văzut pendulul oscilând amplu în ambele direcții. Acum cred în moderație. În primii mei ani, am abstractizat totul, dar am învățat că abstractizarea adaugă complexitate care este adesea mai rea decât beneficiul așteptat. Când vedem ceva care ne provoacă probleme ca oameni, imediat căutăm modalități de a ne proteja de el în viitor, dar adesea medicina este mai dăunătoare decât boala. În SUA, Sarbanes-Oxley este un exemplu în acest sens.

MikeSchinkel MikeSchinkel
26 aug. 2010 10:01:40

Obișnuiam să cred că variabilele globale sunt pur și simplu rele. Apoi am lucrat cu WordPress și, știi ce, ele au avantajele lor atunci când sunt folosite cu moderație. Aș putea scrie o carte pe acest subiect (deși nu am de gând s-o fac; prea multă muncă pentru prea puțină răsplată.) Unde consider acum că stăm? Simplitatea are cea mai mare valoare. Probabil că e mai bine să nu abstractizezi și apoi doar să rezolvi problemele atunci când și dacă apar, decât să petreci mult mai mult timp în teamă că ar putea apărea. Așa că am tendința să votez împotriva acesteia.

MikeSchinkel MikeSchinkel
26 aug. 2010 10:04:16

Doar din întrebarea scurtă pe care am pus-o pe wp-hackers: Ei te urăsc dacă folosești variabile globale precum $wp_taxonomies, pentru că sunt "interne" (știu că există unele care ar trebui folosite, cum ar fi $wp_query sau $post)...

kaiser kaiser
16 feb. 2011 12:12:10

@kaiser - Fie ceva este intern, fie schimbarea va rupe compatibilitatea înapoi. Atât despre namespace-ul global în WordPress.

hakre hakre
16 feb. 2011 12:19:49

@hakre: Cine a spus ceva despre modificare? Preluarea și folosirea datelor din asta e ceea ce discut. Nu există întotdeauna o funcție care să facă exact ce ai nevoie și înainte să ajung să scriu interogări SQL personalizate, pur și simplu le folosesc.

kaiser kaiser
16 feb. 2011 12:32:09

@kaiser: Modificare în sensul că datele din aceste variabile se vor schimba. Sau chiar tu ai vrut să modifici date în array-uri globale? ;) Este un economisor de timp incredibil. Chiar dacă lucrurile se strică cu o nouă versiune, e ușor de reparat.

hakre hakre
16 feb. 2011 13:16:31

@hakre: Nu, nu mă joc/încurc în datele care sunt furnizate de variabilele globale $vars. Și da: mai bine să mergi pe această cale și să se strice într-o versiune viitoare decât să te încurci cu 5 funcții care ar putea fi, de asemenea, depreciate (și fără să fie marcate ca atare) și apoi să le repari mai târziu în 5 minute. Economie de timp: +1.

kaiser kaiser
16 feb. 2011 13:21:24
Arată celelalte 4 comentarii
4

Folosește opțiunile WordPress pentru șirurile de ieșire ale pluginului

Pentru a face pluginul ușor de utilizat și personalizat, toate șirurile de ieșire ar trebui să fie modificabile. Cea mai bună metodă pentru a realiza acest lucru este utilizarea opțiunilor WordPress pentru a stoca șirurile de ieșire și a oferi o interfață de administrare pentru a modifica valorile implicite. Pluginul nu ar trebui să utilizeze șiruri afișate care nu pot fi ușor schimbate folosind panoul de administrare al pluginului.

De exemplu: Sociable - îți oferă posibilitatea de a schimba fraza care apare înaintea părții cu iconițe "împărtășește și bucură-te:"

25 aug. 2010 02:30:07
Comentarii

Ce este exact un "șir de plugin"? Puteți oferi exemple de cazuri de utilizare? De asemenea, vă rugăm să scrieți în propoziții complete, astfel încât acesta să poată fi o resursă mai valoroasă.

MikeSchinkel MikeSchinkel
25 aug. 2010 23:06:05

Dacă aveți internaționalizare, acest lucru ar trebui să fie redundant.

Raphael Raphael
15 nov. 2010 13:29:41

Nu sunt de acord. Face lucrurile mai ușoare pentru utilizatorii finali, dar mai dificile pentru dezvoltatori. După cum a spus Raphael, ar trebui folosită i18n în schimb.

scribu scribu
6 ian. 2011 23:09:13

Susțin pe Raphael și scribu. Funcțiile gettext sunt ușor de filtrat, nu este nevoie să stochezi redundant conținutul textual în baza de date.

Rarst Rarst
10 ian. 2011 09:42:28
0

Folosește hook-uri pentru dezinstalare, activare și dezactivare

Există trei hook-uri diferite pentru aceasta:

  • Dezinstalare register_uninstall_hook();
  • Dezactivare register_deactivation_hook();
  • Activare register_activation_hook();

O instrucțiune detaliată cu un exemplu funcțional poate fi găsită aici..

28 oct. 2011 14:24:36