Przejdź do treści
WordPress wp_localize_script - jak przekazać dane do JavaScriptu

WordPress wp_localize_script - jak przekazać dane do JavaScriptu

Opublikowano: 18 października 2026| Zaktualizowano: 18 października 2026

Gdy skrypt motywu lub wtyczki nie widzi danych z PHP, przyczyną może być uchwyt, warunek ładowania albo rozbieżna nazwa obiektu. Dobór funkcji zależy od rodzaju danych, a żądania AJAX wymagają dodatkowo kontroli nonce, parametrów i uprawnień.

Krótka odpowiedź

`wp_localize_script()` tworzy obiekt JavaScript z tablicy PHP dla wcześniej zarejestrowanego skryptu i służy przede wszystkim do lokalizowanych tekstów. Ogólną konfigurację, taką jak URL AJAX i nonce, przekazuj przez `wp_add_inline_script()`.

Nonce nie zastępuje walidacji danych ani kontroli uprawnień do konkretnego wpisu.

Usługi KC Mobile

Potrzebujesz pomocy w tym temacie?

Czytasz poradnik „WordPress wp_localize_script - jak przekazać dane do JavaScriptu”. Napisz, co chcesz zrobić i na jakim etapie jesteś. Ustalimy, czy możemy pomóc i jaki zakres prac będzie potrzebny.

Do czego służy wp_localize_script?

`wp_localize_script()` tworzy obiekt JavaScript z danych PHP i przypisuje go do zarejestrowanego skryptu. Funkcja zwraca `true`, gdy lokalizacja się powiedzie, albo `false`, gdy się nie powiedzie; `undefined` może natomiast oznaczać, że kod JavaScript odwołuje się do obiektu, którego nie wypisano lub używa innej nazwy.

Podstawowym zastosowaniem funkcji są tłumaczone teksty interfejsu, takie jak komunikaty walidacji czy etykiety. Pobieraj je przez funkcje tłumaczeń WordPressa z domeną motywu lub wtyczki.

Do ogólnej konfiguracji, na przykład adresu endpointu albo ustawień widoku, użyj `wp_add_inline_script()`. Nazwa obiektu lokalizowanego powinna być unikalna, poprawnym identyfikatorem JavaScript i bez dywizu, na przykład `kcNoticeText`.

Czytasz poradnik „WordPress wp_localize_script - jak przekazać dane do JavaScriptu”. Napisz, co chcesz zrobić i na jakim etapie jesteś. Ustalimy, czy możemy pomóc i jaki zakres prac będzie potrzebny. Omów temat tego poradnika

Jak poprawnie zarejestrować i załadować skrypt?

Najpierw zarejestruj skrypt, dodaj go do kolejki, a następnie wywołaj `wp_localize_script()` z tym samym uchwytem. Dokumentacja WordPressa potwierdza, że funkcja lokalizująca działa tylko dla wcześniej zarejestrowanego skryptu.

add_action( 'wp_enqueue_scripts', 'kc_enqueue_notice_assets' );

function kc_enqueue_notice_assets() {
    $handle = 'kc-notice';

    wp_register_script(
        $handle,
        get_stylesheet_directory_uri() . '/assets/js/notice.js',
        array(),
        '1.0.0',
        true
    );

    wp_enqueue_script( $handle );

    wp_localize_script(
        $handle,
        'kcNoticeText',
        array(
            'saved' => __( 'Zmiany zapisane', 'kc-theme' ),
        )
    );
}

`wp_register_script()` definiuje plik i zależności, a `wp_enqueue_script()` dodaje go do kolejki. Można też użyć samego `wp_enqueue_script()` z adresem pliku, ponieważ ta funkcja może zarejestrować i zakolejkować skrypt w jednym wywołaniu.

Uchwyt przekazany do lokalizacji musi odpowiadać uchwytowi skryptu. Zasoby frontendu zwykle dodajemy w `wp_enqueue_scripts`, a zasoby panelu administracyjnego w `admin_enqueue_scripts`. Skrypt ładowany w stopce wymaga, by motyw wywoływał `wp_footer()`.

Jaki jest minimalny przykład wp_localize_script?

Minimalny przykład PHP rejestruje i ładuje plik, a następnie tworzy obiekt, którego nazwy używa JavaScript. W motywie potomnym umieść callback w `functions.php`, a wtyczce przypisz własny adres pliku przez `plugins_url()`.

