Bättre schemaläggning i WordPress

Om man vill schemalägga uppgifter i Unix/Linux-baserade system så använder man något som heter Cron. På samma sätt har WordPress en egen lösning för schemaläggning, som heter WP-Cron.

WP-Cron ser till att WordPress letar efter uppdateringar, publicerar schemalagda inlägg och utför diverse andra uppgifter (t ex kontrollerar trasiga länkar med Broken Link Checker).

Fördelen med WP-Cron är att det funkar överallt. Det är långt från alla webbhotell och servermiljöer som tillåter schemaläggning av uppgifter hur som helst. Nackdelen är att WP-Cron kör varje gång en sida laddas i WordPress, vilket kan orsaka onödig belastning (läs: ge en långsammare hemsida).

Det är dock enkelt att rätta och förbättra schemaläggningen i WordPress.

– Inaktivera schemaläggning via WP-Cron

Börja med att inaktivera WP-Cron, genom att lägga in följande kodrad i wp-config.php.

define('DISABLE_WP_CRON', true);

– Schemalägg via riktiga cron istället

Om du kör WordPress på en Linux-baserad server (vilket du bör göra) och har åtkomst till servern via SSH, så kan du starta crontab (en redigerare för cron) via terminalen med följande kommando.

crontab -e

När du har valt en redigerare (välj t ex ”nano”), lägg in nedanstående rad längst ner i filen.

0 * * * * cd /hemkatalog-för-min-hemsida; php -q wp-cron.php

– Om din leverantör har stöd för WP-CLI

Om ditt webbhotell/serverleverantör har stöd för WP-CLI (vilket de bör ha) så är det bättre att köra cron via WP-CLI. Lägg då in denna rad i crontab istället:

0 * * * * wp cron event run --due-now --path=/hemkatalog-för-min-hemsida/ --quiet

Ersätt ”/hemkatalog-för-min-hemsida” med den fullständiga sökvägen till hemkatalogen för din hemsida, t ex /var/www/minhemsida.se (från roten). Spara och stäng till sist filen.

Därefter kör WP-Cron en gång varje heltimme, via PHP direkt på servern. Det går att köra WP-Cron med anrop mot webbplatsen t ex via wget, men då påverkas webbservern/besökare i onödan.

Att schemalägga uppgifter via cron är även möjligt att få till via kontrollpanelen hos vissa webbhotell. Om du inte känner dig bekväm med SSH/terminal, använd det istället.

Ett litet, men naggande gott, fel i PHP

Sprang på ett lagom irriterande fel i ett WordPress-tillägg under helgen som gick. Med felmeddelandet ”Cannot modify header information – headers already sent” som enligt bl a WordPress Codex, FAQ Troubleshooting betyder att det finns tecken före/efter php-taggarna.

Öppnade den berörda filen med ett flertal olika textredigerare, men lyckades inte hitta dessa tecken. Körde till slut följande kommando i en terminal:

less filnamn.php

Och såg då att filen inleddes med ”<U+FEFF>”. Vilket innebar att filen teckenkodades med UTF-8 BOM istället för enbart UTF-8. Försökte lösa det genom att skapa en ny fil, med samma innehåll, men felet kvarstod. Googlade då lite och hittade denna lösning (via en terminal):

sed -i '1s/^\xEF\xBB\xBF//' filnamn.php

Laddade upp filen, laddade om WordPress och vips så var felet borta.

Bästa sättet att skicka e-post via WordPress

Bättre e-post med WordPressAtt skicka e-post via WordPress är inte alltid så enkelt.

E-post som hanteras via WordPress, såsom användarregistreringar och kontaktformulär, skickas som standard via en e-postfunktion i PHP (PHPMailer) på den webbserver som hanterar webbplatsen ifråga.

Detta är, i min mening, ett direkt felaktigt beteende.

E-post är en av de mest komplexa tjänster som finns på Internet. Inte för att det är svårt att hantera en e-postserver nuförtiden (som när jag satte upp Sendmail på Loopia en gång i tiden), utan för att det finns så många olika spamfällor.

Mer än hälften av all e-post är skräppost (spam). Därför motverkas spam med SPF, svartlistor, innehåll/beteendeanalyser, SMTP-portblockeringar och mycket mer. Att fastna i ett spamfilter, även med legitim e-post, är väldigt enkelt.

