WordPress Sync System
Baserow / NocoDB → n8n → WordPress
Docelowa struktura danych używana do synchronizacji treści do WordPressa.
Założenia architektoniczne
- Baserow / NocoDB – edycja danych, source of truth
- n8n – cała logika, walidacja i synchronizacja
- WordPress – system docelowy (bez logiki sync)
Zasady:
- 1 rekord w Entries = 1 post w WordPressie
- synchronizacja jest idempotentna
- konfiguracja snapshotowana na każdy run
- brak logiki w bazie danych
Podział na post types
Każdy post type w WordPressie ma własny zestaw tabel.
Przykłady:
Posts,Post Entries,Posts FieldsPages,Pages Entries,Pages FieldsCars,Cars Entries,Cars Fields
Dzięki temu:
- każdy post type ma własne ACF, taxonomie i SEO,
- struktura jest czytelna,
- nie ma warunków i wyjątków w danych.
1. Tabela Master
(Posts / Pages / Cars)
Rola
Tabela Master reprezentuje jeden logiczny byt treści, niezależnie od języków. Z niej generowane są Entries (wersje językowe).
Kolumny
-
Post title Pole domyślne (pierwsza kolumna). Logiczna nazwa wpisu / identyfikator roboczy.
-
Generate / Refresh Button lub link wywołujący webhook n8n. Służy do generowania lub ponownego generowania Entries.
-
Entries coverage Informacja typu
2/3,3/3. Pokazuje ile Entries istnieje w stosunku do liczby języków w configu. -
Last synced Informacyjnie – kiedy dane powiązane z tym Masterem były synchronizowane.
-
Sync issues Krótka informacja o problemach wykrytych przez n8n (np. brakujące entries, błędy konfiguracji).
2. Tabela Entries
(Post Entries / Page Entries / Car Entries)
Rola
Tabela Entries jest główną tabelą roboczą systemu.
Każdy rekord odpowiada:
- jednemu językowi (w wersji wielojęzykowej),
- jednemu postowi w WordPressie.
Kolumny
-
Post titlePole domyślne (pierwsza kolumna). Tytuł posta w WordPressie.
-
MasterLink do tabeli Master.
-
Lang(opcjonalnie)Kod języka (np.
pl,en,de). -
SlugSlug posta w WordPressie.
-
Post statusStatus posta (
draft,publish, itd.). -
TaxonomiesPole typu multiselect. Zawiera przypisane termy (zgodnie z konfiguracją JSON post type).
-
Post IDID posta w WordPressie.
-
Edit post
Button / link do edycji posta w panelu WordPress.
-
Meta titlePole SEO – tytuł meta.
-
Meta descriptionPole SEO – opis meta.
-
Sync stageAktualny etap synchronizacji (np.
core_ok,acf_failed). -
Sync reportJSON z raportem ostatniego uruchomienia synchronizacji.
-
Last syncedData ostatniego poprawnego zapisu do WordPressa.
3. Tabela Custom Fields (ACF)
(Posts Fields / Pages Fields / Cars Fields)
Rola
Tabela przechowuje custom fields (ACF) w modelu key–value.
Każdy wiersz reprezentuje jedno pole ACF dla jednego Entry.
Kolumny
-
Field keyPole domyślne (pierwsza kolumna). Techniczny klucz ACF (
field_xxxxx). -
EntryLink do tabeli Entries.
-
Lang (Lookup)(opcjonalnie)Pole typu lookup pobierające język z powiązanego Entry. Informuje w jakim języku powinna być wypełniona wartość ACF.
-
ValueTreść pola custom field.
4. Tabela Config
Rola
Tabela Config jest jedynym źródłem konfiguracji systemu.
Każdy wiersz opisuje:
- jeden post type,
- jego strukturę danych,
- aktywne moduły,
- mapowanie pól.
n8n pobiera config na początku runu i używa go jako snapshotu.
Kolumny
-
Base URLAdres instalacji WordPressa.
-
Post typeSlug post type.
-
Tables(JSON)Informacja o tabelach używanych przez post type:
json { "master": "Posts", "entries": "Post Entries", "fields": "Posts Fields" } -
Modules(JSON)Flagi funkcjonalne:
{ "multilang": true, "languages": ["pl", "en"], "taxonomy": true, "seo": true } -
Core(JSON)Mapowanie pól core WordPressa:
{ "title": "Post title", "slug": "Slug", "status": "Post status", "content": "Content", "taxonomies": { "category": "Taxonomies", "post_tag": "Taxonomies" }, "seo": { "meta_title": "Meta title", "meta_description": "Meta description" } } -
Custom fields(JSON)Mapowanie pól ACF do czytelnych nazw w polu select kolumny
Field key:{ "hero_title": "Hero title", "cta_label": "CTA label", "bg_image": "Background image" }
Filozofia systemu
- baza danych przechowuje tylko dane,
- n8n zawiera całą logikę i walidację,
- WordPress jest systemem docelowym.
Struktura została zaprojektowana tak, aby:
- była łatwa do rozszerzenia,
- była odporna na zmiany ACF i SEO,
- była czytelna nawet po dłuższej przerwie w projekcie.