Skip to content

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 Fields
  • Pages, Pages Entries, Pages Fields
  • Cars, 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

  1. Post title

    Pole domyślne (pierwsza kolumna). Tytuł posta w WordPressie.

  2. Master

    Link do tabeli Master.

  3. Lang (opcjonalnie)

    Kod języka (np. pl, en, de).

  4. Slug

    Slug posta w WordPressie.

  5. Post status

    Status posta (draft, publish, itd.).

  6. Taxonomies

    Pole typu multiselect. Zawiera przypisane termy (zgodnie z konfiguracją JSON post type).

  7. Post ID

    ID posta w WordPressie.

  8. Edit post

Button / link do edycji posta w panelu WordPress.

  1. Meta title

    Pole SEO – tytuł meta.

  2. Meta description

    Pole SEO – opis meta.

  3. Sync stage

    Aktualny etap synchronizacji (np. core_ok, acf_failed).

  4. Sync report

    JSON z raportem ostatniego uruchomienia synchronizacji.

  5. Last synced

    Data 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

  1. Field key

    Pole domyślne (pierwsza kolumna). Techniczny klucz ACF (field_xxxxx).

  2. Entry

    Link do tabeli Entries.

  3. 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.

  4. Value

    Treść 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

  1. Base URL

    Adres instalacji WordPressa.

  2. Post type

    Slug post type.

  3. Tables (JSON)

    Informacja o tabelach używanych przez post type: json { "master": "Posts", "entries": "Post Entries", "fields": "Posts Fields" }

  4. Modules (JSON)

    Flagi funkcjonalne:

    {
      "multilang": true,
      "languages": ["pl", "en"],
      "taxonomy": true,
      "seo": true
    }
    

  5. 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"
      }
    }
    

  6. 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.