För störst chans att skicka e-post framgångsrikt bör man använda en renodlad e-postserver. En korrekt uppsatt e-postserver underhålls och hanteras oftast så att spamfilter inte biter på den. Detsamma går inte att säga om webbservrar, som ofta spamklassas och saknar rutiner för felhantering av e-post.

– Hur rättar man då denna (felaktiga) hantering av e-post i WordPress?

Jo, med ett WordPress-tillägg. Det tillägg som jag använder (och har översatt till svenska) heter WP Mail SMTP. Det är det mest populära tillägget för e-posthantering i WordPress, med över 700 000 aktiva installationer.

WP Mail SMTP installeras/aktiveras enkelt via wp-admin. Inställningarna för tillägget hanteras därefter under ”Inställningar” och ”WP Mail SMTP”. Så här ser mina inställningar för WP Mail SMTP ut:

Inställningar för WP Mail SMTP

Alternativet ”Övrig SMTP” är det som de flesta bör välja, med undantag för Google-användare. SSL/TLS är ett måste, annars skickar man sitt lösenord i klartext över nätet. Övriga uppgifter är nog rätt så självförklarande (och något man får från sin e-postleverantör).

Det som främst är värt att notera här är hur lösenordet hanteras. Istället för att ange/spara det i wp-admin så är det inlagt i wp-config.php (WordPress’ konfigurationsfil) med följande två rader:

define( 'WPMS_ON', true );
define( 'WPMS_SMTP_PASS', 'mitthemligalösenord' );

När man har lagt in sina uppgifter under inställningarna så bör man även testa e-postfunktionen under fliken ”Test av e-post”. Om man senare upplever problem med e-posten så kan man här enkelt testa om det beror på e-postservern eller WordPress.

Håller du med eller är du av annan åsikt än mig? Lämna gärna en kommentar nedan!

4 år som webbmaster för Saabklubben

Som några av er kanske vet så är jag en glad Saabentusiast. Jag är även en entusiastisk användare av WordPress. Så hur går det när man kombinerar dessa två saker? Här är min berättelse om hur jag arbetade ideellt som webbmaster för Saabklubben i nästan 4 års tid.

TLDR; Saabklubben har under min tid som webbmaster gått från en splittrad IT-miljö till en centraliserad och optimerad servermiljö med ett WordPress-nätverk bestående av 18K+ användare, 200K+ inlägg, 3 500 medlemmar m.m. Detta möjliggör vidare automatisering till nytta för Saabklubbens medlemmar och Saabentusiaster över hela världen.

För snart fyra år sedan fick jag förtroendet att bli webbmaster för Svenska Saabklubben. Jag var då en nybliven medlem i Saabklubben, jag hade inte ens haft mitt körkort i ett halvår och det var nog rätt mycket på chans som dåvarande ordförande skickade mig en fråga om det över Facebook (där vi precis hade blivit vänner).

Jag accepterade att bli webbmaster då jag såg det som en möjlighet att utveckla mina praktiska kunskaper inom server- och hemsidehantering. Bara för att man arbetar på ett webbhotell så innebär det inte att man automatiskt har koll på allt inom webbhantering. Det är väldigt enkelt att fastna i gamla vanor, att bli ifrånsprungen av hungrigare förmågor.

När jag tillträdde som webbmaster så var Saabklubbens IT-verksamhet splittrad. Medlemmarna hade fyra olika inloggningar, det fanns en fysisk server som fungerade sådär, domännamn hade förlorats och e-posten fungerade inte alls. Tidigare webbmaster ska inte klandras, tvärtom, men det var ingen enkel uppgift att få ihop allt.

E-posten styrdes omgående upp med Google Apps. För att minimera kostnaderna användes främst grupper med vidarebefordring till externa konton. Via branschkontakter lyckades jag återställa ett tidigare förlorat domännamn. Under årens lopp har jag successivt styrt om intern (och extern) trafik till saabklubben.se.

Dåvarande hemsida baserades på en gammal version av Drupal, så jag flyttade över den till WordPress på ett webbhotellskonto. Hemsidan optimerades ingående, vilket gav upphov till ett flertal optimeringsguider hos FS Data. Jag uppdaterade även den fysiska servern i den mån det var möjligt, men insåg rätt snart att IT-tjänsterna behövde flyttas.

