Din innehållsrapport är bara så bra som din senaste export. Och ärligt talat: exporter glöms bort, skrivs över eller blir tyst inaktuella medan alla fortsätter fatta beslut utifrån dem.
Det här problemet med WordPress Sheets sync slår först mot marknadschefer, men innehållsstrateger och byråägare känner av det också. Du vill ha ett kalkylark som alltid speglar det som är live på sajten, utan att jaga kollegor efter ”senaste versionen”.
Det här arbetsflödet kopplar WordPress till Google Sheets och håller inlägg, kategorier, taggar och media uppdaterade automatiskt. Du får se hur det fungerar, vad du behöver och vilka resultat du kan förvänta dig.
Så fungerar automatiseringen
Här är hela arbetsflödet du kommer att sätta upp:
n8n Workflow Template: WordPress till Google Sheets – korrekta innehållsrapporter
flowchart LR
subgraph sg0["Scheduled Run Flow"]
direction LR
n0@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Page Limit Check", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Init Page Variables", pos: "b", h: 48 }
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Advance Page Counter"]
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Fetch WP Articles"]
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Expand Post Items", pos: "b", h: 48 }
n5@{ icon: "mdi:play-circle", form: "rounded", label: "Scheduled Run Trigger", pos: "b", h: 48 }
n6["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Retrieve WP Categories"]
n7@{ icon: "mdi:database", form: "rounded", label: "Sync Category Sheet", pos: "b", h: 48 }
n8@{ icon: "mdi:database", form: "rounded", label: "Sync Posts Sheet", pos: "b", h: 48 }
n9["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Fetch Media Library"]
n10@{ icon: "mdi:swap-vertical", form: "rounded", label: "Expand Media Items", pos: "b", h: 48 }
n11@{ icon: "mdi:database", form: "rounded", label: "Sync Media Sheet", pos: "b", h: 48 }
n12@{ icon: "mdi:swap-vertical", form: "rounded", label: "Init Media Variables", pos: "b", h: 48 }
n13["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Advance Media Counter"]
n14@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Media Page Check", pos: "b", h: 48 }
n15["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Fetch WP Tags"]
n16@{ icon: "mdi:swap-vertical", form: "rounded", label: "Expand Tag Items", pos: "b", h: 48 }
n17@{ icon: "mdi:database", form: "rounded", label: "Sync Tag Sheet", pos: "b", h: 48 }
n18["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Incoming Webhook Trigger"]
n0 --> n6
n0 --> n12
n0 --> n15
n0 --> n2
n14 --> n13
n18 --> n1
n9 --> n10
n3 --> n4
n2 --> n3
n4 --> n8
n1 --> n2
n13 --> n9
n10 --> n11
n16 --> n17
n12 --> n13
n15 --> n16
n11 --> n14
n8 --> n0
n6 --> n7
n5 --> n1
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n5 trigger
class n0,n14 decision
class n7,n8,n11,n17 database
class n3,n6,n9,n15,n18 api
class n2,n13 code
classDef customIcon fill:none,stroke:none
class n2,n3,n6,n9,n13,n15,n18 customIcon
Varför det här spelar roll: innehållsrapportering som folk faktiskt litar på
Innehållsrapportering går sönder på tråkiga sätt. Någon exporterar inlägg från WordPress, klistrar in dem i ett ark och kallar det en dashboard. En vecka senare har kategorier ändrats, taggar har strukturerats om och fem nya inlägg har publicerats. Nu är din ”innehållsinventering” tyst fel. Det är då du slösar timmar på att diskutera siffror, dubbelkolla URL:er och bygga om rapporter du redan byggt en gång. Den verkliga kostnaden är inte själva exporten. Det är allt tvivel, all omkontroll och de missade möjligheterna när du inte kan se vad som faktiskt händer på sajten.
Det växer snabbt. Här är var det brukar falla isär i det dagliga arbetet.
- Team tappar cirka 1–2 timmar i veckan på att exportera om och rensa listor med inlägg och metadata.
- Ändringar i kategorier och taggar kommer inte med i rapporteringen, så SEO-revisioner bygger på felaktiga antaganden.
- Mediespårning saknas ofta helt, vilket gör det svårt att hitta gamla tillgångar eller trasiga länkar.
- Olika personer har sina egna kalkylark, och ingen vet vilket som är ”källan till sanningen”.
Det du bygger: en live WordPress-innehållsdatabas i Google Sheets
Du sätter upp ett n8n-arbetsflöde som hämtar innehåll direkt från WordPress REST API och skriver in det i ett strukturerat Google Sheet. Det kan köras på schema (till exempel varje natt) eller starta direkt via en webhook när du behöver en färsk ögonblicksbild inför ett möte. Arbetsflödet hämtar inlägg sidvis, expanderar resultaten till enskilda rader och uppdaterar din flik ”Inlägg”. Sedan gör det samma för kategorier och taggar, så att din taxonomirapportering förblir korrekt. Slutligen synkar det ditt mediebibliotek till en flik ”Media”, vilket är förvånansvärt användbart när du rensar gamla tillgångar eller bygger en plan för innehållsuppdatering.
Arbetsflödet startar med en schemalagd trigger eller en inkommande webhook. Därifrån loopar det igenom WordPress-endpoints med pagineringslogik och uppdaterar Google Sheets under tiden. När det är klart har du ett ark som matchar det som finns i WordPress just nu, inte det som stämde förra månaden.
Det du bygger
| Vad som automatiseras | Vad du uppnår |
|---|---|
|
|
Förväntade resultat
Säg att din sajt publicerar 20 inlägg i månaden och du kör en veckovis innehållsrapport. Manuellt kanske du exporterar inlägg, kategorier och taggar, sedan rensar och klistrar in allt, vilket lätt tar runt 45 minuter varje gång (och längre när någon har ändrat kategorier). Det blir cirka 3 timmar i månaden, plus det sporadiska ”vänta, varför saknas det här?”-felsökandet. Med det här arbetsflödet är din veckouppdatering i princip noll ansträngning: låt schemat köra över natten, eller trigga webhooken och vänta några minuter på att synken ska bli klar.
Innan du börjar
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för self-hosting om du föredrar det (Hostinger fungerar bra)
- WordPress-sajt med åtkomligt REST API
- Google Sheets för att lagra flikarna Inlägg, Kategorier, Taggar, Media
- WordPress Application Password (skapa det i WP Användare → Profil)
Kunskapsnivå: Nybörjare. Du kopplar konton, klistrar in din sajt-URL och bekräftar att dina flikar i arket matchar arbetsflödet.
Vill du att någon bygger detta åt dig? Prata med en automationsexpert (gratis 15-minuters konsultation).
Steg för steg
Välj hur det startar (schema eller på beställning). Arbetsflödet kan köras via en Scheduled Trigger (till exempel varje natt) eller via en Incoming Webhook Trigger när du vill uppdatera direkt.
Initiera paginering så att du inte missar något. Det sätter sidvariabler, använder sedan en räknare och kontroller för ”sidgräns” för att loopa igenom WordPress-resultaten tills allt är hämtat.
Hämta inlägg och skriv sedan korrekt formaterade rader till Sheets. n8n anropar WordPress-endpointen för inlägg med en HTTP Request, delar upp listan i enskilda inlägg och synkar dem till din flik ”Inlägg” i Google Sheets.
Upprepa samma mönster för kategorier, taggar och media. Kategorier och taggar hämtas och synkas till sina egna flikar, medan media kör sin egen pagineringsloop så att även större bibliotek blir klara på ett tillförlitligt sätt.
Du kan enkelt justera per-sida-gränsen och kolumnerna i arket så att det matchar din rapporteringsstil. Se den fullständiga implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: konfigurera typ av trigger
Det här arbetsflödet kan starta enligt ett schema eller via en webhook för att initiera sidindelningsvariabler för synkning av WordPress-data.
- Öppna Scheduled Run Trigger och ställ in schemaregeln så att den körs var
3:e dag med den befintliga intervallkonfigurationen. - Öppna Incoming Webhook Trigger och bekräfta att Path är
4c34beca-b5d7-48bd-bd11-f24f760c039dför manuell eller extern trigging. - Koppla båda triggrarna till Init Page Variables så att antingen trigger initierar sidindelningsläget.
Steg 2: anslut WordPress (HTTP Basic Auth)
HTTP-förfrågningar hämtar inlägg, kategorier, taggar och media från WordPress. Varje förfrågan använder HTTP Basic Authentication.
- I Fetch WP Articles ställer ni in URL till
{{$json.base_url}}och aktiverar Send Query. - Ställ in frågeparametrar i Fetch WP Articles till:
per_page={{$json.per_page}},page={{ $json.current_page }},_embed=wp:featuredmedia,wp:term,_fields={{$json.fields}},orderby=date,order=desc. - Inloggningsuppgifter krävs: Anslut era httpBasicAuth-uppgifter i Fetch WP Articles.
- I Retrieve WP Categories ställer ni in URL till
https://ozwebexpert.com/wp-json/wp/v2/categoriesoch låter Execute Once vara aktiverat. - Inloggningsuppgifter krävs: Anslut era httpBasicAuth-uppgifter i Retrieve WP Categories, Fetch Media Library och Fetch WP Tags.
- I Fetch WP Tags bekräftar ni att URL är
https://ozwebexpert.com/wp-json/wp/v2/tagsmed frågeparametrarnaper_page=100och_fields=id,name,slug.
Steg 3: sätt upp sidindelning och logik för synkning av inlägg
Det här avsnittet initierar sidindelningsvariabler, hämtar inlägg sida för sida och fortsätter iterera tills alla sidor har bearbetats.
- I Init Page Variables ställer ni in JSON Output till
{ "base_url": "https://ozwebexpert.com/wp-json/wp/v2/posts", "fields": "id,slug,link,date,title,excerpt,categories,tags,featured_media,_embedded", "per_page": 10, "current_page": 0 }. - Behåll koden i Advance Page Counter som den är för att öka
current_pagei varje loop. - Koppla Advance Page Counter till Fetch WP Articles så att varje ökning hämtar en ny sida med inlägg.
- I Expand Post Items ställer ni in Field to Split Out till
bodyoch Include tillallOtherFields. - I Page Limit Check behåller ni villkoret som jämför
{{ $('Advance Page Counter').item.json.current_page }}med{{ $('Fetch WP Articles').item.json.headers['x-wp-totalpages'] }}för att stoppa loopen på sista sidan.
Page Limit Check skickar utdata till både Retrieve WP Categories, Init Media Variables och Fetch WP Tags parallellt.
Steg 4: konfigurera grenar för synkning av media och taggar
Två ytterligare grenar hämtar media- och taggdata och itererar genom deras sidor oberoende av varandra.
- I Init Media Variables ställer ni in JSON Output till
{ "base_url": "https://ozwebexpert.com/wp-json/wp/v2/media", "per_page": 10, "current_page": 0 }. - Behåll koden i Advance Media Counter för att öka
current_pageför mediesidindelning. - I Fetch Media Library ställer ni in URL till
{{$json.base_url}}med frågeparametrarnaper_page={{ $json.per_page }},page={{ $json.current_page }}ochparent_exclude=0. - I Expand Media Items ställer ni in Field to Split Out till
body. - Behåll villkoret i Media Page Check som jämför
{{ $('Advance Media Counter').item.json.current_page }}med{{ $('Fetch Media Library').item.json.headers['x-wp-totalpages'] }}för loopstyrning. - I Expand Tag Items ställer ni in Field to Split Out till
bodyför att packa upp taggresultat från Fetch WP Tags.
Steg 5: konfigurera utdata-noder för Google Sheets
Varje dataset läggs till eller uppdateras i sitt eget ark med matchande ID:n.
- I Sync Posts Sheet låter ni Operation vara satt till
appendOrUpdate, Document ID tillhttps://docs.google.com/[YOUR_ID]och Sheet Name tillPosts. - Mappa kolumner i Sync Posts Sheet till inläggsfälten, till exempel
id={{ $json.body.id }},title={{ $json.body.title.rendered }}ochcategories={{ $json.body.categories[0] }}. - I Sync Category Sheet låter ni Operation vara satt till
appendOrUpdate, Sheet Name tillCategories, och matchar påcategory_id. - I Sync Media Sheet låter ni Operation vara satt till
appendOrUpdate, Sheet Name tillMedia, och mappar värden somurl={{ $json.source_url }}ochmedia_id={{ $json.id }}. - I Sync Tag Sheet låter ni Operation vara satt till
appendOrUpdate, Sheet Name tillTags, och matchar påtag_id. - Inloggningsuppgifter krävs: Anslut era googleSheetsOAuth2Api-uppgifter i Sync Posts Sheet, Sync Category Sheet, Sync Media Sheet och Sync Tag Sheet.
⚠️ Vanlig fallgrop: Säkerställ att varje Google-ark har exakt de kolumnrubriker som definieras i nodmappningarna (t.ex. id, category_id, tag_id, media_id) annars kommer lägg till/uppdatera inte att matcha korrekt.
Steg 6: testa och aktivera ert arbetsflöde
Validera att varje gren körs och skriver data till era Google Sheets innan ni aktiverar schemat.
- Klicka på Execute Workflow för att testa med Scheduled Run Trigger eller skicka en förfrågan till URL:en för Incoming Webhook Trigger.
- Bekräfta att Sync Posts Sheet, Sync Category Sheet, Sync Media Sheet och Sync Tag Sheet var och en lägger till eller uppdaterar rader i ert målark.
- Verifiera att Page Limit Check och Media Page Check stoppar loopningen efter sista sidan baserat på svarshuvudena.
- När allt är verifierat växlar ni arbetsflödet till Active för att aktivera schemalagda körningar i produktion.
Tips för felsökning
- WordPress-uppgifter för HTTP Basic Auth kan löpa ut eller sakna åtkomst. Om anropen börjar misslyckas, kontrollera först ditt WordPress Application Password och behörigheter för användarrollen.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om nedströmsnoder misslyckas på tomma svar.
- Google Sheets OAuth2 kan tappa åtkomst i det tysta efter lösenords- eller adminändringar. Återanslut Google-kontot i n8n-credentials och välj sedan kalkylarks-ID igen i varje Sheets-nod.
Snabba svar
Cirka 30 minuter om dina WordPress- och Google-konton är redo.
Nej. Du kopplar inloggningsuppgifter, uppdaterar några URL:er och klistrar in ditt kalkylarks-ID.
Ja. n8n har ett gratis self-hosted-alternativ och en gratis provperiod på n8n Cloud. Cloud-planer börjar på 20 USD/månad för högre volym. Du behöver också räkna in eventuell hostingkostnad om du self-hostar, plus normala kostnader för Google-/WordPress-konton.
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller self-hosting på en VPS. För self-hosting är Hostinger VPS prisvärd och klarar n8n bra. Self-hosting ger obegränsade körningar men kräver grundläggande serverhantering.
Ja, och det bör du. De flesta börjar med att ändra WordPress-endpoint-URL:en i HTTP Request-noderna (till exempel för att inkludera anpassade posttyper) och justera per_page-inställningen för att snabba upp stora synkar. Du kan också byta ut Scheduled Trigger mot webhook-only-körningar, beroende på hur du rapporterar. Till sist uppdaterar du Google Sheets-noderna för att mappa extra fält du bryr dig om, som författare, slug eller senast ändrad-datum.
Oftast beror det på ett felaktigt Application Password eller fel bas-URL för REST API. Generera ett nytt Application Password i WordPress, uppdatera HTTP Basic Auth-credential i n8n och dubbelkolla att du anropar /wp-json/wp/v2/ på rätt domän. Om det fungerar i en webbläsare men inte i n8n är behörigheter nästa misstänkta. Rate limits kan också dyka upp om du kör synken för ofta på en stor sajt.
För de flesta små till medelstora sajter kan det utan problem synka tusentals inlägg och mediaobjekt per körning, eftersom det paginerar resultaten och fortsätter loopa tills det är klart.
Ofta, ja. Det här arbetsflödet kräver paginering, loopar och skrivning till flera flikar (inlägg, taggar, kategorier, media), och n8n hanterar det utan att det blir en hög av separata zaps/scenarios. Self-hosting är också viktigt om du förväntar dig frekventa synkar. Samtidigt: om du bara behöver ett enkelt upplägg ”nytt inlägg → lägg till en rad” kan Zapier eller Make gå snabbare att klicka ihop. Prata med en automationsexpert om du vill ha hjälp att välja det mest renodlade alternativet för din rapporteringsstack.
När detta väl rullar håller sig ditt innehållsark uppdaterat utan att du behöver passa det. Arbetsflödet sköter den repetitiva synkningen så att du kan fokusera på beslut, inte exporter.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.