Przejdź do treści

Konfiguracja WooCommerce

Strona ta opisuje pełen cykl konfiguracji sklepu WooCommerce w panelu — od dodania konta przez wygenerowanie kluczy REST API w WP-Admin, po mapowanie ról cenowych i wgranie własnego CSS. Każdy sklep buyspace.pl (master / eu / de / test / produkcja) jest dla panelu osobnym kontem — mają osobne klucze, osobne cenniki, osobne mapowania.

Jeżeli szukasz „jak wystawić produkt na Woo" — to jest w Listings → WooCommerce. Tu chodzi o konfigurację konta, nie o publikację oferty.

Krótko

  • Konfiguracja jest w Marketplace → Konfiguracja → WooCommerce.
  • Klucz REST API (Consumer Key + Consumer Secret) generujesz w WP-Admin sklepu, nie w panelu.
  • Mu-plugin po stronie WordPressa dodaje endpointy spoza wc/v3 (deploy CSS, naprawa URLi, taksonomie BL). Bez mu-pluginu basic-flow działa, ale stracisz część funkcji.
  • Każdy sklep ma swój locale (pl_PL, de_DE, …) — to wpływa na język treści i ustawienia WP.
  • Cenniki: per-rola WooCommerce → grupa cenowa BaseLinkera + osobny mnożnik.

Dodanie konta sklepu w panelu

