În această serie, vom acoperi cele mai importante lucruri pe care ar trebui să le luați în considerare atunci când dezvoltați un WordPress Plugin sau o temă WordPress.
Acest ghid își propune să ofere un set de bune practici care să fie utile începătorilor și dezvoltatorilor de experți care încep să lucreze cu WordPress
Dar asteapta! Dacă ați dezvoltat pluginurile WordPress pentru o vreme, aruncați o privire înainte de a decide că acest ghid nu este pentru dvs. Sunt sigur că veți obține ceva din ea. La urma urmei, avem cu toții ceva unic de oferit.
Cele mai multe explicații ale acestei serii există deja în Cod, dar știu că acesta conține atât de multe informații, că poate fi dificil să se știe de unde să înceapă.
Astăzi acoperim următoarele subiecte:
Seria își propune să fie cât mai clară posibil și va include atât exemple bune, cât și exemple de bas pentru a da un sens pentru cum anumite lucruri ar trebui să lucrați când scrieți codul specific WordPress.
Rețineți că nu totul este obligatoriu pentru a scrie un plugin; totuși, dacă începi să începi, de ce să nu începi pe piciorul drept?
Voi încerca să fac aceste serii ușor de citit. Voi include câteva exemple de cod bun și prost. Nu totul explicat aici este obligatoriu pentru a scrie un plugin, dar dacă începeți cu dezvoltarea Wordpress, de ce să nu începeți calea cea bună? Odată ce devine un obicei, va fi greu să faceți acest lucru greșit.
Din punct de vedere personal, acesta este unul dintre cele mai mari deficiențe ale mele când dezvolte pluginuri. Dacă dezvoltați instrumente pentru WordPress, ar trebui pur și simplu să urmați standardele WordPress Coding. Standardele de codificare ajută la îmbunătățirea lizibilității coduluișiajută la evitarea erorilor comune de codificare.
WordPress este un CMS colaborativ și un lucru atât de simplu ca toată lumea scriind codul în același mod face citirea, scrierea și menținerea codului mai ușor pentru toată lumea. La început, poate fi dificil să schimbați stilul de codare cu care sunteți obișnuit să lucrați, dar în cele din urmă veți găsi că va deveni a doua natură și codul dvs. va fi mai curat și mult mai ușor de citit.
În Manualul WordPress, standardele sunt împărțite în cele patru limbi principale utilizate
Mai jos vă voi arăta câteva simple exemple de stil pentru bretele PHP, astfel încât să puteți obține o idee.
dacă (condiție) action0 ($ var); dacă (condiție) action1 (); elseif (condiția2) action2a (); action2b ();
dacă (condiție) action0 ($ var); dacă (condiție) action1 (); elseif (condiția2) action2a (); action2b ();
Cel de-al doilea exemplu este mult mai ușor de citit, nu-i așa? Manualul standardelor de codare este plin de exemple care vă vor ajuta să vă faceți codul mai curat. Este ușor să fiți uimiți de modul în care ceva atât de simplu ca și câteva spații și file poate îmbunătăți citirea codului.
În timp ce scriam acest articol, am cumpărat o temă pentru un client și când m-am dus să editez un cod, am fost șocat de cât de greu a fost acest lucru.
Iată ce vreau să spun:
>"title ="„> ';?> „; foreach (categoriile $ ca $ tag) $ tag_link = get_category_link ($ tag-> termen_id); $ titleColor = categorys_title_color ($ tag-> termen_id, "categorie", false); echo ". $ tag-> name. ''; ecou "";?>Un pic înfricoșător, nu? După câteva minute de lucru cu acest cod, am trimis un e-mail autorului cu un link către Cartea standardelor de codare.
Evitarea coliziunilor numelor de funcții
Coliziuni de nume apar atunci când o funcție are același nume ca o funcție deja definită. De exemplu, dacă în tema dvs. aveți o funcție numită
get_the_post_terms ()
și instalați un plugin care are o funcție cu același nume veți obține ceva de genul:Eroare fatală: Nu se poate redeclora get_the_post_terms () (declarată anterior în ...Din păcate, acestea se întâmplă mult mai frecvent decât ar trebui. Lucrul este că este ușor de evitat.
Pentru a evita acest lucru avem opțiuni:
1. Prefixați-vă funcțiile
De exemplu, dacă numele plugin-ului dvs. este "WordPress Cool Plugin", puteți utiliza a
wcc_
prefix în toate funcțiile.Astfel, în exemplul de mai sus, numele funcției noastre va fi
wcc_get_the_post_terms ()
De asemenea, vă recomandăm să vă prefixați CSS-ul sau cel puțin să încercați să îl faceți mai unic pentru a evita modificarea altor stiluri de pluginuri
2. Înfășurați-vă funcțiile într-o clasă
Poate că plugin-ul dvs. este atât de simplu încât nu are nevoie de o clasă, dar puteți crea unul pentru a păstra lucrurile organizate. Îmi place în mod deosebit să folosesc modelul singleton, dar verificați exemplul de mai jos pentru o clasă simplă cu o metodă statică.
clasa Wcc_Mailer funcția statică trimite ($ post_ID) $ friends = '[email protected]'; mail ($ prieteni, "Postare nouă!", "Verificați noua mea postare în". get_permalink ($ post_ID)); returnați $ post_ID; add_action ('publish_post', array ('Wcc_Mailer', 'trimite'));După cum puteți vedea pe acest exemplu, am prefixat doar numele meu de clasă, dar funcția mea este simplu numită "trimite". Acest nume de metodă este acum protejat de spațiul de nume global și nu poate fi apelat direct. Pentru ao chema, va trebui să fac asta:
Wcc_Mailer :: trimite ($ post_id);Codul de comentarii
Comentariile codului sunt cel mai bun prieten al dezvoltatorului. S-ar putea să nu fiți nevoit să comentați fiecare funcție sau variabilă pe care o creați, dar aveți încredere în mine atunci când codul dvs. crește - mai ales că a primit contribuții de la alții - poate fi dificil să știți exact ce să faceți.
De asemenea, așa cum am spus înainte, WordPress este un CMS colaborativ. Mulți dezvoltatori vor examina codul dvs. și cu un anumit ajutor vor merge pe calea cea bună.
Eu personal folosesc PHPDoc sintax pentru a comenta funcțiile mele și cu Sublime + Docblockr este foarte ușor să o faci.
Să vedem cum băieții de la Wordpress comentează
wp_mail ()
funcția situată înwp-includes / pluggable.php
/ ** * Trimite e-mail, similar cu poșta PHP * * O adevărată valoare de returnare nu înseamnă automat că utilizatorul a primit e-mailul * cu succes. Aceasta înseamnă doar că metoda utilizată a reușit * să proceseze cererea fără erori. * * Folosind cele două "wp_mail_from" și "wp_mail_from_name" cârligele permit de la * crearea unei adrese de la "Name"când ambele sunt setate. Dacă * doar 'wp_mail_from' este setat, atunci doar adresa de e-mail va fi utilizată fără nume *. * * Tipul de conținut implicit este "text / simplu" care nu permite utilizarea HTML. * Cu toate acestea, puteți seta tipul de conținut al e-mailului utilizând filtrul * 'wp_mail_content_type'. * * Setul implicit de caractere se bazează pe caracterele folosite pe blog. Setul de caractere poate fi setat utilizând filtrul "wp_mail_charset". * * @ de la 1.2.1 * * @ foloseste PHPMailer * * @ param string | array $ la Array sau lista separata prin virgul de adrese de e-mail pentru a trimite mesajul. * @ string string $ subiect Subiectul emailului * @param string $ message Conținutul mesajului * @param string | array $ headers Opțional. Anteturi suplimentare. * @ param string | array $ attachments Opțional. Fișierele atașate. * @return bool Dacă conținutul e-mailurilor a fost trimis cu succes. * / Funcția wp_mail ($ to, $ subject, $ message, $ headers = ", $ attachments = array ()) [...] e) return false; După cum puteți vedea, ele descriu ce funcționează funcția, ce parametri sunt necesari și ce se va întoarce.
Destul de explicativ, corect?
Comentariile nu sunt menite a fi utilizate numai cu PHP. În HTML, de exemplu, îmi place să folosesc
la sfârșitul blocurilor mari de cod, așa că nu mă pierd atât de ușor.
Pentru CSS, folosesc comentariile pentru a împărți codul meu în diferite secțiuni.
De exemplu :
/ ********************* STILURI GENERALE ********************* / corp font- familie: Arial; culoare: # 333; / ***************************************************** ****************** H1, H2, H3, H4, H5 STYLE ********************** ******************************************** / h1, .h1 font-size: 2.5; linia-înălțime: 1em; font-family: $ vag-bold; / ********************* STILURI DE NAVIGARE ********************* / nav culoare :roșu [… ]Împărtășește-ți comentariile cu noi!
Sfaturi de securitate
Securitatea trebuie să fie luată foarte serios! Dacă pluginul sau tema devine populară, credeți-mă, nu doriți să fiți vinovatul a mii de site-uri hacked. Dacă credeți că exagerez, aruncați o privire la cercetarea Checkmarx efectuată în 2013 cu privire la primele 50 de pluginuri WordPress.
Acum, să vedem câteva sfaturi de securitate pentru dezvoltarea WordPress:
Vulnerabilități XSS
Pentru a preveni XSS, trebuie să facem două lucruri. Sanitizați datele de intrare și dezinstalați datele de ieșire. Avem mai multe metode de dezinsecție în funcție de date și de contextul folosit. Prin regula generală, nu trebuie să aveți încredere în niciun fel de date de intrare și nu aveți încredere în niciunul dintre datele care vor fi transmise.
Pentru datele de intrare puteți utiliza, de exemplu
sanitize_text_field ()
care verifică pentru invalid UTF-8, Convertizor unic < characters to entity, strip all tags, remove line breaks, tabs and extra white space and strip octets. Depending on the context you are, there are different functions that will help you out sanitizing your data.Același lucru se întâmplă și când transmiteți datele. Verificați următorul exemplu privind modul de afișare a unui link:
„>
esc_url
respinge urlările invalide, elimină caracterele nevalide și elimină caracterele periculoase
esc_html
codeaza < > & "'când se emite HTML.Din nou, în funcție de datele pe care le aveți, există diferite funcții pentru a vă ajuta. Pentru JavaScript ar putea fi folosit
esc_js
.În plus față de dezintoxicare, nu uitați să vă valida și data.
Împiedicați accesul direct la fișierele dvs.
Cele mai multe gazde permit acces direct la fișiere. În plugin-ul dvs., aceasta înseamnă că, probabil, vor apărea unele erori PHP, iar aceste erori sunt informații valoroase pentru atacatori.
Un cod de bază pentru a preveni acest lucru, pe care îl puteți pune pe scenariul dvs., este:
// Ieșiți dacă este accesat direct dacă (! Definit ('ABSPATH')) ieșire;Acest lucru previne practic executarea scriptului dacă nu îl accesăm prin WordPress.
Eliminați toate avertismentele și notificările
Nu numai greșelile PHP ajută atacatorii - anunțurile și avertismentele includ, de asemenea, o mulțime de informații valoroase. Fiecare plugin trebuie codificat folosind modul DEBUG. Acest lucru va ajuta de asemenea la capturarea funcțiilor depreciate pe pluginul dvs. Pentru a permite
REMEDIERE
Mod simplu căutați această linie pe dvs.wp-config.php
și schimbați-lADEVĂRAT
.defini (WP_DEBUG, true);Împreună cu aceasta, ar trebui să încercați plugin-ul de debugging. Prin adăugarea acestei alte linii simple, veți putea, de asemenea, să analizați toate interogările bazei de date.
define ('SAVEQUERIES', true);Utilizați valorile Nonce
Valorile non-valide sunt scurte pentru numerele folosite o singură dată și sunt utilizate pentru a proteja împotriva falsificării solicitărilor intermediare sau CSRF, cu alte cuvinte, sunt cereri neașteptate sau duplicate care ar putea provoca modificări nedorite permanente sau ireversibile la site-ul web și, în special, Bază de date. Toate acestea ar putea fi efectuate de un atacator sau doar de o greșeală simplă a unui utilizator de încredere.
În funcție de locul în care aveți nevoie de nonce, îl puteți crea în diferite moduri:
Pentru ao folosi pe o legătură, utilizați
wp_nonce_url ()
$ complete_url = wp_nonce_url ($ bare_url, 'trash-post', 'my_nonce');Pentru ao folosi pe un formular, utilizați
wp_nonce_field ()
wp_nonce_field ("coș de gunoi", "my_nonce");Pentru ao folosi în orice alt loc, utilizați
wp_create_nonce ()
wp_localize_script ('my-script', 'my-var-name', array ('nonce' => wp_create_nonce ('trash-post', 'my_nonce'));Dacă verificați exemplul de mai sus, veți vedea cum folosesc
wp_localize_script
(pe care o voi vorbi despre articolul următor) pentru a include nonce meu într-un bloc de cod JavaScript. Fac acest lucru pentru că im intenționez să utilizez jQuery pentru a face o solicitare AJAX mai târziu și ar trebui să includeți întotdeauna nonce pe apelurile dvs. AJAX.Apoi, în scriptul dvs. pentru a verifica pur și simplu nonce, introduceți următorul cod
dacă (! wp_verify_nonce ('trash_post', 'my_nonce')) die ("Închis!");Utilizați funcțiile și bibliotecile WordPress
Verificați întotdeauna dacă tot ceea ce încercați să faceți este posibil să faceți acest lucru cu funcțiile de bază și bibliotecile WordPress. În acest fel, scripturile dvs. vor fi mai puțin predispuse la vulnerabilități și, dacă apar unele, acestea vor fi rezolvate de colaboratorii de bază WordPress și nu va trebui să vă faceți griji pentru a vă contacta toți clienții.
Cel mai faimos exemplu în acest sens este cu biblioteca TimThumb, care, până acum câțiva ani, a fost folosită de mii de pluginuri și teme. Într-o zi, în 2011 vulnerabilitatea a fost dezvăluită. De atunci, putem folosi acum built-in-ul
add_image_size ()
în acest scop.Alte funcții comune sunt împachetate în cadrul funcțiilor WordPress cum ar fi
răsuci
care pot fi ușor înlocuite dewp_remote_get
șiwp_remote_post
care nu numai că va codifica datele, dar va oferi, de asemenea, alternative de rezervă, dacărăsuci
eșuează.Un alt exemplu va fi utilizarea lui
get_template_part ()
în loc de a utilizarequire ()
sauinclude()
Funcții PHP. În timp ce ele sunt în esență aceleași, prima dintre ele știe deja unde este localizată tema și va căuta fișierul solicitat în directorul temei respective. Nu va emite un avertisment sau o eroare fatală dacă fișierul solicitat nu există. căutați alte fișiere potrivite, dacă nu a fost găsit și nu cunoaște temele copilului și temele părinților.Nucleul WordPress include o mulțime de scripturi pe care le putem folosi în pluginurile sau temele noastre. Așa că întotdeauna aruncați o privire înainte de a adăuga noi biblioteci.
Ce urmeaza?
Sper că ați scăpat mult din acest articol special. Așa cum am menționat la început, majoritatea acestor informații există deja pe Codex, care ar trebui să fie prima dvs. oprire acum, când ați început cu aventura dvs. de dezvoltare WordPress.
Cand am inceput sa dezvolt cu WordPress acum cativa ani, mi-am dorit ca am avut un ghid ca acesta cu toate informatiile impreuna, asa ca acesta este principalul motiv pentru care am decis sa scriu aceste serii.
În următorul articol voi explica următoarele subiecte:
- Modul corect de a adăuga JavaScript și foi de stil în pluginul dvs.
- Cum se utilizează Ajax în WordPress în mod corect
- Permiteți utilizatorilor să facă schimbări cu cârlige
Nu ezitați să lăsați comentarii sau sugestii pentru cele două articole rămase din aceste serii.