{"id":514,"date":"2026-09-29T20:30:00","date_gmt":"2026-09-29T18:30:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/?page_id=514"},"modified":"2026-09-25T15:07:51","modified_gmt":"2026-09-25T13:07:51","slug":"tworzenie-wysokowydajnych-wlasnych-punktow-koncowych-rest-api-w-wordpressie","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tworzenie-wysokowydajnych-wlasnych-punktow-koncowych-rest-api-w-wordpressie\/","title":{"rendered":"Tworzenie wysokowydajnych, w\u0142asnych punkt\u00f3w ko\u0144cowych REST API w WordPressie"},"content":{"rendered":"<h2>Przegl\u0105d architektury: REST API vs. admin-ajax.php<\/h2>\n<p>Interaktywne komponenty frontowe w systemie WordPress tradycyjnie opieraj\u0105 si\u0119 na przestarza\u0142ym mechanizmie <code>admin-ajax.php<\/code>. Ka\u017cde \u017c\u0105danie kierowane przez ten uchwyt inicjuje jednak pe\u0142ne j\u0105dro administracyjne (w tym wid\u017cety kokpitu, weryfikacj\u0119 uprawnie\u0144 oraz haki panelu admina). To obci\u0105\u017cenie architektoniczne regularnie prowadzi do op\u00f3\u017anie\u0144 wska\u017anika Time to First Byte (TTFB) przekraczaj\u0105cych 400\u2013600 milisekund, nawet przy prostych zapytaniach do bazy danych.<\/p>\n<p>W WordPressie w wersji 7.0.2 tworzenie w\u0142asnych punkt\u00f3w ko\u0144cowych REST API za pomoc\u0105 funkcji <code>register_rest_route()<\/code> stanowi znacznie wydajniejsz\u0105 alternatyw\u0119. Punkty ko\u0144cowe REST omijaj\u0105 podsystem administracyjny, wymuszaj\u0105 natywn\u0105 walidacj\u0119 schematu JSON, obs\u0142uguj\u0105 nag\u0142\u00f3wki pami\u0119ci podr\u0119cznej HTTP i s\u0105 przetwarzane o wiele szybciej. W po\u0142\u0105czeniu z bezpo\u015brednimi zapytaniami SQL przez warstw\u0119 abstrakcji <code>$wpdb<\/code> \u2013 zamiast tworzenia ci\u0119\u017ckich p\u0119tli <code>WP_Query<\/code> \u2013 pakiety danych mog\u0105 by\u0107 dostarczane w czasie poni\u017cej 50 milisekund.<\/p>\n<figure class=\"lw-diagram\">\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/tworzenie-wysokowydajnych-wlasnych-punktow-koncowych-rest-pl.png\" width=\"1120\" height=\"536\" alt=\"Diagram do artyku\u0142u: Podpi\u0119cie pod hak inicjalizacji REST API, Definicja punktu ko\u0144cowego i regu\u0142y walidacji, Programowanie wydajnego wywo\u0142ania PHP z\u2026 \u2026\"><figcaption>Przebieg z artyku\u0142u w 5 krokach: Podpi\u0119cie pod hak inicjalizacji REST API, Definicja punktu ko\u0144cowego i regu\u0142y walidacji, Programowanie wydajnego wywo\u0142ania PHP z\u2026, Implementacja asynchronicznego pobierania danych na\u2026 \u2026.<\/figcaption><\/figure>\n<h2>Instrukcja wdro\u017cenia krok po kroku<\/h2>\n<h3>Krok 1: Podpi\u0119cie pod hak inicjalizacji REST API<\/h3>\n<p>W\u0142asne punkty ko\u0144cowe REST musz\u0105 by\u0107 rejestrowane wy\u0142\u0105cznie w ramach akcji <code>rest_api_init<\/code>. Pr\u00f3ba rejestracji na wcze\u015bniejszym lub p\u00f3\u017aniejszym etapie \u0142adowania systemu WordPress wywo\u0142a b\u0142\u0119dy routingu lub odpowiedzi HTTP 404.<\/p>\n<p>Ka\u017cdy punkt ko\u0144cowy wymaga zdefiniowania unikalnej przestrzeni nazw (standardowo: <code>vendor\/v1<\/code>) oraz \u015bcie\u017cki zasobu.<\/p>\n<h3>Krok 2: Definicja punktu ko\u0144cowego i regu\u0142y walidacji<\/h3>\n<p>Procedura rejestracji wymaga wskazania obs\u0142ugiwanych metod HTTP (takich jak <code>GET<\/code> lub <code>POST<\/code>), wywo\u0142ania zwrotnego bezpiecze\u0144stwa (<code>permission_callback<\/code>) oraz zasad walidacji parametr\u00f3w (<code>validate_callback<\/code> i <code>sanitize_callback<\/code>).<\/p>\n<p>Rygorystyczna sanityzacja na poziomie API zapobiega atakom typu SQL Injection przez parametry jeszcze przed rozpocz\u0119ciem logiki przetwarzania danych; przed atakami Cross-Site Scripting (XSS) w danych wyj\u015bciowych nie chroni.<\/p>\n<h3>Krok 3: Programowanie wydajnego wywo\u0142ania PHP z bezpo\u015brednim SQL<\/h3>\n<p>W celu maksymalizacji wydajno\u015bci przy prostej ekstrakcji danych (np. pobieranie listy najnowszych log\u00f3w lub zdarze\u0144 niestandardowych), nale\u017cy wykorzysta\u0107 bezpo\u015brednie zapytania SQL przez <code>$wpdb-&gt;prepare()<\/code> zamiast obiekt\u00f3w <code>WP_Query<\/code>. Pozwala to unikn\u0105\u0107 obci\u0105\u017cenia narzucanego przez metadane i instancjonowanie kompletnych obiekt\u00f3w wpis\u00f3w.<\/p>\n<p>Poni\u017csza architektura produkcyjna rejestruje szybki punkt ko\u0144cowy pod adresem <code>\/wp-json\/lw-toolbox\/v1\/latest-logs<\/code>:<\/p>\n<pre><code>\/**\n * Architektura wysokowydajnego punktu ko\u0144cowego REST API\n * Cel: WordPress v7.0.2\n *\/\nadd_action( 'rest_api_init', 'lw_register_fast_rest_endpoint' );\n\nfunction lw_register_fast_rest_endpoint() {\n    register_rest_route(\n        'lw-toolbox\/v1',\n        '\/latest-logs',\n        array(\n            'methods'             =&gt; WP_REST_Server::READABLE, \/\/ Metoda GET\n            'callback'            =&gt; 'lw_get_fast_logs_callback',\n            'permission_callback' =&gt; 'lw_verify_rest_permission',\n            'args'                =&gt; array(\n                'limit' =&gt; array(\n                    'default'           =&gt; 10,\n                    'validate_callback' =&gt; function( $param ) {\n                        return is_numeric( $param ) &amp;&amp; $param &gt; 0 &amp;&amp; $param &lt;= 100;\n                    },\n                    'sanitize_callback' =&gt; 'absint',\n                ),\n            ),\n        )\n    );\n}\n\n\/**\n * Kontrola dost\u0119pu: Publiczny odczyt lub weryfikacja uprawnie\u0144\n *\/\nfunction lw_verify_rest_permission( WP_REST_Request $request ) {\n    \/\/ Zwr\u00f3cenie true dla publicznych API lub weryfikacja uprawnienia:\n    \/\/ return current_user_can( 'edit_posts' );\n    return true;\n}\n\n\/**\n * Lekkie wywo\u0142anie zwrotne (Callback) z bezpo\u015brednim wykonaniem SQL\n *\/\nfunction lw_get_fast_logs_callback( WP_REST_Request $request ) {\n    global $wpdb;\n\n    $limit = $request-&gt;get_param( 'limit' );\n    $table_name = $wpdb-&gt;prefix . 'posts';\n\n    \/\/ Bezpo\u015brednie zapytanie SQL bez obci\u0105\u017cenia WP_Query\n    $query = $wpdb-&gt;prepare(\n        \"SELECT ID, post_title, post_date_gmt \n         FROM {$table_name} \n         WHERE post_status = 'publish' AND post_type = 'post' \n         ORDER BY post_date_gmt DESC \n         LIMIT %d\",\n        $limit\n    );\n\n    $results = $wpdb-&gt;get_results( $query, ARRAY_A );\n\n    if ( empty( $results ) ) {\n        return new WP_REST_Response( array(), 200 );\n    }\n\n    \/\/ Ustawienie nag\u0142\u00f3wka pami\u0119ci podr\u0119cznej HTTP w przegl\u0105darce (60 sekund)\n    $response = new WP_REST_Response( $results, 200 );\n    $response-&gt;header( 'Cache-Control', 'public, max-age=60' );\n\n    return $response;\n}<\/code><\/pre>\n<h3>Krok 4: Implementacja asynchronicznego pobierania danych na froncie<\/h3>\n<p>W warstwie interfejsu u\u017cytkownika zapytania do nowego punktu ko\u0144cowego mog\u0105 by\u0107 realizowane asynchronicznie za pomoc\u0105 nowoczesnego j\u0119zyka JavaScript i API <code>fetch()<\/code> \u2013 bez potrzeby \u0142adowania biblioteki jQuery ani token\u00f3w nonce (dla publicznych API):<\/p>\n<pre><code>\/**\n * Asynchroniczny \u0142adowacz danych w interfejsie\n *\/\ndocument.addEventListener( 'DOMContentLoaded', () =&gt; {\n    const targetContainer = document.getElementById( 'lw-fast-data-box' );\n    if ( ! targetContainer ) return;\n\n    fetch( 'https:\/\/lukaswojcik.com\/wp-json\/lw-toolbox\/v1\/latest-logs?limit=5', {\n        method: 'GET',\n        headers: {\n            'Content-Type': 'application\/json'\n        }\n    } )\n    .then( response =&gt; {\n        if ( ! response.ok ) {\n            throw new Error( 'B\u0142\u0105d sieciowy odpowiedzi: ' + response.statusText );\n        }\n        return response.json();\n    } )\n    .then( data =&gt; {\n        targetContainer.innerHTML = '&lt;ul&gt;' + \n            data.map( item =&gt; `&lt;li&gt;&lt;strong&gt;${item.post_title}&lt;\/strong&gt; (${item.post_date_gmt})&lt;\/li&gt;` ).join( '' ) + \n            '&lt;\/ul&gt;';\n    } )\n    .catch( error =&gt; {\n        console.error( 'B\u0142\u0105d \u0142adowania REST API:', error );\n    } );\n} );<\/code><\/pre>\n<h3>Krok 5: Kontrola jako\u015bci i profilowanie op\u00f3\u017anie\u0144<\/h3>\n<p>W celu potwierdzenia optymalizacji wydajno\u015bciowej nale\u017cy zweryfikowa\u0107 punkt ko\u0144cowy za pomoc\u0105 narz\u0119dzi deweloperskich przegl\u0105darki:<\/p>\n<ol>\n<li><strong>Analiza wykresu kaskadowego (Network):<\/strong> Wykonanie zapytania do <code>\/wp-json\/lw-toolbox\/v1\/latest-logs<\/code> i potwierdzenie, \u017ce czas TTFB pozostaje poni\u017cej 60 ms.<\/li>\n<li><strong>Weryfikacja nag\u0142\u00f3wk\u00f3w cache:<\/strong> Sprawdzenie nag\u0142\u00f3wk\u00f3w odpowiedzi HTTP pod k\u0105tem obecno\u015bci warto\u015bci <code>Cache-Control: public, max-age=60<\/code>, umo\u017cliwiaj\u0105cej buforowanie w przegl\u0105darce i na serwerach proxy.<\/li>\n<li><strong>Testowanie parametr\u00f3w wej\u015bciowych:<\/strong> Przekazanie nieprawid\u0142owej warto\u015bci parametru (np. <code>?limit=999<\/code> lub ci\u0105gu liter) w celu sprawdzenia, czy serwer natychmiast odrzuca zapytanie z kodem HTTP <code>400 Bad Request<\/code> bez anga\u017cowania bazy danych.<\/li>\n<\/ol>\n<h2>Podsumowanie i mierzalna warto\u015b\u0107 dodana<\/h2>\n<p><strong>Co da si\u0119 osi\u0105gn\u0105\u0107 dzi\u0119ki instrukcji:<\/strong> Ca\u0142kowite zast\u0105pienie obci\u0105\u017caj\u0105cych skrypt\u00f3w <code>admin-ajax.php<\/code> oraz ci\u0119\u017ckich p\u0119tli <code>WP_Query<\/code> przez szybki, walidowany schematem punkt ko\u0144cowy REST JSON, oparty na bezpo\u015brednim wykonywaniu zapyta\u0144 SQL.<\/p>\n<p><strong>Wynikaj\u0105ca z tego warto\u015b\u0107 dodana:<\/strong><\/p>\n<ul>\n<li><strong>Drastyczna redukcja op\u00f3\u017anie\u0144:<\/strong> Wska\u017anik Time to First Byte (TTFB) spada o 60\u201380%, dostarczaj\u0105c odpowied\u017a w formacie JSON w kilkadziesi\u0105t milisekund zamiast p\u00f3\u0142 sekundy.<\/li>\n<li><strong>Minimalne zu\u017cycie zasob\u00f3w serwera:<\/strong> Omini\u0119cie \u0142adowania j\u0105dra administracyjnego WordPressa znacz\u0105co zmniejsza zu\u017cycie pami\u0119ci RAM i obci\u0105\u017cenie bazy danych na stronach o du\u017cym nat\u0119\u017ceniu ruchu.<\/li>\n<li><strong>Wbudowane bezpiecze\u0144stwo i walidacja:<\/strong> Natywna obs\u0142uga praw dost\u0119pu (<code>permission_callback<\/code>) oraz \u015bcis\u0142a sanityzacja parametr\u00f3w chroni\u0105 aplikacj\u0119 przed wstrzykiwaniem kodu SQL i nieautoryzowanym dost\u0119pem.<\/li>\n<\/ul>\n<div class=\"lw-faq\">\n<h2>Pytania i odpowiedzi<\/h2>\n<h3>Dlaczego current_user_can() w punkcie ko\u0144cowym zawodzi, cho\u0107 osoba jest zalogowana w przegl\u0105darce?<\/h3>\n<p>Bo przy \u017c\u0105daniach REST WordPress nie uznaje samego ciasteczka logowania. Je\u015bli \u017c\u0105danie przychodzi z ciasteczkiem, ale bez tokenu nonce, WordPress ustawia bie\u017c\u0105cego u\u017cytkownika na 0, czyli na niezalogowanego. Chroni to przed atakami Cross-Site Request Forgery: inaczej obca strona mog\u0142aby sk\u0142oni\u0107 przegl\u0105dark\u0119 do wysy\u0142ania \u017c\u0105da\u0144 do punktu ko\u0144cowego z ciasteczkiem zalogowanej osoby.<\/p>\n<p>Gdy zamiast <code>return true<\/code> zaczyna dzia\u0142a\u0107 sprawdzenie <code>current_user_can( 'edit_posts' )<\/code>, wywo\u0142anie na froncie potrzebuje wi\u0119c tokenu nonce dla akcji wp_rest. Powstaje on na serwerze przez <code>wp_create_nonce( 'wp_rest' )<\/code>, trafia do strony i jest wysy\u0142any w nag\u0142\u00f3wku X-WP-Nonce. Bez niego punkt ko\u0144cowy odpowiada kodem 401, a z wygas\u0142ym lub b\u0142\u0119dnym tokenem kodem 403.<\/p>\n<h3>Czy Cache-Control: public pasuje tak\u017ce do punktu ko\u0144cowego ze sprawdzaniem uprawnie\u0144?<\/h3>\n<p>Nie. public wprost pozwala tak\u017ce wsp\u00f3\u0142dzielonym pami\u0119ciom podr\u0119cznym, na przyk\u0142ad serwerowi proxy albo sieci CDN, zapisa\u0107 odpowied\u017a i przez 60 sekund wydawa\u0107 j\u0105 ka\u017cdemu, kto pobiera ten sam adres. Przy publicznej li\u015bcie opublikowanych wpis\u00f3w jest to zamierzone. Je\u015bli natomiast odpowied\u017a zale\u017cy od tego, kto pyta, nale\u017cy ustawi\u0107 <code>private<\/code> albo <code>no-store<\/code>, inaczej odpowied\u017a przeznaczona dla zalogowanej osoby mo\u017ce trafi\u0107 do innych.<\/p>\n<h3>Czy walidacja parametr\u00f3w chroni tak\u017ce przed XSS w danych wyj\u015bciowych?<\/h3>\n<p>Nie, sprawdza tylko to, co wchodzi do punktu ko\u0144cowego, tutaj parametr limit. Tytu\u0142y wpis\u00f3w pochodz\u0105 z bazy danych i przechodz\u0105 bez kontroli: przyk\u0142ad frontowy wstawia <code>post_title<\/code> do strony przez <code>innerHTML<\/code>, a tytu\u0142 zawieraj\u0105cy znaczniki HTML zostaje tam zinterpretowany jako znaczniki; atrybut w rodzaju onerror uruchamia wtedy skrypt. W pojedynczej instalacji WordPressa role z uprawnieniem unfiltered_html, na przyk\u0142ad administratorzy i redaktorzy, mog\u0105 umieszcza\u0107 znaczniki w tytu\u0142ach. Wystarczy wtedy jedno przej\u0119te konto redakcyjne, by wprowadzi\u0107 kod na ka\u017cd\u0105 stron\u0119 wy\u015bwietlaj\u0105c\u0105 t\u0119 list\u0119.<\/p>\n<p>Bezpieczniej jest budowa\u0107 elementy listy przez <code>document.createElement<\/code> i wstawia\u0107 tytu\u0142 przez <code>textContent<\/code>. Ka\u017cdy znak pojawia si\u0119 wtedy jako tekst, \u0142\u0105cznie z nawiasami ostrymi.<\/p>\n<h3>Czy punkt ko\u0144cowy REST omija tak\u017ce wtyczki i motyw?<\/h3>\n<p>Nie. \u017b\u0105danie do \/wp-json\/ przechodzi przez zwyk\u0142e uruchamianie WordPressa: \u0142adowane s\u0105 wszystkie aktywne wtyczki i plik functions.php motywu, a wszystko, co jest podpi\u0119te pod init, r\u00f3wnie\u017c si\u0119 wykonuje. Odpada tylko warstwa administracyjna, kt\u00f3r\u0105 admin-ajax.php \u0142aduje dodatkowo. Wtyczka wykonuj\u0105ca kosztown\u0105 prac\u0119 przy ka\u017cdym \u017c\u0105daniu spowalnia wi\u0119c punkt ko\u0144cowy tak samo jak ka\u017cd\u0105 inn\u0105 stron\u0119.<\/p>\n<\/div>\n<div class=\"lw-quellen\">\n<h2>\u0179r\u00f3d\u0142a<\/h2>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/rest-api\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress REST API handbook<\/a><\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Techniczny przewodnik po zast\u0119powaniu przestarza\u0142ego mechanizmu admin-ajax.php przez szybkie punkty ko\u0144cowe REST API z bezpo\u015brednim SQL w WordPressie v7.0.2.<\/p>\n","protected":false},"author":1,"featured_media":14066,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[92646],"tags":[92262,92280,92051,92238,92283,92286],"class_list":["post-514","post","type-post","status-publish","format-standard","hentry","category-tutorials-pl-wordpress-plugins-tricks-pl","tag-mysql-pl","tag-php-pl","tag-rest-api-pl","tag-tutorial-pl","tag-web-performance-pl","tag-wordpress-pl"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Tworzenie wysokowydajnych, w\u0142asnych punkt\u00f3w ko\u0144cowych REST API w WordPressie | Lukas Wojcik<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tworzenie-wysokowydajnych-wlasnych-punktow-koncowych-rest-api-w-wordpressie\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tworzenie wysokowydajnych, w\u0142asnych punkt\u00f3w ko\u0144cowych REST API w WordPressie | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"Techniczny przewodnik po zast\u0119powaniu przestarza\u0142ego mechanizmu admin-ajax.php przez szybkie punkty ko\u0144cowe REST API z bezpo\u015brednim SQL w WordPressie v7.0.2.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tworzenie-wysokowydajnych-wlasnych-punktow-koncowych-rest-api-w-wordpressie\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-29T18:30:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-514-tworzenie-wysokowydajnych-wlasnych-p-g.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Lukas Wojcik\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lukas Wojcik\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/tutorials-pl-wordpress-plugins-tricks-pl\\\/tworzenie-wysokowydajnych-wlasnych-punktow-koncowych-rest-api-w-wordpressie\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/tutorials-pl-wordpress-plugins-tricks-pl\\\/tworzenie-wysokowydajnych-wlasnych-punktow-koncowych-rest-api-w-wordpressie\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Tworzenie wysokowydajnych, w\u0142asnych punkt\u00f3w ko\u0144cowych REST API w WordPressie\",\"datePublished\":\"2026-09-29T18:30:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/tutorials-pl-wordpress-plugins-tricks-pl\\\/tworzenie-wysokowydajnych-wlasnych-punktow-koncowych-rest-api-w-wordpressie\\\/\"},\"wordCount\":1079,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/tutorials-pl-wordpress-plugins-tricks-pl\\\/tworzenie-wysokowydajnych-wlasnych-punktow-koncowych-rest-api-w-wordpressie\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-514-tworzenie-wysokowydajnych-wlasnych-p-g.png\",\"keywords\":[\"MySQL\",\"PHP\",\"REST API\",\"Tutorial\",\"Web Performance\",\"WordPress\"],\"articleSection\":[\"Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/tutorials-pl-wordpress-plugins-tricks-pl\\\/tworzenie-wysokowydajnych-wlasnych-punktow-koncowych-rest-api-w-wordpressie\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/tutorials-pl-wordpress-plugins-tricks-pl\\\/tworzenie-wysokowydajnych-wlasnych-punktow-koncowych-rest-api-w-wordpressie\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/tutorials-pl-wordpress-plugins-tricks-pl\\\/tworzenie-wysokowydajnych-wlasnych-punktow-koncowych-rest-api-w-wordpressie\\\/\",\"name\":\"Tworzenie wysokowydajnych, w\u0142asnych punkt\u00f3w ko\u0144cowych REST API w WordPressie | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/tutorials-pl-wordpress-plugins-tricks-pl\\\/tworzenie-wysokowydajnych-wlasnych-punktow-koncowych-rest-api-w-wordpressie\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/tutorials-pl-wordpress-plugins-tricks-pl\\\/tworzenie-wysokowydajnych-wlasnych-punktow-koncowych-rest-api-w-wordpressie\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-514-tworzenie-wysokowydajnych-wlasnych-p-g.png\",\"datePublished\":\"2026-09-29T18:30:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/tutorials-pl-wordpress-plugins-tricks-pl\\\/tworzenie-wysokowydajnych-wlasnych-punktow-koncowych-rest-api-w-wordpressie\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/tutorials-pl-wordpress-plugins-tricks-pl\\\/tworzenie-wysokowydajnych-wlasnych-punktow-koncowych-rest-api-w-wordpressie\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/tutorials-pl-wordpress-plugins-tricks-pl\\\/tworzenie-wysokowydajnych-wlasnych-punktow-koncowych-rest-api-w-wordpressie\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-514-tworzenie-wysokowydajnych-wlasnych-p-g.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-514-tworzenie-wysokowydajnych-wlasnych-p-g.png\",\"width\":1200,\"height\":630,\"caption\":\"Tworzenie wysokowydajnych, w\u0142asnych punkt\u00f3w ko\u0144cowych REST API w WordPressie\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/tutorials-pl-wordpress-plugins-tricks-pl\\\/tworzenie-wysokowydajnych-wlasnych-punktow-koncowych-rest-api-w-wordpressie\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tworzenie wysokowydajnych, w\u0142asnych punkt\u00f3w ko\u0144cowych REST API w WordPressie\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Tworzenie wysokowydajnych, w\u0142asnych punkt\u00f3w ko\u0144cowych REST API w WordPressie | Lukas Wojcik","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tworzenie-wysokowydajnych-wlasnych-punktow-koncowych-rest-api-w-wordpressie\/","og_locale":"en_US","og_type":"article","og_title":"Tworzenie wysokowydajnych, w\u0142asnych punkt\u00f3w ko\u0144cowych REST API w WordPressie | Lukas Wojcik","og_description":"Techniczny przewodnik po zast\u0119powaniu przestarza\u0142ego mechanizmu admin-ajax.php przez szybkie punkty ko\u0144cowe REST API z bezpo\u015brednim SQL w WordPressie v7.0.2.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tworzenie-wysokowydajnych-wlasnych-punktow-koncowych-rest-api-w-wordpressie\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-09-29T18:30:00+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-514-tworzenie-wysokowydajnych-wlasnych-p-g.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tworzenie-wysokowydajnych-wlasnych-punktow-koncowych-rest-api-w-wordpressie\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tworzenie-wysokowydajnych-wlasnych-punktow-koncowych-rest-api-w-wordpressie\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Tworzenie wysokowydajnych, w\u0142asnych punkt\u00f3w ko\u0144cowych REST API w WordPressie","datePublished":"2026-09-29T18:30:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tworzenie-wysokowydajnych-wlasnych-punktow-koncowych-rest-api-w-wordpressie\/"},"wordCount":1079,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tworzenie-wysokowydajnych-wlasnych-punktow-koncowych-rest-api-w-wordpressie\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-514-tworzenie-wysokowydajnych-wlasnych-p-g.png","keywords":["MySQL","PHP","REST API","Tutorial","Web Performance","WordPress"],"articleSection":["Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tworzenie-wysokowydajnych-wlasnych-punktow-koncowych-rest-api-w-wordpressie\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tworzenie-wysokowydajnych-wlasnych-punktow-koncowych-rest-api-w-wordpressie\/","url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tworzenie-wysokowydajnych-wlasnych-punktow-koncowych-rest-api-w-wordpressie\/","name":"Tworzenie wysokowydajnych, w\u0142asnych punkt\u00f3w ko\u0144cowych REST API w WordPressie | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tworzenie-wysokowydajnych-wlasnych-punktow-koncowych-rest-api-w-wordpressie\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tworzenie-wysokowydajnych-wlasnych-punktow-koncowych-rest-api-w-wordpressie\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-514-tworzenie-wysokowydajnych-wlasnych-p-g.png","datePublished":"2026-09-29T18:30:00+00:00","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tworzenie-wysokowydajnych-wlasnych-punktow-koncowych-rest-api-w-wordpressie\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tworzenie-wysokowydajnych-wlasnych-punktow-koncowych-rest-api-w-wordpressie\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tworzenie-wysokowydajnych-wlasnych-punktow-koncowych-rest-api-w-wordpressie\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-514-tworzenie-wysokowydajnych-wlasnych-p-g.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-514-tworzenie-wysokowydajnych-wlasnych-p-g.png","width":1200,"height":630,"caption":"Tworzenie wysokowydajnych, w\u0142asnych punkt\u00f3w ko\u0144cowych REST API w WordPressie"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tworzenie-wysokowydajnych-wlasnych-punktow-koncowych-rest-api-w-wordpressie\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Tworzenie wysokowydajnych, w\u0142asnych punkt\u00f3w ko\u0144cowych REST API w WordPressie"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/514","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=514"}],"version-history":[{"count":5,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/514\/revisions"}],"predecessor-version":[{"id":20849,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/514\/revisions\/20849"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/14066"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=514"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=514"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=514"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}