Saabklubben hade vid den tiden ett ”nytt” forum baserat på phpBB och ett gammalt (inaktivt) forum baserat på UBB Threads. Ett byte av forum hade tidigare skett utan migrering av data, så jag kombinerade dessa två forum till ett (flyttade 25K+ ämnen med 150K+ inlägg). Kort därpå inkluderades även ett annat externt forum (900klubben) med ytterligare några tusen användare, ämnen och och inlägg.

Samtliga forumflyttar planerades och testades ingående för att bevara användare, inlägg, bilder, direktmeddelanden osv. Trots brist på färdiga flyttverktyg (script), samt att jag inte är någon utvecklare, så gick flyttarna ändå bra. Nedtiden var minimal och moderatorerna i forumet bistod tacksamt vid flytt av några tusen ämnen (när det inte gick att lösa automatiskt).

Runt denna tid började givetvis Saabklubbens fysiska server att rasa samman. Med hjälp av tidigare webbmaster, som hade satt upp den gamla servern, kom jag över nödvändig data och flyttade forum, medlemsregister m.m. till webbhotellskontot med hemsidan. Det visade sig dock rätt så snabbt att webbhotellet inte var tillräckligt för forumet.

Jag satte då upp en virtuell server för Saabklubben hos DigitalOcean, med ServerPilot. DigitalOcean valdes som leverantör av kostnads- och prestandaskäl, samt för att Saabklubben inte skulle vara beroende av mig och min arbetsgivare. Denna serverlösning är skalbar och fullt ut automatiserad avseende säkerhets- och funktionsuppdateringar.

Faktum är att samtliga IT-tjänster för Saabklubben, som jag satte upp under min tid som webbmaster, är personoberoende. Det är något som jag har lagt en väldigt stor vikt vid redan från första början.

Åter till forumet, där phpBB hade sina för- och nackdelar. Målsättningen med Saabklubbens IT-verksamhet var att samla användarhanteringen och efter flera (misslyckade) försök till att integrera phpBB i WordPress insåg jag att en flytt till bbPress var nödvändig. Så i början av 2015 flyttades 6K+ användare med 200K+ inlägg från phpBB till bbPress i Saabklubbens WordPress-nätverk.

Med hemsida och forum på plats i WordPress inledde jag arbetet med att flytta Saabklubbens medlemsregister till samma plattform. Dåvarande medlemsregistret var egenutvecklat och höll på att rasa samman. Samtidigt var belastningen hög i Saabklubbens reservdelsverksamhet. Jag satte därför ihop en plan för att automatisera hanteringen av medlemmar och reservdelshantering (beställningar, fakturor osv.).

Efter att ha inventerat hela marknaden för medlemsregister och e-handelslösningar till WordPress så tog jag ut ett par veckor semester i början av 2016 och konverterade samt flyttade över det gamla medlemsregistret till en ny lösning baserad på WooCommerce, WooCommerce Subscriptions och WooCommerce Memberships i Saabklubbens WordPress-nätverk.

Även här vidtogs åtgärder för att samla användarna. Medlemmar kopplades samman med (motsvarande) forumanvändare, där ett aktivt medlemskap möjliggjorde åtkomst till medlemsmaterial på hemsidan (rabattkoder, tidigare nummer av medlemstidningen osv.). Många medlemmar saknade en e-postadress, så en rutin för att rätta detta upprättades i medlemstidningen (där 100-150 e-postadresser rättades manuellt efter varje nummer).

Att flytta medlemmarna till det nya registret gick att automatisera, men att aktivera medlemskapet för enskilda medlemmar var en manuell process. Jag fick därför underlag på betalningar av medlemsavgifter från medlemsansvarig i Saabklubben och satt många långa kvällar och nätter med att aktivera alla medlemskap. Närmare 3 500 medlemskap aktiverades på detta sätt.

Som om jag inte hade nog att göra så fick Saabklubben en förfrågan om att överta SaabsUnited.com (den största bloggen/nyhetssidan om Saab i världen). Den webbplatsen baserades lyckligtvis på WordPress, så jag flyttade rätt så enkelt över den (med 10K användare, 6K inlägg & 66K kommentarer) till vårt WordPress-nätverk.

