Saya suka admin-ajax.php. Tapi saya benci harus melokalkan untuk menunjuk skrip frontend ke sana, dan saya berharap ada file yang setara, mudah ditemukan untuk tema. (Ini juga hanya mengganggu saya untuk melihat permintaan frontend melalui "/ wp-admin /". Tidak ada alasan praktis, hanya terlihat jelek IMO.)
Jadi saya cukup menyalin admin-ajax.php ke direktori root di "/ajax.php", menyesuaikan path include dan menghapus definisi konstan WP_ADMIN. Tampaknya bekerja seperti gangbusters (sekarang saya bisa mengarahkan semua permintaan AJAX frontend saya ke /ajax.php! Dan saya masih bisa menggunakan kait wp_ajax normal di plugin saya!).
Tetapi apakah ini aman? Apa yang salah? Karena ini tidak dibangun ke dalam inti, saya berasumsi ada alasan bagus mengapa tidak. Tetapi melihat melalui kode, saya tidak dapat melihat masalah langsung
Anda cerdas - beri tahu saya jika pendekatan ini gila. Atau jika ada metode sederhana yang saya abaikan.
Jawaban:
Anda bisa menggunakan RewriteRule untuk .htaccess Anda di atas aturan penulisan ulang permalink biasa:
Sekarang kirim permintaan AJAX Anda ke
example.com/ajax
, dan jangan pernah melewatkan perubahan inti pada file itu setelah peningkatan.sumber
example.com/ajax
URL 404. Bisakah Anda menguraikan di mana tepatnya dalam.htaccess
harus saya tambahkan ini. Saya memilikinya saat ini antara# BEGIN WordPress <IfModule mod_rewrite.c>
dan</IfModule> # END WordPress
Pertama: standardisasi. Jika Anda berencana menggunakan plugin komunitas, kemungkinan mereka tidak akan peduli dengan
/ajax.php
file Anda di root dokumen. Jadi mereka tidak akan menggunakannya.Jika Anda akan memutar semuanya sendiri, ini bukan masalah.
Kedua: bagaimana jika pembaruan inti? Apakah Anda akan memantau dan mengubah file ajax Anda?
Ketiga : meskipun
admin-ajax.php
berada diwp-admin
dalamnya, ia tidak memuat apa pun dari area admin (mis. Tabel daftar, dll). Juga tidak memeriksa auth atau mengekspos sesuatu yang sensitif terhadap pengguna yang tidak login. Dengan kata lain, ini seperti file front-end. Tidak ada yang perlu dikhawatirkan.Keempat: Terkait dengan masalah pertama, beberapa plugin akan memeriksa sebelum memuat fungsi terkait ajax secara membabi buta. Contohnya di bawah ini. Ajax.php Anda yang dimodifikasi kemungkinan tidak akan menyebabkannya dimuat.
Akhirnya: Apa yang Anda keluhkan, menggunakan pelokalan untuk mendapatkan URL Ajax adalah hal yang baik untuk dilakukan. Mengapa? Karena file JS Anda tidak mengetahui adanya hal-hal sisi server. Anda akan menyulitkan URL yang akan rusak jika / ketika situs bergerak? Sepertinya ini pilihan yang buruk.
Jika Anda benar-benar tidak ingin melokalisasi setiap skrip yang menggunakan Ajax, kaitkan sederhana menjadi
wp_head
sangat awal dan keluarkan URL admin ajax. Masalah terpecahkan (ini persisnya yang dilakukan oleh admin area).sumber
Seperti banyak hal di WordPress, ada banyak cara untuk menguliti kucing. Sementara semua metode yang diterima bekerja, saya telah menemukan bahwa mereka kurang "rapi" daripada menggunakan wp_localize_script untuk memasukkan kemampuan ajax di ujung depan.
Lihat ini:
Dan kemudian dalam
se83650.js
file, Anda akan merujuk variabel Anda denganse83650Ajax.ajaxurl
.Manfaat dari teknik ini adalah bahwa jika Anda memiliki banyak plugin yang mencoba dan menduplikasi fungsi ini, mereka tidak termasuk atau menimpa variabel yang sama.
ajaxurl
cukup generik untuk dimasukkan, ini membuat Anda lebih berisi dan bermain lebih baik dengan pengembang lain.sumber