WordPress REST API to interfejs, który pozwala komunikować się z WordPressem przez żądania HTTP — bez logowania do panelu wp-admin. Możesz pobierać wpisy (GET), tworzyć nowe (POST), edytować (PUT) i usuwać (DELETE) — z poziomu przeglądarki, terminala (cURL), JavaScript, Pythona, aplikacji mobilnej lub dowolnego innego narzędzia, które potrafi wysłać żądanie HTTP.
REST API zamienia WordPressa z „CMS z panelem administracyjnym” w headless CMS — backend dostarczający dane w formacie JSON, z którego frontend (React, Vue, Next.js, aplikacja mobilna) je pobiera i wyświetla. W tym poradniku pokazuję jak REST API działa, jakie endpointy są dostępne i jak z nich korzystać w praktyce.
Spis treści
ToggleCo to jest REST API — szybkie wyjaśnienie
REST (Representational State Transfer) to styl architektury API, w którym:
- Komunikacja odbywa się przez HTTP (te same metody co przeglądarka: GET, POST, PUT, DELETE)
- Dane są w formacie JSON (lekki, czytelny dla ludzi i maszyn)
- Każdy zasób ma swój URL (endpoint) — np.
/wp-json/wp/v2/posts= wszystkie wpisy - API jest bezstanowe (stateless) — każde żądanie jest niezależne, serwer nie pamięta poprzednich
API (Application Programming Interface) to „umowa” między dwoma programami — „wyślij mi żądanie w tym formacie, a odpowiem Ci danymi w tym formacie”. REST API WordPressa mówi: „wyślij GET na /wp-json/wp/v2/posts, a dostaniesz listę wpisów w JSON”.
Jak uzyskać dostęp do REST API
WordPress REST API jest włączony domyślnie od WordPress 4.7 (2016). Nie musisz nic instalować. Otwórz przeglądarkę i wejdź na:
https://twojadomena.pl/wp-json/wp/v2/posts
Zobaczysz JSON z listą ostatnich wpisów — tytuły, treści, daty, autorzy, kategorie. To jest REST API w akcji — przeglądarka wysłała GET, WordPress odpowiedział JSON-em.
Sprawdź, czy API działa
https://twojadomena.pl/wp-json/
Zwraca listę wszystkich dostępnych endpointów (namespaces). Jeżeli widzisz JSON — API działa. Jeżeli 404 — sprawdź permalinki (Ustawienia → Bezpośrednie odnośniki → zapisz) lub czy wtyczka bezpieczeństwa nie blokuje REST API.
Najważniejsze endpointy
| Endpoint | Metoda | Co robi |
|---|---|---|
/wp-json/wp/v2/posts |
GET | Lista wpisów |
/wp-json/wp/v2/posts/123 |
GET | Pojedynczy wpis (ID=123) |
/wp-json/wp/v2/posts |
POST | Utwórz nowy wpis (wymaga auth) |
/wp-json/wp/v2/posts/123 |
PUT | Edytuj wpis (wymaga auth) |
/wp-json/wp/v2/posts/123 |
DELETE | Usuń wpis (wymaga auth) |
/wp-json/wp/v2/pages |
GET | Lista stron |
/wp-json/wp/v2/categories |
GET | Lista kategorii |
/wp-json/wp/v2/tags |
GET | Lista tagów |
/wp-json/wp/v2/media |
GET | Lista mediów (obrazki, pliki) |
/wp-json/wp/v2/users |
GET | Lista użytkowników |
/wp-json/wp/v2/comments |
GET | Lista komentarzy |
/wp-json/wp/v2/search?search=query |
GET | Wyszukiwanie |
Pobieranie danych — GET z przykładami
Lista wpisów (ostatnie 10)
curl https://twojadomena.pl/wp-json/wp/v2/posts
Domyślnie zwraca 10 wpisów. Parametry filtrowania:
# 20 wpisów
/wp-json/wp/v2/posts?per_page=20
# Wpisy z kategorii 16 (SEO)
/wp-json/wp/v2/posts?categories=16
# Wpisy od autora 1
/wp-json/wp/v2/posts?author=1
# Szukaj frazy
/wp-json/wp/v2/posts?search=wordpress
# Sortuj po dacie (najnowsze)
/wp-json/wp/v2/posts?orderby=date&order=desc
# Tylko konkretne pola (szybciej)
/wp-json/wp/v2/posts?_fields=id,title,link,date
# Strona 2 wyników (paginacja)
/wp-json/wp/v2/posts?page=2&per_page=10
Pojedynczy wpis
curl https://twojadomena.pl/wp-json/wp/v2/posts/3597
Zwraca pełne dane wpisu: title, content (HTML), excerpt, date, author, categories, tags, featured_media, slug, status, meta.
Z JavaScript (fetch)
const response = await fetch('https://twojadomena.pl/wp-json/wp/v2/posts?per_page=5&_fields=id,title,link');
const posts = await response.json();
posts.forEach(post => {
console.log(post.title.rendered, post.link);
});
Tworzenie i edycja — POST/PUT z autentykacją
Operacje zapisu (tworzenie, edycja, usuwanie) wymagają autentykacji — API musi wiedzieć, że masz uprawnienia. WordPress obsługuje kilka metod:
Application Passwords (zalecane)
Od WordPress 5.6: w profilu użytkownika (wp-admin → Użytkownicy → Twój profil) generujesz Application Password — jednorazowy token do API. Używasz go z Basic Auth:
curl -X POST https://twojadomena.pl/wp-json/wp/v2/posts \
-u "login:xxxx xxxx xxxx xxxx xxxx xxxx" \
-H "Content-Type: application/json" \
-d '{
"title": "Nowy wpis z API",
"content": "<p>Treść wpisu utworzonego przez REST API.</p>",
"status": "publish",
"categories": [16]
}'
Odpowiedź: JSON z pełnymi danymi nowo utworzonego wpisu (ID, URL, data, itp.).
Edycja istniejącego wpisu
curl -X PUT https://twojadomena.pl/wp-json/wp/v2/posts/3597 \
-u "login:xxxx xxxx xxxx xxxx xxxx xxxx" \
-H "Content-Type: application/json" \
-d '{"title": "Zmieniony tytuł"}'
Usunięcie wpisu
curl -X DELETE https://twojadomena.pl/wp-json/wp/v2/posts/3597 \
-u "login:xxxx xxxx xxxx xxxx xxxx xxxx"
Domyślnie: przenosi do kosza. Żeby usunąć trwale: dodaj ?force=true.
Praktyczne zastosowania REST API
1. Headless WordPress
WordPress jako backend (CMS do zarządzania treścią) + frontend w React/Vue/Next.js. Redaktor pisze w wp-admin, frontend pobiera dane z REST API i renderuje stronę. Zalety: szybszy frontend (SPA/SSG), pełna swoboda designu, WordPress robi to, co umie najlepiej (zarządzanie treścią).
2. Aplikacja mobilna
Aplikacja na iOS/Android pobiera wpisy, produkty i dane z WordPress REST API. Przykład: aplikacja newsowa, która wyświetla artykuły z bloga WordPress.
3. Automatyzacja publikacji
Skrypt (Node.js, Python, Bash) automatycznie tworzy wpisy — np. nasz publish-article.mjs używa REST API do publikowania artykułów na seomantyczny.pl bez logowania do wp-admin.
4. Integracja z innymi systemami
CRM tworzy stronę klienta w WordPress po zamknięciu dealu. ERP synchronizuje produkty WooCommerce. CI/CD pipeline aktualizuje stronę po deploymencie. Wszystko przez REST API.
5. Wyświetlanie treści WordPress na innej stronie
Masz blog na WordPress i stronę główną na innej platformie (Webflow, custom HTML)? JavaScript na stronie głównej pobiera ostatnie wpisy z REST API WordPressa i wyświetla je jako kafelki „Aktualności z bloga” — bez iframe, bez duplikacji treści.
Bezpieczeństwo REST API
Kto może czytać (GET)?
Domyślnie: każdy. Publiczne endpointy (posts, pages, categories, tags) są dostępne bez autentykacji. To celowe — REST API zastępuje tradycyjne metody pobierania danych (RSS, XML-RPC) i umożliwia headless WordPress.
Kto może pisać (POST/PUT/DELETE)?
Tylko zaautentyzowani użytkownicy z odpowiednimi uprawnieniami (Administrator, Editor, Author — zależy od endpointu). Bez Application Password lub innej metody auth: każda próba zapisu zwraca 401 Unauthorized.
Czy wyłączyć REST API?
Niektóre wtyczki bezpieczeństwa (iThemes, Wordfence) proponują wyłączenie REST API „dla bezpieczeństwa”. Nie rób tego — wiele wtyczek (Gutenberg, Jetpack, WooCommerce, Contact Form 7, Yoast) korzysta z REST API do działania. Wyłączenie = zepsute wtyczki. Zamiast tego: ogranicz dostęp do wrażliwych endpointów (np. /users) dla niezalogowanych — wtyczka „Disable REST API” pozwala wybrać, co blokować.
Custom Endpoints — własne endpointy
Możesz dodać własne endpointy do REST API WordPress. Przykład: endpoint /wp-json/myplugin/v1/stats zwracający statystyki:
// W functions.php lub wtyczce:
add_action('rest_api_init', function() {
register_rest_route('myplugin/v1', '/stats', [
'methods' => 'GET',
'callback' => function() {
return [
'posts' => wp_count_posts()->publish,
'pages' => wp_count_posts('page')->publish,
'comments' => wp_count_comments()->approved,
];
},
'permission_callback' => '__return_true', // publiczny
]);
});
Teraz: GET /wp-json/myplugin/v1/stats zwraca: {"posts": 66, "pages": 12, "comments": 340}.
WooCommerce REST API
WooCommerce dodaje własne endpointy pod /wp-json/wc/v3/:
/wc/v3/products— lista produktów/wc/v3/orders— lista zamówień/wc/v3/customers— lista klientów/wc/v3/coupons— kupony/wc/v3/reports— raporty sprzedaży
Autentykacja WooCommerce: osobne klucze API (WooCommerce → Ustawienia → Zaawansowane → REST API → Dodaj klucz). Nie Application Passwords — WooCommerce ma własny system kluczy.
Najczęściej zadawane pytania
Czy REST API spowalnia stronę?
Nie — REST API nie jest „włączone” w sensie, że coś działa w tle. Endpointy odpowiadają tylko gdy ktoś do nich wyśle żądanie. Jeśli nikt nie odpytuje API — zero obciążenia. Gutenberg i wtyczki używają REST API do komunikacji z backendem (zamiast starego admin-ajax.php), co jest szybsze niż stare rozwiązanie.
REST API vs WP-CLI — co do czego?
REST API: komunikacja przez HTTP (z dowolnego miejsca — przeglądarka, aplikacja, skrypt). WP-CLI: wiersz poleceń na serwerze (wymagany SSH). REST API: zdalne, przez internet. WP-CLI: lokalne, na serwerze. Oba mogą tworzyć wpisy, zarządzać użytkownikami — ale innym kanałem.
REST API vs XML-RPC — co lepsze?
REST API jest następcą XML-RPC — nowocześniejszy, bezpieczniejszy, z JSON zamiast XML. XML-RPC powinien być wyłączony (wektor ataków brute force). REST API jest standardem od WP 4.7. Nie ma powodu, żeby używać XML-RPC w 2026 roku.
Jak ograniczyć publiczny dostęp do REST API?
Wtyczka Disable REST API — pozwala wybrać, które endpointy są publiczne (np. posts — tak), a które wymagają logowania (np. users — tak). Alternatywnie: custom code w functions.php z filtrem rest_authentication_errors.
Podsumowanie
WordPress REST API zamienia WordPressa w backend dostarczający dane przez HTTP/JSON — umożliwia headless WordPress, aplikacje mobilne, automatyzację publikacji i integrację z dowolnym systemem. Endpointy są włączone domyślnie, publiczne GET-y (wpisy, strony, kategorie) nie wymagają autentykacji. Do zapisu: Application Passwords + Basic Auth. Do WooCommerce: osobne klucze API. I najważniejsze: nie wyłączaj REST API „dla bezpieczeństwa” — Gutenberg, WooCommerce i dziesiątki wtyczek go potrzebują.