Krok 1 — Wygeneruj klucz REST API w WP-Admin

  1. Zaloguj się do administracji sklepu (https://buyspace.pl/wp-admin/ — odpowiednio dla każdej instancji).
  2. WooCommerce → Ustawienia → Zaawansowane → REST API → Dodaj klucz.
  3. Wypełnij:
    • Opis — np. „Panel AIO — produkcyjny",
    • Użytkownik — administrator sklepu,
    • UprawnieniaRead/Write.
  4. Kliknij Wygeneruj klucz API. WordPress pokaże Consumer Key (zaczyna się od ck_…) i Consumer Secret (cs_…).

Klucz secret zobaczysz tylko raz

Po zamknięciu strony WooCommerce nie pokaże ponownie wartości secret. Skopiuj oba klucze od razu do bezpiecznego miejsca (Bitwarden, folder panel-aio / woo-buyspace). Jeśli zgubisz secret — usuń klucz w WP-Admin i wygeneruj nowy.

Krok 2 — Dodaj sklep w panelu

  1. Panel → Marketplace → Konfiguracja → Marketplace'y → WooCommerce → Dodaj konto.
  2. Wypełnij:
    • Etykieta — np. „buyspace.pl (prod)" lub „buyspace.eu",
    • Adres sklepu (URL) — pełny URL sklepu, np. https://buyspace.pl,
    • Consumer Key — wartość ck_…,
    • Consumer Secret — wartość cs_….
  3. Kliknij Zapisz konfigurację. Panel sprawdzi GET /wp-json/wc/v3/products?per_page=1 i pokaże ✅ jeśli REST jest dostępny.

Krok 3 — Konfiguracja sklepu (/marketplace/config/platforms/woocommerce/konfiguracja)

Po zapisaniu konta wejdź w Konfiguracja WooCommerce (przycisk obok karty WooCommerce w Marketplace'y). Tam ustawiasz wszystkie szczegóły publikacji — strona ma sześć sekcji:

Sekcja Co ustawia
Mapowanie kolorów (hex) Jakie wartości #RRGGBB mają trafić do atrybutu Kolor w Woo (np. „Bordowy" → #7a1428). Działa razem z pluginem swatchy. Przycisk Załaduj domyślne kolory wpisuje 12 standardowych odcieni używanych w buyspace.pl.
Identyfikatory WooCommerce ID atrybutów (Kolor = 2, Rozmiar = 1 domyślnie), ID zakładki „Dodatkowe informacje" z pluginu Barn2 Product Tabs, ID posta Additional CSS customizera, ID domyślnej kategorii dla nowych produktów.
Mapowanie cen wg ról Dla każdej roli WooCommerce (subscriber, wholesale, …) wpisujesz docelową grupę cenową BaseLinkera i mnożnik. Patrz Cenniki niżej.
Język sklepu / Locale Jeden z 11 obsługiwanych: pl_PL · de_DE · en_GB · fr_FR · it_IT · es_ES · nl_NL · cs_CZ · sk_SK · sv_SE · sl_SI.
Mapowanie kategorii wg linii produktowej Linia produktowa BL (np. ECCO) → lista ID kategorii Woo (np. 103, 117). Używane przy auto-kategoryzacji w sync.
Limit zdjęć Maks. ilu zdjęć panel pchnie do Woo na produkt (domyślnie 11). Zwiększanie ponad ~15 grozi timeoutem POST /products.
Dodatkowy CSS Pole tekstowe ze stylami CSS specyficznymi dla tego sklepu. Po zapisaniu trzeba uruchomić skrypt deploy_css żeby wgrać je do WP — patrz Wdrożenie CSS.

Po wszystkich zmianach kliknij Zapisz konfigurację. Następna publikacja oferty użyje nowych wartości.


Mu-plugin po stronie WordPressa

WooCommerce REST API (wc/v3) pokrywa standardowe operacje na produktach, ale panel wymaga kilku custom endpointów, które wnosi 00-buyspace-mail-and-newsletter.php (oraz mniejsze mu-pluginy w windmill/f/infra/wordpress/mu-plugins/).

Co dorzucają mu-pluginy:

  • SMTP routingwp_mail() idzie przez Mailcow (mail.aiofactory.pl), a nie przez systemowy sendmail (którego w kontenerze nie ma).
  • Listmonk newsletter hook — formularz CF7 #323 z homepage'u dopisuje subskrybenta do listy „Opt-in" w Listmonku.
  • Endpointy do deploy CSS i fix domain URLs — patrz Wdrożenie CSS i Migracja sklepu.
  • Taksonomie kompatybilne z atrybutami BL — żeby attr_kolor_id / attr_rozmiar_id z konfiguracji panelu nie rozjeżdżały się z ID-kami w bazie WP.

Bez mu-pluginu działa basic flow

Standardowe wystawianie produktów (push_simple, pull_from_woo) działa nawet bez mu-pluginu. Stracisz natomiast: deploy CSS bez ręcznej edycji theme'u, bezpieczną migrację domeny po IP failoverze, integrację z Listmonkiem dla newslettera.

Mu-pluginy instalowane są raz przy provisioning sklepu — patrz windmill/f/infra/wordpress/provision_store.py. Re-instalacja: skopiuj plik(i) z repo do wp-content/mu-plugins/ w kontenerze WP (przez docker exec na host-mom lub host-dad).


Cenniki — (cennik1 + cennik2) × współczynnik

Reguła cenowa Woo jest taka sama jak na pozostałych platformach (patrz Listings → Model cenowy). Konfiguracja per-konto:

cena_oferty  =  ( cennik1 + cennik2 )  ×  współczynnik

W panelu (Konfiguracja WooCommerce → Mapowanie cen wg ról) podajesz dla każdej roli WooCommerce:

Pole Co znaczy Przykład
Nazwa roli WC Nazwa roli z WP (operator wpisuje ręcznie, panel zamienia na slug) Hurtownikhurtownik
Grupa cenowa Baselinker ID cennika BL z listy 10 predefiniowanych 47023 (Hurt karton 32 %)
Mnożnik Współczynnik z reguły powyżej (≈ marża + VAT) 1.32

Cennik2 (np. wkalkulowany koszt logistyki danego sklepu) ustawiasz osobno — pole grupa cenowa #2 na karcie konta WooCommerce w sekcji Marketplace'y. Jeśli zostawisz puste, panel używa starej reguły cennik1 × współczynnik.

Status rolloutu

(cennik1 + cennik2) × współczynnik działa end-to-end po stronie serwerowej dla WooCommerce (TASK-290). Wszystkie ścieżki publikacji (push_simple, push_variable, update_offer) honorują obie wartości.


Wdrożenie CSS

Tradycyjny sposób edycji wyglądu sklepu Woo to motyw + pliki PHP. My omijamy motyw i zamiast tego nadpisujemy WordPress Customizer → Additional CSS przez REST API mu-pluginu. Plus: zmiany są niezależne od tematu — jeśli właściciel zmieni motyw, CSS nadal działa.

Procedura:

  1. W panelu (Konfiguracja WooCommerce → Dodatkowy CSS) wpisujesz / edytujesz CSS.
  2. Klikasz Zapisz konfigurację.
  3. Otwierasz w nowej karcie Windmilla — f/marketplace/woocommerce/deploy_css — i klikasz Run, wybierając konto sklepu.
  4. Skrypt zaciąga CSS z konfiguracji konta i POST-uje do WordPressa pod ID posta z pola „ID posta Additional CSS" (np. 2035).

ID posta Additional CSS musi istnieć

To jest stały post w WP customizerze — nie tworzymy go z panelu. Jeśli nigdy nie był ustawiony, wejdź do WP-Admin → Wygląd → Dostosuj → Dodatkowy CSS i zapisz cokolwiek raz; WP utworzy post i pokaże jego ID.

Domyślny zestaw CSS dla buyspace.pl jest w windmill/f/marketplace/woocommerce/buyspace-description.css — możesz go skopiować jako punkt startowy.


Migracja sklepu między hostami

Po IP-failoverze (host-mom → host-dad) lub planowej migracji baza WP zostaje, ale URLi w treści produktów odnoszą się do starego hosta (np. obrazki na master.buyspace.pl/...). Skrypt naprawczy:

windmill/f/marketplace/woocommerce/fix_domain_urls.py

Co robi: przepisuje URLi w description, gallery, image_meta wszystkich produktów Woo. Uruchamiasz ręcznie z UI Windmilla po failoverze (nie ma cron — zbyt destrukcyjny).


Synchronizacja periodyczna

Zadanie Częstotliwość Skrypt
Pobieranie zgłoszeń klienta z notatek zamówień co 10 min f/marketplace/woocommerce/fetchers/issues.py
Snapshot ofert (pull_from_woo) uruchamiane z UI + cron f/marketplace/woocommerce/pull_from_woo.ts
Push raport (push_report) po każdej operacji push f/marketplace/woocommerce/push_report.ts

Klucz REST API jest stały — nie ma OAuth refresh dla WooCommerce. Klucz wygasa tylko jeśli właściciel ręcznie usunie go w WP-Admin → wówczas 401 Unauthorized we wszystkich operacjach do czasu wpisania nowego.


Troubleshooting

Objaw Co zrobić
401 Unauthorized Klucz REST API zrewokowany w WP-Admin. Wygeneruj nowy (krok 1) i wpisz w panelu.
404 rest_route_not_found WordPress nie ma przepisanych permalinks albo brakuje mu-pluginu. Sprawdź Ustawienia → Bezpośrednie odnośniki w WP-Admin — kliknij Zapisz nawet bez zmian.
duplicate_sku przy publikacji rodziny SKU już jest w Woo. Wykonaj Refresh now w Marketplace → Oferty → WooCommercepull_from_woo zsynchronizuje istniejące.
Variation utworzony, ale nie widać go w sklepie Cache WP. incus exec web -- docker exec buyspace-prod-wordpress-1 wp cache flush --allow-root lub odczekaj ~5 min.
Ceny rozjechane WP ↔ panel Najpierw Refresh now; potem ponowna publikacja przez Wystaw.
Test connection zwraca timeout Sklep w trakcie restartu albo failovera — sprawdź Inwentarz Usług.

Dane techniczne (appendix)

  • Tabela stanu: marketplaceAccounts (Convex). extra.woo_config trzyma mapowania, extra.role_pricing — cenniki.
  • UI konfiguracji: dashboard/src/routes/marketplace/config/platforms/woocommerce/konfiguracja/+page.svelte (połączenie konta — [platform]/connect/+page.svelte).
  • Skrypty Windmill: f/marketplace/woocommerce/{push_simple,push_variable,pull_from_woo,deploy_css,fix_domain_urls} + lib f/marketplace/woocommerce/lib/{api,pricing,builders,product,variations}.
  • Mu-pluginy: windmill/f/infra/wordpress/mu-plugins/. Provisioning: provision_store.py (WP-CLI przez SSH na host-mom).
  • Endpoint testu: GET {base_url}/wp-json/wc/v3/products?per_page=1 — używany przez przycisk Test connection.