Mam niestandardowy typ postu, do którego chcę uzyskać dostęp za pośrednictwem jQuery - najlepiej za pomocą JSON.
Najpierw najważniejsze. utworzenie funkcji zwracającej / echos json jest dość łatwe, ale jak mam uzyskać do niej dostęp za pomocą jquery.
jak pisze Mike w tym pytaniu , on - o ile rozumiem - umieszcza je w katalogu głównym wordpress. co uczyniłoby go dostępnym przy użyciu nazwy pliku php - ale czy jest to godne polecenia? Wolę umieścić go w folderze wtyczek.
Próbowałem odczytać kodeks wordpress, ale sposób, w jaki obsługiwane są wywołania ajax, tylko mnie dezorientuje, ponieważ publikujesz każde wywołanie ajax do admin-ajax.php, nawet jeśli nie jest to strona administratora?
Czy ktoś może rozwiązać problemy, które mam?
/Burza
edytować
Problem, jaki miałem, polegał na zrozumieniu, w jaki sposób należy wywoływać ajax w Wordpress, a także gdzie umieścić kod php i js, aby wykonać / obsłużyć wywołania.
W drugim pytaniu, z którym się łączyłem, utworzyłeś funkcję umieszczającą plik w katalogu głównym wp - nie chcę tego robić. Ale nauczyłem się teraz, jak korzystać z wp_ajax_ (nopriv _) [akcja] i mogę skutecznie uzyskiwać dostęp do stworzonego przeze mnie json. Pozostaje problem: gdzie należy umieścić JS, aby wykonać połączenie. Chcę umieścić go w pliku js wtyczek, ale ponieważ ma to być prezentowane na stronie, a nie na stronie administratora, ajaxurl nie jest zdefiniowany, więc muszę echo za pomocą php.
echo admin_url('admin-ajax.php');
Powstaje więc pytanie, jak powinienem połączyć ten php z javascript i jak mam go kolejkować, ponieważ nie jest to plik ani skrypt.
Odpowiedzi:
Ajax Handler
To trochę mylące, że moduł obsługi Ajax znajduje się w
wp-admin/
katalogu, ale tak, możesz i powinieneś używać go również do żądań innych niż admin. Następnie zarejestrujesz moduł obsługi dlawp_ajax_nopriv_[action]
haka zamiast normalnegowp_ajax_[action]
. W takim przypadku wystarczy postępować zgodnie z pierwszymi wierszamiadmin-ajax.php
, ponieważ żądanie wykonane przez niezalogowanego użytkownika opuści stronę około linii 50.Więc przypisać funkcję na haku
wp_ajax_nopriv_get_custom_post_data
, a zostanie on nazywany jeśli poprosićadmin-ajax.php
oaction
zestaw parametrówget_custom_post_data
. Pamiętaj, aby zadzwonićdie()
na końcu przewodnika, w przeciwnym raziedie(-1)
zostanie przywrócone ustawienie domyślne . Zarejestruj także zalogowaną wersjęwp_ajax_get_custom_post_data
(do tej samej funkcji obsługi, nie ma problemu), ponieważ jeśli jesteś zalogowany na swojej stronie, nie uderzysz wnopriv
hak.Konfiguracja po stronie serwera do Javascript
Sztuką jest wysyłanie danych konfiguracyjnych po stronie serwera (takich jak
admin-ajax.php
adres URL)wp_localize_script()
. Przekazujesz mu tablicę kluczy i wartości, które znajdą się na górze strony. Prawdopodobnie został on pierwotnie stworzony tylko dla ciągów lokalizowalnych, ale można go również użyć do przekazania danych konfiguracyjnych.storm_json_config
to nazwa uchwytu (jeśli chcesz ją później usunąć z kolejki),storm_config
to nazwa obiektu JavaScript, który będzie zawierał twoje dane. Twój statyczny plik JavaScript może zawierać wiersz podobny do tegojQuery.post(storm_config.ajaxurl, ...)
.Zobacz także odpowiedź Bueltge na podobne pytanie .
Statyczny Javascript z wtyczki reż
Aby załadować statyczny plik JavaScript z własnego katalogu wtyczek, użyj
wp_enqueue_script()
. To by wyglądało mniej więcej tak:Gdzie
storm_json
znowu jest nazwa uchwytu, wtedy podajesz link do pliku, następnie zależności (mogą byćnull
), a następnie numer wersji, który zostanie dodany po żądaniu pobicia pamięci podręcznej przeglądarki przy aktualizacjach.źródło
wp_localize_script()
której możesz wysyłać dane konfiguracyjne ze strony serwera do przeglądarki. (Mała wskazówka: jeśli dodasz@
do nazwy użytkownika, osoba ta otrzyma powiadomienie o Twojej odpowiedzi.@Mike: I updated the title
Upewnij się, że zobaczy Twój komentarz)