Saya memiliki plugin yang memanggil skrip php yang berdiri sendiri (myAjax.php) melalui skrip jQuery.ajax () di dalam plugin.
Saya perlu menempatkan kode berikut ke dalam file myAjax.php:
require_once('../../../wp-load.php');
if (!is_user_logged_in()){
die("You Must Be Logged In to Access This");
}
if( ! current_user_can('edit_files')) {
die("Sorry you are not authorized to access this file");
}
Namun, saya ingin metode yang lebih antipeluru untuk menentukan path ke wp-load.php jika path relatif sebenarnya berbeda dari contoh saya.
plugin-development
N2Mystic
sumber
sumber
Jawaban:
Anda dapat menggunakan
__DIR__
konstanta. Karena file tersebut ada di dalam plugin atau folder tema, yang selalu terletak di dalamwp-content
folder .. Anda cukup mendapatkan path file dan memotong semuanya mulaiwp-content
dari itu:Jika Anda perlu memastikan wp tidak ada di dalam beberapa folder konten-wp (siapa tahu? Hal-hal terjadi) - gunakan lookahead negatif:
(karena lebih mudah untuk memastikan plugin Anda sendiri yang Anda kembangkan tidak terletak di dalam folder konten-wp lainnya)
Aaand .. Anda
wp-load
ada di sana:Tapi!
Seperti yang telah disebutkan sebelumnya, untuk AJAX Anda dapat menggunakan teknik ajax asli WP-s .
Tentu saja, ada beberapa kasus ketika teknik WP asli AJAX tidak cukup.
sumber
wp-content
bisa tidak ada atau dalam direktori yang sama sekali berbeda dari WP.Saya tahu ini adalah pertanyaan lama tetapi ingin menambahkan jawaban saya sendiri yang saya pikir dapat membantu beberapa pengguna mencoba mencapai hal yang sama.
Ya itu selalu lebih baik (dan lebih mudah) untuk menggunakan WP Ajax API asli, tetapi bisa menjadi sangat lambat karena memuat seluruh contoh WP.
Solusi saya: cukup sederhana, dan harus berfungsi untuk mengambil
root
instalasi wordpress. Dalam skrip apa pun yang Anda lakukan panggilan AJAX kustom, pastikan Anda pertama kali mendaftarkan skrip denganwp_register_script()
(jangan enqueue dulu). Kemudian gunakanwp_localize_script()
dan parsingABSPATH
(ini adalah konstanta yang didefinisikan di dalamwp-load.php
dan akan menahan path root). Anda sekarang dapat mengambil ini di dalam skrip Anda dan menguraikannya bersama dengan panggilan AJAX. Akhirnya tentu saja pastikan untuk benar-benar membuat skrip denganwp_enqueue_script()
.Contoh:
Cuplikan PHP di bawah ini akan membuat
script.js
file Anda enqueue , dan memungkinkan Anda untuk mengambilroot
dir dengan meneleponpluginslug_scriptname_i18n.wp_root
. Pada dasarnyawp_localize_script()
ini digunakan untuk melakukan terjemahan, tetapi ini juga berguna untuk mem-parsing data ke skrip Anda yang diambil dari sisi server.Anda
script.js
bisa terlihat seperti ini:Sekarang di dalam Anda,
ajax-handler.php
Anda dapat mengambilwp_content_dir
dan memuatwp-load.php
seperti Anda :Harap diingat bahwa
wp_root
sisi klien dapat diubah.Sebagai catatan:
Trik lain yang beberapa dari Anda mungkin tidak sadari adalah bahwa sebelum termasuk
wp-load.php
Anda dapat mendefinisikan konstanta disebutSHORTINIT
(boolean). Ini akan memberi tahu WordPress untuk hanya memuat dasar-dasarnya (artinya Anda akan kehilangan banyak fungsi inti WP) tetapi itu akan mempercepat waktu pemuatan karena tidak akan menyertakan semua file yang diperlukan untuk instance WP biasa. TheSHORTINIT
dalam didefinisikanwp-settings.php
(hanya membuka file dan mencariSHORTINIT
. Anda akan memiliki pemahaman yang lebih baik tentang apa yang terjadi di bawah tenda. Trik bagus ini akan mempercepat beban kali bahkan lebih (sampai 75% dalam tes saya yang saya lakukan beberapa waktu yang lalu) .Tapi ini akan tergantung pada versi WP. Juga perlu diingat bahwawp-load.php
perubahan sering dengan rilis baru versi WP, jadi jika Anda menggunakanSHORTINIT
pastikan bahwa skrip Anda akan selalu berfungsi bahkan di versi WordPress yang akan datang, dan juga dengan versi WordPress yang lebih rendah. Singkatnya, jika Anda melakukan hal-hal kompleks yang bergantung pada banyak kodeks WordPress, maka pastikan TIDAK diaturSHORTINIT
ke true .sumber
Anda dapat menggunakan kode di bawah ini untuk menggunakan wp-load.php untuk memasukkan wp-load dari lokasi mana pun
sumber