Tips för bästa praxis i WordPress Development

I den här serien kommer vi att täcka de viktigaste sakerna du bör tänka på när du utvecklar ett WordPress-plugin eller ett WordPress-tema. 

Denna guide syftar till att tillhandahålla en uppsättning goda rutiner som kommer att vara till nytta för nybörjare och även för experter som utvecklar som börjar arbeta med WordPress

Men vänta! Om du har utvecklat WordPress-plugins ett tag, ta en titt innan du bestämmer dig för att den här guiden inte är för dig. Jag är säker på att du kommer att få något av det. När allt kommer omkring har vi alla något unikt att erbjuda.

De flesta förklaringarna i denna serie finns redan i Codex, men jag vet att den innehåller så mycket information, det kan vara svårt att veta var du ska börja.

Idag täcker vi följande ämnen:

  1. WordPress-kodningsstandarderna
  2. Undvik funktionsnamnkollisioner
  3. Kodkommentarer
  4. Säkerhetstips

Serien syftar till att vara så tydlig som möjligt och kommer att innehålla både bra och basexemplar för att ge en känsla för hur vissa saker skall jobba när du skriver WordPress-specifik kod.

Observera att inte allt är obligatoriskt för att skriva ett plugin; Men om du bara börjar, när varför inte börja på den högra foten?

Jag kommer att försöka göra dessa serier lätt att läsa. Jag kommer att inkludera några bra och dåliga kodexempel. Inte allt som förklaras här är obligatoriskt att skriva ett plugin, men om du börjar med Wordpress-utveckling, varför inte starta rätt sätt? När det blir en vana blir det svårt att göra fel.

WordPress kodningsstandarder

Personligen är detta en av mina största brister när jag utvecklar plugins. Om du utvecklar verktyg för WordPress, bör du helt enkelt följa WordPress-kodningsstandarderna. Kodningsstandarder hjälper till att förbättra kodens läsbarhetochhjälper till att undvika vanliga kodfel. 

WordPress är ett samarbetande CMS och en så enkel sak som alla skriver kod på samma sätt gör att du läser, skriver och underhåller koden som är lättare för alla. I början kan det vara svårt att ändra kodningsstilen som du brukar arbeta med, men så småningom hittar du det blir andra naturen och din kod kommer att bli renare och mycket lättare att läsa.

I WordPress-handboken är standarderna indelade i de fyra huvudsakliga språk som används

  1. CSS kodningsstandarder
  2. HTML kodningsstandarder
  3. JavaScript kodning standarder
  4. PHP kodningsstandarder

exempel

Nedan kommer jag att visa några enkla exempel på PHP brace style, så du kan få en idé.

Dåliga exempel

om (villkor) action0 ($ var); om (villkor) action1 ();  elseif (villkor2) action2a (); action2b (); 

Bra exempel

om (villkor) action0 ($ var);  om (villkor) action1 ();  elseif (villkor2) action2a (); action2b (); 

Det andra exemplet är mycket lättare att läsa är det inte? Kodningsstandardhandboken är full av exempel som hjälper dig att göra din kod renare. Det är lätt att bli förvånad över hur något så enkelt som några mellanslag och flikar kan förbättra kodläsbarheten.

Samtidigt som jag skrev den här artikeln köpte jag ett tema för en klient och när jag gick för att redigera en kod var jag chockad över hur svårt det var att göra det. 

Här är vad jag menar:

 
>
"title =""> ';?> '; foreach ($ kategorier som $ tag) $ tag_link = get_category_link ($ tag-> term_id); $ titleColor = categorys_title_color ($ tag-> term_id, "category", false); echo ''. $ tag-> name. ''; eko "";?>

Lite läskigt, eller hur? Efter några minuter med att arbeta med den här koden, skickade jag ett mail till författaren med en länk till kodningsstandardboken.

Undvik funktionsnamnkollisioner

Namnkollisioner uppstår när en funktion har samma namn som en funktion som redan har definierats. Till exempel, om i ditt tema har du en funktion som heter get_the_post_terms () och du installerar ett plugin som har en funktion med samma namn får du något som:

