REST API WordPressa — integracja z React i Next.js
WordPress REST API z Next.js — autentykacja, custom endpointy i cache bez typowych pułapek, w które wpada każdy, kto robi to pierwszy raz.
Maciej Sala
Founder StriveLab
5 min czytaniaOpublikowano 29 stycznia 2025 (Aktualizacja 20 maja 2026)
W tym artykule pokażę jak prosto zbudować tę integrację od podstaw, a działa tu zarówno , jak i architektura . Nie wiesz jeszcze za dużo o WordPressie? Zobacz artykuł WordPressa od zera — instalacji, konfiguracji i podstaw.
Czym jest WordPress REST API?
REST API to interfejs HTTP do danych WordPressa, który zamiast renderować gotowy HTML, WordPress zwraca czysty JSON:
W odpowiedzi dostajesz surowe dane, po które dowolny frontend w JavaScript może sięgnąć i wyrenderować je po swojemu.
Wbudowane endpointy WordPress REST API
WordPress udostępnia domyślnie:
Endpoint
Metody
Opis
/wp/v2/posts
GET, POST, PUT, DELETE
Posty
/wp/v2/pages
GET, POST, PUT, DELETE
Strony
/wp/v2/media
GET, POST, PUT, DELETE
Media
/wp/v2/categories
GET, POST, PUT, DELETE
Kategorie
/wp/v2/tags
GET, POST, PUT, DELETE
Tagi
/wp/v2/users
GET, POST, PUT, DELETE
Użytkownicy
/wp/v2/comments
GET, POST, PUT, DELETE
Komentarze
Przy listingach zwróć uwagę na nagłówki odpowiedzi X-WP-Total i X-WP-TotalPages, bo to z nich budujesz paginację po stronie klienta. Sam JSON zwraca tylko bieżącą stronę.
Parametr _embed jest flagą, więc wystarczy jego obecność (?_embed), a wartość true jest ignorowana po stronie serwera, choć zadziała. W dalszych przykładach używam _embed=true dla czytelności w URLSearchParams.
Konfiguracja WordPressa pod REST API
1. Permalinki dla REST API
REST API wymaga ładnych permalinków:
Code
Ustawienia → Bezpośrednie odnośniki → Nazwa wpisu (lub dowolne inne niż "Prosty")
Najważniejsze, by dopuszczać wyłącznie zaufane domeny (np. własny frontend) i nigdy nie pozwalać „każdemu” (*) na zapytania z ciasteczkami logowania. Te dwie zasady chronią przed kradzieżą sesji użytkowników.
3. Ukrycie wrażliwych danych w API
Nie zakładaj, że każde pole z odpowiedzi powinno być publiczne. Jeśli wystawiasz własne endpointy albo pola użytkowników, jawnie ograniczaj dane:
To rozwiązanie jest sensowne głównie dla połączeń pomiędzy serwerami (np. Twój backend Next.js rozmawia z WordPressem) albo dla zaplecza redakcyjnego. Nie wysyłaj takich danych uwierzytelniających do publicznego klienta w przeglądarce.
JWT w WordPress REST API
Zainstaluj wtyczkę "JWT Authentication for WP REST API":
Jak włączyć WordPress REST API i sprawdzić, czy działa?
REST API jest domyślnie włączone od WordPressa 4.7, a warunkiem by działało są włączone ładne permalinki (Ustawienia → Bezpośrednie odnośniki → dowolna opcja inna niż „Prosty"). Możesz przetestować API otwierając w przeglądarce twoja-domena.pl/wp-json/wp/v2/posts. Jeśli widzisz JSON, API działa. Brak odpowiedzi lub błąd najczęściej oznacza problem z permalinkami albo blokadę przez plugin bezpieczeństwa.
Jak pobrać posty z WordPress REST API w Next.js App Router?
W Server Component użyj fetch() z opcją next: { revalidate: 60 } dla ISR (odświeżanie co 60 sekund) lub cache: 'force-cache' dla danych statycznych. Parametr _embed=true dołącza powiązane dane (featured image, kategorie) w jednym requeście. Dla stron generowanych statycznie zaimplementuj generateStaticParams, który zwróci listę slugów pobranych z API.
Jak skonfigurować CORS dla headless WordPress z frontendem na innej domenie?
Dodaj w functions.php lub wtyczce filtr rest_pre_serve_request, który ustawia nagłówki CORS tylko dla zaufanych domen z tablicy $allowed_origins. Nigdy nie pozwalaj „każdej domenie" (gwiazdka *) wysyłać zapytań z ciasteczkami logowania (Access-Control-Allow-Credentials: true). Dla środowiska lokalnego dodaj http://localhost:3000 do listy dozwolonych adresów.
Jak autentykować się do WordPress REST API przy operacjach zapisu?
Dla połączeń server-to-server (Next.js backend → WordPress) użyj Application Passwords, które tworzysz w profilu użytkownika WordPressa i przekazujesz w nagłówku Authorization: Basic base64(user:password). W praktyce używaj ich wyłącznie po HTTPS, bo Basic Auth nie szyfruje poświadczeń sam z siebie. JWT (przez wtyczkę) jest alternatywą, ale wymaga zarządzania czasem życia tokena. Nigdy nie wysyłaj danych uwierzytelniających do publicznego klienta w przeglądarce.
Jak dodać własne pola do odpowiedzi WordPress REST API?
Użyj funkcji register_rest_field() wewnątrz hooka rest_api_init. Podajesz typ posta, nazwę pola i callback get_callback, który zwraca wartość. Możesz w ten sposób dodać pola z Advanced Custom Fields (ACF), obliczone wartości (jak czas czytania) lub metadane, które normalnie nie są widoczne w API.
Kiedy wybrać REST API, a kiedy WPGraphQL?
REST API jest wbudowane, nie wymaga dodatkowych wtyczek i sprawdza się świetnie do prostych projektów pobierających posty, strony i media. WPGraphQL (wtyczka) pozwala pobierać dokładnie te dane, których potrzebujesz, bez pobierania nadmiarowych pól (tzw. overfetching), co jest ważne przy złożonych relacjach danych (np. zagnieżdżone custom post types z ACF). Jeśli zaczynasz projekt headless, zacznij od REST API, a na GraphQL przejdź, gdy poczujesz jego ograniczenia.
Jak zoptymalizować wydajność przy pobieraniu danych z WordPress REST API?
Używaj parametru _fields=id,title,slug,excerpt do pobierania tylko potrzebnych pól zamiast pełnych obiektów. Łącz _embed z _fields ostrożnie, bo możesz przypadkowo wyciąć _embedded z odpowiedzi, a po stronie WordPress cachuj kosztowne zapytania przez Transient API (set_transient()). Po stronie Next.js dobieraj opcję revalidate do tempa zmian treści, ustawiając dłuższy czas dla rzadko zmienianych danych (3600 s dla kategorii) i krótszy dla postów.
O autorze
Maciej Sala
Maciej Sala — Product Manager i Frontend Developer z bogatym doświadczeniem w marketingu internetowym oraz SEO. Na co dzień pracuje z Reactem, Next.js i TypeScriptem, a ostatnio także z Astro i narzędziami do automatyzacji procesów AI. Sprawnie łączy perspektywę produktową z praktycznym podejściem do kodu. Przez kilka lat był związany z branżą gier wideo jako project manager i game designer. Absolwent historii na Uniwersytecie Jagiellońskim oraz studiów podyplomowych z marketingu internetowego na AGH w Krakowie. Po godzinach trenuje na siłowni, maluje figurki i rozwijam własne projekty.
REST Representational State Transfer to styl architektoniczny, który mocno wpłynął na web, a w praktyce większość API, z którymi pracujesz jako frontend deweloper, to raczej HTTP API inspirowane REST niż "czysty REST" z podręcznika.
Maciej Sala
Founder StriveLab
Headless WordPress brzmi jak przepis na nowoczesną architekturę: WordPress do zarządzania treścią, Next.js do frontendu, lepsza wydajność i więcej kontroli. Problem w tym, że ten układ potrafi być świetnym wyborem albo kosztownym przerostem formy, zależnie od rodzaju projektu.
Maciej Sala
Founder StriveLab
Z jednej strony mamy WordPressa — weterana, który wciąż napędza ponad 40% globalnego internetu. Z drugiej Next.js, flagowy framework wśród nowoczesnych technologii opartych na Reakcie. Cel obu narzędzi jest ten sam, by wypuścić stronę w świat. Różnią się jednak diametralnie drogą do tego celu, a wybór między nimi to kwestia tego, co konkretny projekt ma osiągnąć i kto będzie go utrzymywał.