Det var några år sedan SaabsUnited.com var ordentligt aktivt, så jag fick rensa ut ca 4K spamanvändare, implementera ett nytt tema, upprätta en rutin för användarbidrag och mycket annat. SaabsUnited.com har närmare 1 000 besökare/dag när inlägg publiceras där. Denna webbplats kan bli något väldigt bra för Saabentusiaster över hela världen.

Åter till det nya medlemsregistret, som i slutet av 2016 öppnades för registrering av nya medlemmar via hemsidan. Två olika betalningslösningar implementerades, baserat på interna önskemål/specifikationer, varav en med koppling till befintligt ekonomisystem. Jag satte även upp en separat server/testmiljö, där 11K+ reservdelar framgångsrikt importerades till WooCommerce.

Sedermera tog dock styrelsen för Saabklubben ett beslut om att stänga det nya medlemsregistret. Detta för att kunna hantera betalningarna av medlemskap enligt samma upplägg som tidigare år. En del redovisnings- och bokföringsmässiga frågetecken behövde även redas ut. Den tekniska lösningen för det nya registret kvarstår, om än att det nu är inaktiverat.

Jag respekterar givetvis styrelsen och dess beslut här.

Om/när Saabklubben återupptar arbetet med det nya registret så kvarstår den klart bästa tekniska lösningen för detta. Saabklubben kommer kunna spara stora mängder tid och pengar, som kan läggas på utveckling (och marknadsföring) av nya reservdelar samt utökning av medlemsbasen.

Om Saab som bilmärke ska kunna leva vidare så är detta den enda rätta vägen framåt.

Utöver det som redovisas ovan så har jag gjort mycket annat för Saabklubben, både inom och utanför IT-verksamheten. Den nuvarande styrelsen kom till på initiativ av mig, efter (ett allmänt) missnöje med föregående styrelse. Jag har varit runt i Sverige och träffat medlemmar och lokalsektioner, från Skåne till Norrland. Att en lokalsektion upprättades i Stockholm 2016 var jag även starkt bidragande till.

Nu vill jag absolut inte slå mig på bröstet eller ta all ära här. Saabklubben har funnits i över 40 år. Jag har enbart varit engagerad i 4 år. Det har varit ett nöje och ett privilegium att få vara en många eldsjälar som bidragit till Saabklubben sedan 1976.

Saabklubben har även gett mig möjlighet att testa många nya tekniska tjänster och funktioner. Årsmötet 2016 videosändes till våra medlemmar (tack Solidtango!), vi la upp videofilmer med VideoPress, körde backup via VaultPress, säkerställde webbplatser med Let’s Encrypt och mycket mer.

Saabklubben har idag ett av Sveriges största och snabbaste WordPress-nätverk, med 18K+ användare och 200K+ inlägg. Nätverket snurrar stabilt och säkert med en kombination av Nginx, PHP-FPM, MariaDB, Redis, Cloudflare m.m. Det är jag lite stolt över ändå.

Avslutningsvis, en av de bästa uppgifter som jag haft som webbmaster är användarsupporten. Som webbmaster har medlemmar ringt och skickat e-post till mig i olika ärenden. Att t ex få e-post med en fråga om hur man loggar in på hemsidan, där medlemmen även bifogat bilder på sina olika Saabar, har varit otroligt roligt.

Att jag fick möjlighet att skriva avslutningsorden i Saabklubbens 40-års jubileumsbok, som gavs ut till alla medlemmar förra året, var likaså en höjdpunkt. För det är jag väldigt tacksam.

Förra veckan valde jag att avsluta mitt ideella engagemang i Saabklubben, både vad gäller rollen som webbmaster och styrelsemedlem. Jag behöver helt enkelt fokusera på mig själv, min familj och mitt framtida arbete.

I sommar hoppas jag få träffa många Saabentusiaster ute på vägarna!

WPKafé, Så väljer du rätt webbhotell

I måndags höll jag en kortare föreläsning på WPKafé i Stockholm. Denna gång var ämnet hur man väljer rätt webbhotell som nybörjare. Det var faktiskt första gången, på 3 säsonger, som jag pratade webbhotell på WPKafé. En synnerligen neutral föreläsning dessutom.

Klicka på bilden nedan för att ladda ner presentationen som en PDF (0,3 MB):

Så väljer du rätt webbhotell

Undrar du vad som följde efter ”En sak till…”? Det var detta: WordPress säkert & snabbt med 1 klick