Felaktigt fel: Kan inte omklara get_the_post_terms () (tidigare deklarerat i ... 

Tyvärr händer de mycket oftare än de borde. Saken är det är lätt att undvika.

För att undvika detta har vi alternativ:

1. Prefix dina funktioner

Om till exempel ditt plugin namn är "WordPress Cool Plugin", kan du använda en wcc_ prefix i alla dina funktioner. 

Så i exemplet ovan kommer vårt funktionsnamn att vara wcc_get_the_post_terms ()

Jag rekommenderar också dig att prefixa din CSS, eller åtminstone försöka göra det mer unikt för att undvika att ändra andra plugins stilar

2. Omslut dina funktioner i en klass

Kanske är ditt plugin så enkelt att det inte behöver en klass, men du kan fortfarande skapa en för att hålla orden på saker. Jag gillar särskilt att använda singleton mönstret men kolla exemplet nedan för en enkel klass med en statisk metod.

klass Wcc_Mailer static function send ($ post_ID) $ friends = '[email protected]'; mail ($ friends, "New post!", "Kontrollera mitt nya inlägg i". get_permalink ($ post_ID)); returnera $ post_ID;  add_action ('publish_post', array ('Wcc_Mailer', 'send'));

Som du kan se på detta exempel prefixade jag bara mitt klassnamn, men min funktion är enkel kallad "skicka". Detta metodenamn är nu skyddat från det globala namnutrymmet och det kan inte kallas direkt. För att ringa det måste jag göra det här:

Wcc_Mailer :: skicka ($ post_id);

Kommentarskod

Kodens kommentarer är utvecklarens bästa vän. Det kan hända att du inte behöver kommentera varje enskild funktion eller variabel du skapar, men lita på mig, när din kod växer - särskilt när den har fått bidrag från andra - kan det bli svårt att veta exakt vad du ska göra.

Som jag sagt tidigare är WordPress ett samarbetsvilligt CMS. Många utvecklare kommer att titta på din kod och med lite hjälp kommer de att gå på rätt väg.

Jag använder personligen PHPDoc sintax för att kommentera mina funktioner och med Sublime + Docblockr är det verkligen lätt att göra det. 

Låt oss se hur Wordpress killar kommenterar wp_mail () funktionen ligger i wp-includes / pluggable.php

/ ** * Skicka mail, liknar PHP: s mail * * Ett sannt returvärde betyder inte automatiskt att användaren har fått * e-post med framgång. Det innebär bara att den använda metoden kunde * behandla begäran utan några fel. * * Använda de två "wp_mail_from" och "wp_mail_from_name" krokarna tillåta från * skapa en från adress som "Namn "när båda är inställda. Om * bara "wp_mail_from" är inställt, kommer bara e-postadressen att användas utan något namn. * * Standardinnehållstypen är 'text / plain' som inte tillåter att använda HTML. * Du kan dock ställa in innehållstypen för e-postmeddelandet med hjälp av filteret "wp_mail_content_type". * * Standardcharset baseras på den charset som används på bloggen. Charset kan * ställas in med hjälp av filteret "wp_mail_charset". * * @since 1.2.1 * * @uses PHPMailer * * @param string | array $ till Array eller kommaseparerad lista med e-postadresser för att skicka meddelande. * @paramsträng $ subject E-post ämne * @paramsträng $ meddelande Meddelandeinnehåll * @paramsträng | array $ headers Valfritt. Ytterligare rubriker. * @paramsträng | array $ attachments Valfritt. Filer som ska bifogas. * @return bool Om e-postinnehållet skickades framgångsrikt. * / funktion wp_mail ($ till, $ ämne, $ meddelande, $ headers = ", $ attachments = array ()) [...] // Skicka! försök returnera $ phpmailer-> Skicka (); fånga (phpmailerException $ e) return false;

Som du kan se beskriver de vad funktionen gör, vilka parametrar behövs och vad den ska återvända. 

Ganska självförklarande, rätt?

Kommentarer är inte avsedda att användas endast med PHP. I HTML, till exempel, gillar jag att använda i slutet av stora block av kod så jag går inte vilse så lätt.

För CSS använder jag kommentarer för att dela upp min kod i olika avsnitt. 

Till exempel :

/ ********************* ALLMÄNNA STYLES ********************* / body font- familj: Arial; färg: # 333;  / *********************************************** ****************** H1, H2, H3, H4, H5 STYLES ********************** ******************************************** / h1, .h1  fontstorlek: 2.5em; linjehöjd: 1em; font-family: $ vag-bold;  / ********************* NAVIGATIONSTYL ********************* / nav color : röd [...]

Dela dina kommentarer med oss!

Säkerhetstips

Säkerhet måste tas väldigt seriöst! Om du pluggar eller tema blir populärt, lita på mig, du vill inte vara skyldig på tusentals webbplatser hackade. Om du tror att jag överdriver, ta en titt på Checkmarx-undersökningen som gjordes 2013 om de 50 bästa WordPress-pluggarna.

Låt oss nu se några WordPress-utvecklingssäkerhets tips:

XSS Sårbarheter

För att förhindra XSS måste vi göra två saker. Sanitera dataingången och sanera utdata. Vi har flera metoder för sanering beroende på data och det sammanhang det används. I allmänhet behöver du inte lita på någon inmatad data och lita inte på data som kommer att utföras.

För inmatningsdata kan du till exempel använda sanitize_text_field () som kontrollerar för ogiltig UTF-8, Konvertera singel < 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.

Samma händer när du matar ut dina data. Kolla följande exempel på hur du skriver ut en länk:

"> 

esc_url avvisar ogiltiga webbadresser, eliminerar ogiltiga tecken och tar bort farliga tecken

esc_html kodar < > & "'när du matar ut HTML.

Återigen, beroende på vilken data du har, finns det olika funktioner för att hjälpa dig. För JavaScript kan du använda esc_js.

Förutom sanering, kom ihåg att validera ditt datum också.

Förhindra direkt åtkomst till dina filer

De flesta värdar tillåter direkt åtkomst till filer. I ditt plugin betyder det att det förmodligen kommer att uppstå några PHP-fel och att dessa fel är värdefull information för angripare. 

En mycket grundläggande kod för att förhindra detta, som du kan placera ovanpå ditt skript är:

// Avsluta om åtkomst direkt om (! Definierad ('ABSPATH')) utgång 

Detta förhindrar i grunden att utföra manuset om vi inte åtkomst till det via WordPress.

Ta bort all varning och meddelanden

Inte bara PHP-fel hjälper angripare - meddelanden och varningar innehåller också mycket värdefull information. Varje plugin ska kodas med DEBUG-läget. Detta kommer också att bidra till att fånga avkallade funktioner på din plugin. Att möjliggöra RÄTTA TILL läge enkelt sök den här raden på din wp-config.php och ändra den till SANN.

definiera (WP_DEBUG, true);

Tillsammans med detta borde du prova det stora Debug Bar-plugin. Genom att lägga till den här andra enkla raden kommer du också att kunna analysera alla databasfrågor.

definiera ("SAVEQUERIES", true);

Använd Nonce Values

Nonce-värden är korta för nummer som används en gång och används för att skydda mot förfalskningar på flera platser, eller CSRF, att det med andra ord är oväntade eller dubbla förfrågningar som kan orsaka oönskade permanenta eller oåterkalleliga förändringar av webbplatsen och särskilt dess databas. Alla dessa kan utföras av en angripare eller bara av ett enkelt misstag hos en betrodd användare.

Beroende på var du behöver nonce kan du skapa det på olika sätt:

För att använda den på en länk, använd wp_nonce_url ()

$ complete_url = wp_nonce_url ($ bare_url, "skräp-post", "my_nonce");

Använd det på en blankett wp_nonce_field ()

wp_nonce_field ("papperskorgen", "my_nonce");

Använd det på någon annan plats wp_create_nonce ()

wp_localize_script ("my-script", "my-var-name", array ("nonce" => wp_create_nonce ("papperskorgen", "my_nonce"));

Om du kolla mitt exempel ovan kommer du att se hur jag använder wp_localize_script (som jag kommer att prata om på nästa artikel) för att inkludera min nonce i ett JavaScript-kodblock. Jag gör det här eftersom jag planerar att använda jQuery för att göra en AJAX-begäran senare och du bör alltid inkludera nonce på dina AJAX-samtal.

Då, i ditt skript för att helt enkelt verifiera nonce, anger du följande kod

om (! wp_verify_nonce ('trash_post', 'my_nonce')) die ('Busted!'); 

Använd WordPress Funktioner och Bibliotek

Kontrollera alltid om vad du försöker göra är det möjligt att göra det med WordPress-kärnfunktioner och -bibliotek. På så sätt kommer dina skript att vara mindre benägna för sårbarheter och om några visas kommer de att lösas av WordPress-kärnanställda och du behöver inte oroa dig för att kontakta alla dina kunder.

Det mest kända exemplet på detta är med TimThumb-biblioteket, som förrän några år sedan användes av tusentals plugins och teman. En dag, år 2011 avslöjades sårbarheten. Sedan dess kan vi nu använda den inbyggda add_image_size () funktion för detta ändamål. 

Andra vanliga funktioner är inslagna inom WordPress-funktioner som ringla som lätt kan ersättas med wp_remote_get och wp_remote_post Det kommer inte bara att koda data men de kommer också att erbjuda fallbacks, om ringla misslyckas.

Ett annat exempel är användningen av get_template_part () istället för att använda fordra() eller inkludera() PHP-funktioner. Medan de i grund och botten är samma, vet den tidigare redan var ditt tema är beläget och det kommer att leta efter den begärda filen i det tematets katalog. Det kommer inte att utgöra ett varning eller dödligt fel om den begärda filen inte existerar. Det kan söka efter andra lämpliga filer, om den begärda inte hittas och den vet om barnteman och föräldragränser.

WordPress-kärnan innehåller många skript som vi kan använda i våra plugins eller teman. Så ta alltid en titt innan du lägger till nya bibliotek.

Vad kommer härnäst?

Jag hoppas att du fick mycket av den här artikeln. Som jag nämnde i början finns det mesta av den här informationen redan på Codex som borde vara ditt första stopp nu när du började med ditt WordPress-utvecklingsäventyr.

När jag började utveckla med WordPress för några år sedan önskade jag att jag hade en guide som denna med all information tillsammans, så det är huvudorsaken till att jag bestämde mig för att skriva dessa serier. 

I nästa artikel kommer jag att förklara följande ämnen:

  1. Det rätta sättet att lägga till JavaScript och stylesheets i ditt plugin
  2. Hur man använder Ajax i WordPress på rätt sätt
  3. Låt dina användare göra ändringar med krokar

Tveka inte att lämna dina kommentarer eller förslag till de två återstående artiklarna i serien.