Uwielbiam admin-ajax.php. Ale nienawidzę konieczności lokalizowania w celu wskazywania skryptów frontendowych i żałuję, że nie ma równoważnego, łatwego do znalezienia pliku dla motywów. (Niepokoi mnie to również, że żądania frontendu przechodzą przez „/ wp-admin /”. Bez praktycznego powodu, po prostu wygląda brzydko IMO.)
Więc po prostu skopiowałem admin-ajax.php do katalogu głównego w "/ajax.php", poprawiłem ścieżki dołączania i usunąłem stałą definicję WP_ADMIN. Wygląda na to, że działa jak gangbustery (mogę teraz po prostu skierować wszystkie moje żądania AJAX frontendu do /ajax.php! I nadal mogę używać normalnych haków wp_ajax w moich wtyczkach!).
Ale czy to bezpieczne? Co może pójść nie tak? Ponieważ nie jest to wbudowane w rdzeń, zakładam, że istnieje dobry powód, dlaczego nie. Ale przeglądając kod, nie widzę żadnych bezpośrednich problemów.
Jesteś sprytny - powiedz mi, czy to podejście jest szalone. Lub jeśli istnieje prostsza metoda, którą przeoczam.
Odpowiedzi:
Możesz po prostu użyć RewriteRule do swojego .htaccess powyżej zwykłych reguł przepisywania bezpośredniego linku:
Teraz wysyłaj żądania AJAX
example.com/ajax
i nigdy nie przegap podstawowych zmian w tym pliku po uaktualnieniach.źródło
example.com/ajax
adres URL 404. Czy mógłbyś wyjaśnić, gdzie dokładnie.htaccess
powinienem to dodać? Mam w tej chwili między# BEGIN WordPress <IfModule mod_rewrite.c>
i</IfModule> # END WordPress
Po pierwsze: normalizacja. Jeśli planujesz używać wtyczek społecznościowych, prawdopodobnie nie będą one troszczyć się o ciebie
/ajax.php
plikiem w katalogu głównym dokumentu. Więc nie będą go używać.Jeśli masz zamiar rzucić wszystko sam, to nie jest problem.
Po drugie: co jeśli podstawowe aktualizacje? Czy będziesz monitorować i zmieniać plik ajax?
Po trzecie : pomimo
admin-ajax.php
przebywania wwp-admin
nim, nie ładuje żadnych elementów obszaru administracyjnego (np. Tabel list itp.). Nie sprawdza też autoryzacji ani nie ujawnia niczego wrażliwego na niezalogowanych użytkowników. Innymi słowy, to tak jak plik frontonu. Nie ma się o co martwić.Po czwarte: W związku z pierwszym problemem niektóre wtyczki sprawdzą przed ślepym załadowaniem funkcji powiązanych z ajaxem. Przykład jest poniżej. Zmodyfikowany ajax.php prawdopodobnie nie spowoduje załadowania.
Wreszcie: na co narzekasz, warto skorzystać z lokalizacji w celu uzyskania adresu URL Ajax. Dlaczego? Ponieważ Twoje pliki JS nie są świadome żadnych rzeczy po stronie serwera. Będziesz miał trudny URL, który się zepsuje, jeśli / kiedy strona się poruszy? Wygląda na zły wybór.
Jeśli naprawdę nie chcesz lokalizować każdego skryptu korzystającego z Ajax, po prostu podpisz się
wp_head
bardzo wcześnie i wypluj adres URL administratora aukcji. Problem rozwiązany (tak przy okazji, właśnie tak robi to admin).źródło
Podobnie jak w przypadku wielu rzeczy w WordPress, istnieje prawie nieskończona liczba sposobów na skórowanie kota. Podczas gdy wszystkie zaakceptowane metody działają, okazało się, że są mniej „schludne” niż użycie wp_localize_script do włączenia funkcji ajax na interfejsie.
Sprawdź to:
A następnie w
se83650.js
pliku odwołujesz się do swojej zmiennejse83650Ajax.ajaxurl
.Zaletą tej techniki jest to, że jeśli skończysz z wieloma wtyczkami, które próbują powielić tę funkcjonalność, nie zawierają one ani nie zastępują tej samej zmiennej.
ajaxurl
jest dość ogólny do włączenia, dzięki czemu jesteś bardziej opanowany i gra lepiej z innymi programistami.źródło