add_action( 'wp_enqueue_scripts', 'kc_enqueue_notice_script' );

function kc_enqueue_notice_script() {
    $handle = 'kc-notice';

    wp_enqueue_script(
        $handle,
        get_stylesheet_directory_uri() . '/assets/js/notice.js',
        array(),
        '1.0.0',
        true
    );

    wp_localize_script(
        $handle,
        'kcNoticeText',
        array(
            'saved' => __( 'Zmiany zapisane', 'kc-theme' ),
        )
    );
}
const notice = document.querySelector('[data-save-notice]');

if (notice && window.kcNoticeText) {
    notice.textContent = window.kcNoticeText.saved;
}

PHP tworzy obiekt `kcNoticeText`, a JavaScript odczytuje go pod tą samą nazwą. Przetestuj zmianę na kopii witryny; konfiguracja Local WP pozwala sprawdzić motyw lub wtyczkę przed wdrożeniem. Jeśli prace obejmują rozwój motywu albo funkcji witryny, strony firmowe oparte na WordPressie mogą być właściwym zakresem wsparcia.

Jak przekazywać nonce, adres AJAX i teksty?

Przekazuj adres AJAX i nonce jako konfigurację przez `wp_add_inline_script()`, a tłumaczone komunikaty przez `wp_localize_script()`. Nonce to wartość WordPressa używana do weryfikacji żądania; nie przyznaje użytkownikowi uprawnienia do edycji wpisu.

add_action( 'wp_enqueue_scripts', 'kc_enqueue_save_script' );

function kc_enqueue_save_script() {
    $handle = 'kc-save';

    wp_enqueue_script(
        $handle,
        plugins_url( 'assets/js/save.js', __FILE__ ),
        array(),
        '1.0.0',
        true
    );

    $config = array(
        'ajaxUrl' => admin_url( 'admin-ajax.php' ),
        'nonce'   => wp_create_nonce( 'kc_save_item' ),
    );

    wp_add_inline_script(
        $handle,
        'window.kcSaveConfig = ' . wp_json_encode( $config ) . ';',
        'before'
    );

    wp_localize_script(
        $handle,
        'kcSaveText',
        array(
            'error' => __( 'Nie udało się zapisać zmian', 'kc-plugin' ),
        )
    );
}

add_action( 'wp_ajax_kc_save_item', 'kc_save_item' );

function kc_save_item() {
    check_ajax_referer( 'kc_save_item', 'nonce' );

    $item_id = isset( $_POST['item_id'] )
        ? absint( wp_unslash( $_POST['item_id'] ) )
        : 0;

    if ( ! $item_id || ! get_post( $item_id ) ) {
        wp_send_json_error( array( 'message' => 'Nieprawidłowy identyfikator' ), 400 );
    }

    if ( ! current_user_can( 'edit_post', $item_id ) ) {
        wp_send_json_error( array( 'message' => 'Brak uprawnień do edycji wpisu' ), 403 );
    }

    // W tym miejscu dodaj walidację wartości i właściwy zapis pola.
    wp_send_json_success( array( 'itemId' => $item_id ) );
}

Identyfikator wpisu jest najpierw oczyszczany i sprawdzany pod kątem istnienia, a dopiero potem WordPress sprawdza uprawnienie obiektowe `edit_post` dla tego rekordu. Kontrola `current_user_can( 'edit_posts' )` sprawdzałaby ogólną zdolność edycji wpisów, nie dostęp do wskazanego obiektu.

Powyższy callback nie zapisuje pola, ponieważ trzeba dopasować operację do konkretnego typu danych i wymagań wtyczki. Przykład żądania musi przekazać identyfikator i nonce:

fetch(window.kcSaveConfig.ajaxUrl, {
    method: 'POST',
    credentials: 'same-origin',
    headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' },
    body: new URLSearchParams({
        action: 'kc_save_item',
        nonce: window.kcSaveConfig.nonce,
        item_id: '123'
    })
});

`check_ajax_referer()` weryfikuje nonce, ale nie zastępuje sprawdzenia uprawnień ani walidacji treści. Nie przekazuj sekretów API do przeglądarki, ponieważ odwiedzający może odczytać wartości wysłane w HTML i JavaScript.

