Exporter les données d'articles WordPress vers Google Sheets (basé sur l'API WP Rest)
Ceci est unMarket Researchworkflow d'automatisation du domainecontenant 15 nœuds.Utilise principalement des nœuds comme Set, Code, Form, Merge, FormTrigger. Exporter les articles WordPress (avec catégories et étiquettes) vers Google Sheets pour un audit SEO
- •Peut nécessiter les informations d'identification d'authentification de l'API cible
- •Informations d'identification Google Sheets API
Nœuds utilisés (15)
Catégorie
{
"id": "XnO085uXrhMERPvb",
"meta": {
"instanceId": "2295c029f4cb86c8f849f9c87dade323734dc279619eb9e2704f8473c381e4d1",
"templateCredsSetupCompleted": true
},
"name": "WordPress post data export to Google Sheets (based on WP Rest API)",
"tags": [],
"nodes": [
{
"id": "bfc25242-766f-4b7d-ab23-a0829de1fe83",
"name": "À la soumission du formulaire",
"type": "n8n-nodes-base.formTrigger",
"position": [
-1120,
-320
],
"webhookId": "57b1b81e-feae-464e-9459-04b0e3efcaa1",
"parameters": {
"options": {},
"formTitle": "WP SEO Audit",
"formFields": {
"values": [
{
"fieldLabel": "URL",
"placeholder": "http://yourdomain.com",
"requiredField": true
},
{
"fieldType": "number",
"fieldLabel": "Post limit",
"placeholder": "Default =10"
}
]
}
},
"typeVersion": 2.3
},
{
"id": "3a5f6f97-c79a-4fed-b32a-fe7695e569f1",
"name": "Obtenir les articles",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueErrorOutput",
"position": [
-400,
-128
],
"parameters": {
"url": "={{ $json.URL }}/wp-json/wp/v2/posts?per_page={{ $json['Post limit'] }}",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "2201ba9e-40b8-4bcc-988c-e8dce2578dda",
"name": "Obtenir les catégories",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueErrorOutput",
"position": [
-400,
-320
],
"parameters": {
"url": "={{ $('On form submission').item.json.URL }}/wp-json/wp/v2/categories?per_page={{ $json.per_page }}",
"options": {},
"sendBody": true,
"bodyParameters": {
"parameters": [
{}
]
}
},
"typeVersion": 4.2
},
{
"id": "f6c0f099-2c27-45df-91b3-0fd1ea15d165",
"name": "Obtenir les étiquettes",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueErrorOutput",
"position": [
-400,
-512
],
"parameters": {
"url": "={{ $('On form submission').item.json.URL }}/wp-json/wp/v2/tags?per_page={{ $json.per_page }}",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "6a924b56-3613-4b7f-a7c8-819bbe38387b",
"name": "Fusionner",
"type": "n8n-nodes-base.merge",
"position": [
16,
-352
],
"parameters": {
"numberInputs": 3
},
"notesInFlow": false,
"typeVersion": 3.2
},
{
"id": "bc6731ac-f1aa-4594-a1a6-98275d976ea3",
"name": "Erreur WP API",
"type": "n8n-nodes-base.form",
"position": [
-48,
-928
],
"webhookId": "ee9fe2bd-db09-469a-b3b1-cd335e4e6daf",
"parameters": {
"options": {},
"operation": "completion",
"completionTitle": "WordPress API Error",
"completionMessage": "Please check if your WP-Api is enabled"
},
"typeVersion": 2.3
},
{
"id": "46d785e4-fc5f-49ba-8aa6-ee6436621131",
"name": "Assigner les noms d'étiquettes et catégories aux articles",
"type": "n8n-nodes-base.code",
"position": [
224,
-336
],
"parameters": {
"jsCode": "const tagItems = $items('Get Tags'); // [{ json: { id, name, ... }}, ...]\nconst categoryItems = $items('Get Categories'); // [{ json: { id, name, ... }}, ...]\nconst postItems = $items('Get Posts'); // [{ json: { categories: [ids], tags: [ids], ... }}, ...]\n\n// Build lookup maps\nconst tagsById = Object.fromEntries(\n tagItems\n .filter(i => i?.json?.id != null && i?.json?.name != null)\n .map(i => [String(i.json.id), i.json.name])\n);\n\nconst categoriesById = Object.fromEntries(\n categoryItems\n .filter(i => i?.json?.id != null && i?.json?.name != null)\n .map(i => [String(i.json.id), i.json.name])\n);\n\n// Helper: normalize a field that might be number | string | array into an array of strings\nconst toIdArray = (val) => {\n if (val == null) return [];\n if (Array.isArray(val)) return val.map(v => String(v));\n return [String(val)];\n};\n\n// Enrich posts with names instead of IDs\nconst out = postItems.map(item => {\n const post = item.json;\n\n const categoryIds = toIdArray(post.categories);\n const tagIds = toIdArray(post.tags);\n\n const categoryNames = categoryIds\n .map(id => categoriesById[id])\n .filter(Boolean);\n\n const tagNames = tagIds\n .map(id => tagsById[id])\n .filter(Boolean);\n\n return {\n json: {\n ...post,\n categoryNames,\n tagNames,\n },\n // keep binary if present\n binary: item.binary,\n };\n});\n\nreturn out;"
},
"typeVersion": 2
},
{
"id": "989f3e60-1a1b-454c-b5f8-cdd27bf5c379",
"name": "Ajouter les articles avec étiquettes et catégories à la feuille Google",
"type": "n8n-nodes-base.googleSheets",
"position": [
480,
-336
],
"parameters": {
"columns": {
"value": {
"URL": "={{ $json.link }}",
"Tags": "={{ $json.tagNames }}",
"Title": "={{ $json.title.rendered }}",
"Categories": "={{ $json.categoryNames }}"
},
"schema": [
{
"id": "URL",
"type": "string",
"display": true,
"required": false,
"displayName": "URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Title",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Categories",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Categories",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Tags",
"type": "string",
"display": true,
"required": false,
"displayName": "Tags",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1nZ3WHn_QedbuNYlFVfPildBZETNYYJFT0yYFIgJy2Mg/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1nZ3WHn_QedbuNYlFVfPildBZETNYYJFT0yYFIgJy2Mg",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1nZ3WHn_QedbuNYlFVfPildBZETNYYJFT0yYFIgJy2Mg/edit?usp=drivesdk",
"cachedResultName": "[WP]"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "sgj6aGeryqEVmS3h",
"name": "GSheets - Piotr.Sikora.Ck@gmail.com"
}
},
"typeVersion": 4.7
},
{
"id": "88750e8c-ad3c-4f40-b3f5-83618faa5de4",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
400,
-640
],
"parameters": {
"color": 4,
"height": 496,
"content": "## Add posts, with tags, categories to Google Sheet\n\nRemember o create **Googe Sheet** with filds:\n- **URL**\n- **Title**\n- **Categories**\n- **Tags**"
},
"typeVersion": 1
},
{
"id": "ed1593aa-3c25-42d4-a8cc-020843039197",
"name": "Note adhésive 1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-112,
-1072
],
"parameters": {
"color": 3,
"height": 304,
"content": "## WP API Errror\n\nAPI is not avalable"
},
"typeVersion": 1
},
{
"id": "f23af13c-7b4d-46b4-af31-f33726fd8356",
"name": "Note adhésive 2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-480,
-928
],
"parameters": {
"color": 5,
"width": 256,
"height": 960,
"content": "## Fetch API data\n\nFetch the following resources:\n- **Posts**\n- **Categories**\n- **Tags**\n\n\nPlease note that the `per_page` parameter is statically assigned for the posts and categories endpoints, with its value set to 100.\n\nIf you require a different number of results, adjust the parameter in the appropriate nodes accordingly."
},
"typeVersion": 1
},
{
"id": "06d3d9a1-40bc-43e3-82a4-8bf08e640a9a",
"name": "Note adhésive 3",
"type": "n8n-nodes-base.stickyNote",
"position": [
144,
-640
],
"parameters": {
"color": 6,
"height": 496,
"content": "## Append categories and tags names\n\nWhat this does:\n- Reads Get Tags, Get Categories, and Get Posts.\n- Builds fast lookup maps.\n- Appends `categoryNames` and `tagNames` directly into each post.\n- Returns the modified posts ready for next steps."
},
"typeVersion": 1
},
{
"id": "c51ef4bd-2234-486b-b0f1-2d40f0d00e00",
"name": "Formulaire",
"type": "n8n-nodes-base.form",
"position": [
688,
-336
],
"webhookId": "32930177-d74b-4ab5-98b6-7726b70811f5",
"parameters": {
"options": {},
"operation": "completion",
"completionTitle": "List created",
"completionMessage": "Please check linked document to see details"
},
"typeVersion": 2.3
},
{
"id": "b5e7141e-b922-496f-afd7-1c75a29dc408",
"name": "Note adhésive 4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-848,
-656
],
"parameters": {
"color": 7,
"height": 368,
"content": "## Config per_page\n\nConfigure `per_page` parametter."
},
"typeVersion": 1
},
{
"id": "7a062203-6a2e-4521-a98d-f1435f52ad17",
"name": "Configuration",
"type": "n8n-nodes-base.set",
"position": [
-784,
-448
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "39de8718-83b1-4060-9dc9-23b1a0a20857",
"name": "per_page",
"type": "number",
"value": 100
}
]
}
},
"typeVersion": 3.4
}
],
"active": false,
"pinData": {
"On form submission": [
{
"json": {
"URL": "http://juttle.app",
"formMode": "test",
"Post limit": 1,
"submittedAt": "2025-10-22T10:15:02.313+02:00"
}
}
]
},
"settings": {
"executionOrder": "v1"
},
"versionId": "91e580eb-4b6f-45ea-a1fc-68998aa694db",
"connections": {
"6a924b56-3613-4b7f-a7c8-819bbe38387b": {
"main": [
[
{
"node": "46d785e4-fc5f-49ba-8aa6-ee6436621131",
"type": "main",
"index": 0
}
]
]
},
"7a062203-6a2e-4521-a98d-f1435f52ad17": {
"main": [
[
{
"node": "f6c0f099-2c27-45df-91b3-0fd1ea15d165",
"type": "main",
"index": 0
},
{
"node": "2201ba9e-40b8-4bcc-988c-e8dce2578dda",
"type": "main",
"index": 0
}
]
]
},
"f6c0f099-2c27-45df-91b3-0fd1ea15d165": {
"main": [
[
{
"node": "6a924b56-3613-4b7f-a7c8-819bbe38387b",
"type": "main",
"index": 0
}
],
[
{
"node": "bc6731ac-f1aa-4594-a1a6-98275d976ea3",
"type": "main",
"index": 0
}
]
]
},
"3a5f6f97-c79a-4fed-b32a-fe7695e569f1": {
"main": [
[
{
"node": "6a924b56-3613-4b7f-a7c8-819bbe38387b",
"type": "main",
"index": 2
}
],
[
{
"node": "bc6731ac-f1aa-4594-a1a6-98275d976ea3",
"type": "main",
"index": 0
}
]
]
},
"2201ba9e-40b8-4bcc-988c-e8dce2578dda": {
"main": [
[
{
"node": "6a924b56-3613-4b7f-a7c8-819bbe38387b",
"type": "main",
"index": 1
}
],
[
{
"node": "bc6731ac-f1aa-4594-a1a6-98275d976ea3",
"type": "main",
"index": 0
}
]
]
},
"bfc25242-766f-4b7d-ab23-a0829de1fe83": {
"main": [
[
{
"node": "3a5f6f97-c79a-4fed-b32a-fe7695e569f1",
"type": "main",
"index": 0
},
{
"node": "7a062203-6a2e-4521-a98d-f1435f52ad17",
"type": "main",
"index": 0
}
]
]
},
"46d785e4-fc5f-49ba-8aa6-ee6436621131": {
"main": [
[
{
"node": "989f3e60-1a1b-454c-b5f8-cdd27bf5c379",
"type": "main",
"index": 0
}
]
]
},
"989f3e60-1a1b-454c-b5f8-cdd27bf5c379": {
"main": [
[
{
"node": "c51ef4bd-2234-486b-b0f1-2d40f0d00e00",
"type": "main",
"index": 0
}
]
]
}
}
}Comment utiliser ce workflow ?
Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.
Dans quelles scénarios ce workflow est-il adapté ?
Intermédiaire - Étude de marché
Est-ce payant ?
Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.
Workflows recommandés
Piotr Sikora
@argonePartager ce workflow