Apa perbedaan antara get_home_path()
dan ABSPATH
? Bukankah maksud keduanya untuk menunjuk ke root instalasi WordPress?
Apa perbedaan antara get_home_path()
dan ABSPATH
? Bukankah maksud keduanya untuk menunjuk ke root instalasi WordPress?
Jawaban:
Mereka harus melakukan hal yang sama, tetapi dalam kondisi tertentu, mungkin tidak.
Catatan pertama:
wp-admin/includes/file.php
harus dimasukkan dalam konteks panggilan lain get_home_path()
akan menyebabkan memanggil fungsi yang tidak ditentukan.Mengenai entri codex,
Deskripsi
Dapatkan jalur sistem file absolut ke akar instalasi WordPress.
Nilai Pengembalian
Jalur sistem file lengkap ke akar instalasi WordPress. Jika Anda menginstal wordpress di subfolder, itu akan menunjukkan lokasi subfolder
Contohnya
$path = get_home_path(); print "Path: ".$path; // Return "Path: /var/www/htdocs/" or "Path: /var/www/htdocs/wordpress/" if it is subfolder
Ini menyatakan bahwa nilai kembali akan mengembalikan jalur subfolder jika Anda telah menginstal WordPress di sub-direktori. Ini sebenarnya, salah.
get_home_path()
akan mengembalikan direktori root dari instalasi WordPress Anda, bahkan jika itu diinstal di sub-direktori. Itulah tujuan dari fungsinya.
Asumsikan instalasi WordPress Anda berada dalam sub-direktori bernama /dev
,
site_url
) (mis. / var / www / htdocs / dev)home_url
)Jika Anda mencatat panggilan ke ABSPATH
, maka hasilnya akan menjadi, /var/www/htdocs/dev
yang bukan merupakan akar dari instalasi Anda. Akar instalasi Anda adalah /var/www/htdocs
.
ABSPATH
didefinisikan pertama di wp-load.php
mana akan berlokasi di /var/www/htdocs/dev/wp-load.php
maka di sinilah ABSPATH
akan mengambil definisi dari.
Jika Anda memeriksa get_home_path()
lebih lanjut, Anda akan mencatat bahwa jika site_url
dan home_url
berbeda, maka sub-string diambil dari jalan yang diatur oleh posisi (kejadian pertama) dari sub-direktori yang ditemukan dalam string.
function get_home_path() {
$home = set_url_scheme( get_option( 'home' ), 'http' );
$siteurl = set_url_scheme( get_option( 'siteurl' ), 'http' );
if ( ! empty( $home ) && 0 !== strcasecmp( $home, $siteurl ) ) {
$wp_path_rel_to_home = str_ireplace( $home, '', $siteurl ); /* $siteurl - $home */
$pos = strripos( str_replace( '\\', '/', $_SERVER['SCRIPT_FILENAME'] ), trailingslashit( $wp_path_rel_to_home ) );
$home_path = substr( $_SERVER['SCRIPT_FILENAME'], 0, $pos );
$home_path = trailingslashit( $home_path );
} else {
$home_path = ABSPATH;
}
return str_replace( '\\', '/', $home_path );
}
Karena itu, sebagai akibat dari ini, get_home_path()
dan ABSPATH
dapat mengembalikan hasil yang berbeda jika Anda menginstal WordPress di sub-direktori.
Kedua, pemanggilan get_home_path()
harus dilakukan dalam konteks di mana yang wp-admin/includes/file.php
telah disebutkan telah dimasukkan.
Sebagai contoh menggunakan get_home_path()
di dalam admin_init
hook tidak apa-apa sedangkan menggunakannya di dalam init
tidak.
Melihat file ini hanya akan dimasukkan dari dalam konteks admin (dashboard), jika Anda benar-benar membutuhkannya di luar konteks ini, Anda harus memasukkan file sendiri sebelum memanggil fungsi,
require_once(ABSPATH . 'wp-admin/includes/file.php');
Ironisnya (atau tidak) yang menggunakan ABSPATH
: D
$_SERVER['DOCUMENT_ROOT']
ada masalah ... misalnya mungkin tidak disetel atau disetel dengan benar dan seterusnya. Ada cara lain yang bisa saya pikirkan untuk menangani ini ... Masing-masing dengan peringatan mereka sendiri. Sangat menyenangkan :)
/var/apps/wordpress
bukan/var/www/htdocs
. Sebaliknya gunakan$_SERVER['DOCUMENT_ROOT']
, setidaknya jika Anda dapat memastikan bahwa root dokumen tidak akan berubah.