Kiedy lepsze jest wp_add_inline_script?

`wp_add_inline_script()` lepiej pasuje do ogólnej konfiguracji JavaScript, a `wp_localize_script()` do tłumaczonych tekstów. Funkcja inline dołącza kod przed wskazanym skryptem (`before`) albo po nim (`after`).

Wybór sposobu przekazania danych do JavaScriptu w WordPressie
MetodaRodzaj danychWarunekTypowe zastosowanie
`wp_localize_script()`Teksty do tłumaczeniaSkrypt musi być zarejestrowanyEtykiety i komunikaty
`wp_add_inline_script()`Konfiguracja w formie koduSkrypt musi być dodany do kolejkiURL endpointu i nonce
Atrybuty `data-*`Dane pojedynczego elementuElement musi istnieć w DOMID wpisu lub ustawienie komponentu
$config = array(
    'endpoint' => rest_url( 'kc/v1/search' ),
    'limit'    => 8,
);

wp_add_inline_script(
    'kc-search',
    'window.kcSearchConfig = ' . wp_json_encode( $config ) . ';',
    'before'
);

Kod zadziała, jeśli `kc-search` został wcześniej zarejestrowany i dodany do kolejki. Atrybuty `data-*` są wygodne dla ustawienia przypisanego do jednego elementu, lecz nie umieszczaj w nich haseł ani prywatnych kluczy.

Jak bezpiecznie przekazywać wartości z PHP?

Wartości wysłane do przeglądarki są dostępne dla użytkownika, więc przekazuj tylko dane potrzebne na danym widoku. Nie wysyłaj haseł, prywatnych kluczy API ani informacji, których odbiorca nie powinien zobaczyć.

Waliduj format i zakres danych wejściowych przed użyciem ich w operacji. Przy wypisywaniu do HTML dobieraj escaping do kontekstu, na przykład `esc_attr()` dla atrybutu i `esc_html()` dla treści, a tablice konfiguracji koduj przez `wp_json_encode()`.

Endpoint zmieniający dane powinien sprawdzać nonce, uprawnienie użytkownika do konkretnego obiektu i poprawność parametrów. Nonce ogranicza ryzyko sfałszowania żądania, ale nie jest mechanizmem autoryzacji.

Dlaczego obiekt z wp_localize_script nie pojawia się na stronie?

Brak obiektu JavaScript zwykle oznacza, że WordPress nie wypisał lokalizacji albo kod odwołuje się do innej nazwy. W narzędziach deweloperskich wyszukaj nazwę obiektu w panelu Elements, sprawdź `typeof window.kcNoticeText` w Console i potwierdź odpowiedź 200 dla pliku w Network.

Objawy braku danych JavaScript i pierwsze miejsca diagnostyki
ObjawPrawdopodobna przyczynaPierwszy test
`kcNoticeText is not defined`Obiektu nie wypisano lub użyto innej nazwyWyszukaj nazwę w HTML i porównaj wielkość liter
Obiekt działa tylko na części stronWarunek enqueue pomija widokSprawdź `wp_enqueue_scripts` i warunki strony
Brak konfiguracji inlineSkrypt nie jest w kolejce lub uchwyt się różniPorównaj uchwyty enqueue i inline
AJAX zwraca `-1` lub 403Błędny nonce albo brak uprawnieńSprawdź payload Network i callback PHP
Po wdrożeniu pojawia się stara wartośćCache przechowuje starszy HTML lub JSWyczyść cache i sprawdź wersję assetu
Brakuje skryptu w stopceMotyw nie wywołuje `wp_footer()`Sprawdź szablon stopki i hooki

Tabela wskazuje kolejność pierwszej diagnostyki: od nazwy obiektu i kolejki skryptów do cache oraz callbacku AJAX. Funkcja `wp_localize_script()` zwraca `true` lub `false`, nie wartość `undefined`; dokumentacja WordPressa potwierdza też wymóg wcześniejszej rejestracji skryptu.

Jeśli problem występuje wyłącznie na środowisku lokalnym, porównaj warunki ładowania i konfigurację hosta. Przygotowanie testowego środowiska opisuje poradnik o WordPress localhost, Local i wp-env.

Jak uniknąć konfliktów i utrzymać kod?

