I denne serien skal vi dekke de viktigste tingene du bør vurdere når du utvikler en WordPress-plugin eller et WordPress-tema.
Denne veiledningen tar sikte på å gi et sett med gode metoder som vil være nyttig for nybegynnere og også eksperter som utvikler seg som begynner å jobbe med WordPress
Men vent! Hvis du har utviklet WordPress-plugins for en stund, ta en titt før du bestemmer deg for denne veiledningen, er ikke for deg. Jeg er sikker på at du får det noe av det. Tross alt har vi alle noe unikt å tilby.
De fleste forklaringene til denne serien finnes allerede i Codex, men jeg vet at den inneholder så mye informasjon, det kan være vanskelig å vite hvor du skal begynne.
I dag dekker vi følgende emner:
Serien tar sikte på å være så klar som mulig og vil inkludere både gode og basale eksempler for å gi en følelse av hvordan bestemte ting bør arbeid når du skriver WordPress-spesifikk kode.
Merk at ikke alt er obligatorisk for å skrive et plugin; Men hvis du bare begynner, når hvorfor ikke starte på høyre fot?
Jeg vil forsøke å gjøre disse seriene enkle å lese. Jeg vil inkludere noen gode og dårlige kodeeksempler. Ikke alt forklart her er obligatorisk å skrive et plugin, men hvis du begynner med Wordpress-utvikling, hvorfor ikke starte den riktige måten? Når det blir en vane, vil det være vanskelig å gjøre det galt.
Personlig sett er dette en av mine største feil når jeg utvikler plugins. Hvis du utvikler verktøy for WordPress, bør du bare følge WordPress Coding-standardene. Kodningsstandarder bidrar til å forbedre lesbarheten av kodenogbidrar til å unngå vanlige kodingsfeil.
WordPress er et samarbeidende CMS og en så enkel ting som alle skriver kode på samme måte, gjør det enklere for alle å lese, skrive og vedlikeholde koden. I begynnelsen kan det være vanskelig å endre kodestilen som du er vant til å jobbe med, men til slutt finner du det vil bli andre natur og koden din blir renere og mye lettere å lese.
I WordPress-håndboken er standardene delt inn i de fire viktigste brukte språkene
Nedenfor vil jeg vise deg noen enkle PHP brace style eksempler, slik at du kan få en ide.
hvis (tilstand) action0 ($ var); hvis (tilstand) action1 (); elseif (tilstand2) action2a (); action2b ();
hvis (tilstand) action0 ($ var); hvis (tilstand) action1 (); elseif (tilstand2) action2a (); action2b ();
Det andre eksemplet er mye lettere å lese er det ikke? Håndboken for kodingsstandarder er full av eksempler som vil hjelpe deg med å gjøre koden renere. Det er lett å bli overrasket over hvordan noe så enkelt som noen mellomrom og faner kan forbedre kodelesbarheten din.
Mens jeg skrev denne artikkelen, kjøpte jeg et tema for en klient, og da jeg gikk for å redigere noen kode ble jeg sjokkert over hvor vanskelig det var å gjøre det.
Her er hva jeg mener:
>"title =""> ';?> '; foreach ($ kategorier som $ tag) $ tag_link = get_category_link ($ tag-> term_id); $ titleColor = categorys_title_color ($ tag-> term_id, "category", false); ekko ''. $ tag-> navn. ''; ekko "";?>Litt skummelt, ikke sant? Etter noen minutter arbeidet med denne koden, sendte jeg en e-post til forfatteren med en lenke til Kodningsstandardboken.
Unngå funksjonskollisjoner
Navnekollisjoner oppstår når en funksjon har samme navn som en funksjon som allerede er definert. For eksempel, hvis i temaet du har en funksjon kalt
get_the_post_terms ()
og du installerer et plugin som har en funksjon med samme navn, vil du få noe som:Fatal feil: Kan ikke omklare get_the_post_terms () (tidligere erklært i ...Dessverre skjer de langt oftere enn de burde. Saken er, det er lett å unngå.
For å unngå dette har vi muligheter:
1. Prefix Dine Funksjoner
Hvis for eksempel pluginnavnet ditt er "WordPress Cool Plugin", kan du bruke en
wcc_
prefiks i alle dine funksjoner.Så i eksemplet ovenfor vil vårt funksjonsnavn være
wcc_get_the_post_terms ()
Jeg anbefaler deg også å prefikse CSS, eller i det minste prøve å gjøre det mer unikt for å unngå å endre andre pluginstiler
2. pakk dine funksjoner inn i en klasse
Kanskje er pluginet ditt så enkelt at det ikke trenger en klasse, men du kan fortsatt opprette en for å holde orden på organisasjonen. Jeg liker spesielt å bruke singleton mønsteret, men sjekk eksempelet nedenfor for en enkel klasse med en statisk metode.
klasse Wcc_Mailer statisk funksjon send ($ post_ID) $ friends = '[email protected]'; post ($ venner, "Nytt innlegg!", "Sjekk mitt nye innlegg i '. get_permalink ($ post_ID)); returner $ post_ID; add_action ('publish_post', array ('Wcc_Mailer', 'send'));Som du kan se på dette eksemplet, har jeg bare prefikset mitt klassenavn, men min funksjon er enkel kalt "send". Dette metodenavnet er nå beskyttet fra det globale navneområdet, og det kan ikke kalles direkte. For å ringe det må jeg gjøre dette:
Wcc_Mailer :: send ($ post_id);Kommenteringskode
Kodens kommentarer er utviklerens beste venn. Du kan finne unødvendig å kommentere hver eneste funksjon eller variabel du oppretter, men stol på meg når koden din vokser - spesielt ettersom det mottok bidrag fra andre - kan det bli vanskelig å vite nøyaktig hva du skal gjøre.
Også som jeg sa før, er WordPress et samarbeidende CMS. Mange utviklere vil se på koden din og med litt hjelp vil de gå på riktig vei.
Jeg bruker PHPDoc sintax personlig til å kommentere mine funksjoner, og med Sublime + Docblockr er det veldig enkelt å gjøre det.
La oss se hvordan Wordpress-gutta kommenterer
wp_mail ()
funksjonen ligger iwp-includes / pluggable.php
/ ** * Send e-post, ligner på PHPs e-post * * En ekte returverdi betyr ikke automatisk at brukeren mottok * e-posten vellykket. Det betyr bare at metoden som brukes var i stand til å * behandle forespørselen uten feil. * * Bruk av to 'wp_mail_from' og 'wp_mail_from_name' kroker tillater fra * å lage en fra adresse som 'Navn'når begge er satt. Hvis * bare 'wp_mail_from' er satt, vil bare e-postadressen bli brukt uten navn. * * Standard innholdstype er 'text / plain' som ikke tillater bruk av HTML. * Du kan imidlertid angi innholdstypen for e-posten ved å bruke filteret * 'wp_mail_content_type'. * * Standard charset er basert på charsetet som brukes på bloggen. Tegnsettet kan * settes med "wp_mail_charset" -filteret. * * @since 1.2.1 * * @uses PHPMailer * * @param string | array $ til Array eller kommaseparert liste over e-postadresser for å sende melding. * @param string $ subject E-post emne * @param string $ message Meldingsinnhold * @param string | array $ headers Valgfritt. Ytterligere overskrifter. * @param string | array $ attachments Valgfritt. Filer som skal vedlegges. * @return bool Om e-postinnholdet ble sendt vellykket. * / funksjon wp_mail ($ til, $ emne, $ melding, $ headers = ", $ attachments = array ()) [...] // Send! Prøv return $ phpmailer-> Send (); catch (phpmailerException $ e) return false; Som du kan se beskriver de hva funksjonen gjør, hvilke parametere som trengs, og hva det kommer til å returnere.
Ganske selvforklarende, rett?
Kommentarer er ikke ment å bli brukt bare med PHP. I HTML, for eksempel, liker jeg å bruke
på slutten av store blokker med kode så blir jeg ikke så tapt.
For CSS bruker jeg kommentarer til å dele koden i forskjellige seksjoner.
For eksempel :
/ ********************* GENERELLE STYLES ********************* / body font- familie: Arial; farge: # 333; / *********************************************** ****************** H1, H2, H3, H4, H5 STYLES ********************** ******************************************** / h1, .h1 skriftstørrelse: 2.5em; linjehøyde: 1em; font-family: $ vag-bold; / ********************* NAVIGASJONSTILER ********************* / nav color :rød [… ]Del dine kommentert triks med oss!
Sikkerhetstips
Sikkerhet må tas veldig alvorlig! Hvis du plugin eller tema blir populært, stol på meg, du vil ikke være skyldig tusenvis av nettsteder hacket. Hvis du tror jeg overdriver, ta en titt på Checkmarx-undersøkelsen gjort i 2013 om de topp 50 WordPress-pluginene.
La oss nå se noen WordPress-utviklingssikkerhetstips:
XSS Sikkerhetsproblemer
For å forhindre XSS må vi gjøre to ting. Sanitiser datainngang og sanitiser utdataene. Vi har flere metoder for å sanitere avhengig av dataene og konteksten den brukes til. Som regel må du ikke stole på noen data, og ikke stole på data som skal sendes ut.
For inngangsdata kan du for eksempel bruke
sanitize_text_field ()
som sjekker for ugyldig UTF-8, Konverter enkelt < 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.Det samme skjer når du skriver ut dataene dine. Se følgende eksempel på hvordan du lager en kobling:
">
esc_url
avviser ugyldige nettadresser, eliminerer ugyldige tegn og fjerner farlige tegn
esc_html
koder < > & "'når du skriver ut HTML.Igjen, avhengig av dataene du har, er det forskjellige funksjoner for å hjelpe deg. For JavaScript kan du bruke
esc_js
.I tillegg til sanitisering, husk å validere datoen din også.
Forhindre direkte tilgang til filene dine
De fleste vertene tillater direkte tilgang til filer. I din plugin betyr dette at det trolig vil oppstå PHP feil, og disse feilene er verdifull informasjon for angriperne.
En veldig grunnleggende kode for å forhindre dette, som du kan plassere på toppen av skriptet ditt, er:
// Avslutt hvis tilgang til direkte hvis (! Definert ('ABSPATH')) utgang;Dette forhindrer i utgangspunktet å utføre skriptet hvis vi ikke får tilgang til det via WordPress.
Fjern alle advarsler og merknader
Ikke bare PHP-feil hjelper angripere - varsler og advarsler inneholder også mye verdifull informasjon. Hver plugin skal kodes ved hjelp av DEBUG-modus. Dette vil også bidra til å fange utdaterte funksjoner på plugin. For å aktivere
DEBUG
modus enkelt søk denne linjen på dinwp-config.php
og endre den tilEKTE
.definere (WP_DEBUG, true);Sammen med dette bør du prøve det store Debug Bar-pluginet. Ved å legge til denne andre enkle linjen, vil du også kunne analysere alle databasespørsmålene.
define ('SAVEQUERIES', true);Bruk Nonce-verdier
Nonce-verdier er korte for tall som brukes en gang, og brukes til å beskytte mot forfalskninger på stedet, eller CSRF, at det med andre ord er uventede eller dupliserte forespørsler som kan forårsake uønskede permanente eller irreversible endringer på nettstedet og spesielt til dets database. Alle disse kan utføres av en angriper eller bare ved en enkel feil av en klarert bruker.
Avhengig av hvor du trenger nonce kan du opprette den på forskjellige måter:
For å bruke det på en link, bruk
wp_nonce_url ()
$ complete_url = wp_nonce_url ($ bare_url, 'søppelpost', 'my_nonce');For å bruke det på et skjema, bruk
wp_nonce_field ()
wp_nonce_field ('søppelpost', 'my_nonce');For å bruke det på et annet sted, bruk
wp_create_nonce ()
wp_localize_script ('my-script', 'my-var-name', array ('nonce' => wp_create_nonce ('søppelpost', 'my_nonce'));Hvis du sjekker mitt eksempel ovenfor, vil du se hvordan jeg bruker
wp_localize_script
(som jeg vil snakke om det på neste artikkel) for å inkludere min nonce i en JavaScript-kodeblokk. Jeg gjør dette fordi jeg planlegger å bruke jQuery til å gjøre en AJAX-forespørsel senere, og du bør alltid inkludere nonce på AJAX-anropene dine.Deretter skriver du inn følgende kode i skriptet for å bare verifisere nonce
hvis (! wp_verify_nonce ('trash_post', 'my_nonce')) die ('Busted!');Bruk WordPress-funksjoner og biblioteker
Sjekk alltid om hva du prøver å gjøre, er det mulig å gjøre det med WordPress-kjernefunksjoner og biblioteker. På den måten vil skriptene dine være mindre utsatt for sårbarheter, og hvis noen vises, blir de løst av WordPress-kjernebidragene, og du trenger ikke å bekymre deg for å kontakte alle dine kunder.
Det mest kjente eksemplet på dette er med TimThumb-biblioteket som for mange år siden ble brukt av tusenvis av plugins og temaer. En dag, i 2011 ble sårbarheten avslørt. Siden da kan vi nå bruke den innebygde
add_image_size ()
funksjon for dette formålet.Andre vanlige funksjoner er pakket inn i WordPress-funksjoner som
cURL
som lett kan erstattes avwp_remote_get
ogwp_remote_post
Det vil ikke bare kode inn dataene, men de vil også tilby fallbacks, hviscURL
mislykkes.Et annet eksempel vil være bruken av
get_template_part ()
i stedet for å brukekreve ()
ellerinkludere()
PHP-funksjoner. Mens de egentlig er de samme, vet den tidligere allerede hvor temaet ditt er plassert, og det vil se etter den forespurte filen i det aktuelle temaets katalog. Det vil ikke utgjøre en advarsel eller dødelig feil hvis den forespurte filen ikke eksisterer. Det kan Søk etter andre passende filer, hvis den forespurte ikke er funnet, og den vet om barnemner og foreldetemaer.WordPress-kjerne inkluderer mange skript som vi kan bruke i våre plugins eller temaer. Så ta alltid en titt før du legger til nye biblioteker.
Hva blir det neste?
Jeg håper du har fått mye ut av denne artikkelen. Som jeg nevnte i begynnelsen, eksisterer det meste av denne informasjonen allerede på Codex som bør være ditt første stopp nå da du startet med WordPress-utviklingseventyret ditt.
Da jeg begynte å utvikle med WordPress for noen år siden, ønsket jeg at jeg hadde en guide som dette med all informasjon sammen, så det er hovedårsaken til at jeg bestemte meg for å skrive disse serien.
På neste artikkel vil jeg forklare følgende emner:
- Den riktige måten å legge til JavaScript og stilark i pluginet ditt
- Hvordan bruke Ajax i WordPress på riktig måte
- La brukerne gjøre endringer med kroker
Ikke nøl med å legge igjen dine kommentarer eller forslag til de to gjenværende artiklene på disse seriene.