Używaj unikalnych prefiksów zarówno dla uchwytów skryptów, jak i obiektów JavaScript, na przykład `kc-save` i `kcSaveConfig`. Unikaj ogólnych nazw typu `data`, które łatwo kolidują z kodem innych wtyczek.

Zbuduj jeden obiekt konfiguracji zamiast wielokrotnie lokalizować ten sam uchwyt i nazwę. Przy wielu komponentach przypisz ustawienia do właściwych elementów DOM albo utwórz nazwane obiekty dla odrębnych skryptów.

Po zmianie WordPressa, motywu lub wtyczki sprawdź docelowy widok, obiekt w konsoli, odpowiedź endpointu i uprawnienia do edytowanego wpisu. Jeśli błąd dotyczy działającego motywu lub wtyczki, wsparcie przy stronach WordPress może obejmować diagnostykę i naprawę.

Perspektywa KC Mobile

Z naszych wdrożeń wynika, że błąd `undefined` często wiąże się z różnicą między uchwytem użytym przy enqueue a tym przekazanym do lokalizacji albo z warunkiem, który ładuje plik tylko na wybranych widokach. Dlatego diagnozujemy konkretny HTML, kolejkę WordPressa i callback PHP, zamiast zakładać, że sam plik na serwerze jest już dostępny w przeglądarce.

Jeśli potrzebujesz wykonawcy do pracy nad motywem lub funkcją, rozwój stron firmowych w WordPressie obejmuje wdrożenia i poprawki dopasowane do działania witryny.

Więcej poradników w tym temacie

Wspomniane narzędzia

WordPresswp_localize_scriptwp_register_scriptwp_enqueue_scriptwp_add_inline_scriptwp_json_encodeJavaScriptChrome DevToolsLocal WPwp-env

Najczęściej zadawane pytania

Jak sprawdzić, czy WordPress wypisał obiekt JavaScript?
Otwórz DevTools, wyszukaj nazwę obiektu w panelu Elements, a w Console sprawdź `typeof window.nazwaObiektu`. Jeśli wynik to `undefined`, porównaj nazwę w PHP i JavaScripcie oraz sprawdź, czy skrypt jest zarejestrowany i ładowany na tym widoku.
Dlaczego obiekt JavaScript z wp_localize_script nie pojawia się na stronie?
WordPress może nie wypisać obiektu, jeśli skrypt nie został wcześniej zarejestrowany, callback nie wykonał się na danym widoku albo uchwyt jest inny. Funkcja PHP zwraca `true` lub `false`, natomiast `undefined` zwykle dotyczy brakującego obiektu w JavaScripcie.
Czy wp_localize_script służy tylko do tłumaczeń?
WordPress wskazuje lokalizację tekstów jako podstawowe zastosowanie funkcji. Ogólną konfigurację, taką jak URL endpointu lub nonce, przekazuj przez `wp_add_inline_script()`.
Jak przekazać nonce do JavaScriptu w WordPressie?
Utwórz nonce dla konkretnej akcji i przekaż go w konfiguracji do skryptu. Po stronie PHP zweryfikuj go przez `check_ajax_referer()`, a następnie sprawdź uprawnienia użytkownika do konkretnego rekordu.
Czy current_user_can( 'edit_posts' ) wystarcza do edycji wskazanego wpisu?
Nie, to ogólna zdolność edycji wpisów. Po walidacji identyfikatora sprawdź uprawnienie obiektowe przez `current_user_can( 'edit_post', $item_id )`.
#WordPress#wp_localize_script#JavaScript#PHP#AJAX#wp_add_inline_script#nonce#bezpieczeństwo WordPress
Zdjęcie autora: Krzysztof Czapnik
O autorze

Krzysztof Czapnik

Founder & Technical Lead, KC Mobile

Projektuję i rozwijam strony WordPress, sklepy WooCommerce oraz aplikacje internetowe. Łączę projektowanie z programowaniem, integracjami i technicznym SEO. Projekty KC Mobile prowadzę osobiście.

Potrzebujesz pomocy z tym tematem? Napisz - odpowiem osobiście w 24h.

Potrzebujesz pomocy w tym temacie?

Czytasz poradnik „WordPress wp_localize_script - jak przekazać dane do JavaScriptu”. Napisz, co chcesz zrobić i na jakim etapie jesteś. Ustalimy, czy możemy pomóc i jaki zakres prac będzie potrzebny.