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.phpharus 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/devyang bukan merupakan akar dari instalasi Anda. Akar instalasi Anda adalah /var/www/htdocs.
ABSPATHdidefinisikan pertama di wp-load.phpmana akan berlokasi di /var/www/htdocs/dev/wp-load.phpmaka di sinilah ABSPATHakan mengambil definisi dari.
Jika Anda memeriksa get_home_path()lebih lanjut, Anda akan mencatat bahwa jika site_urldan home_urlberbeda, 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 ABSPATHdapat 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.phptelah disebutkan telah dimasukkan.
Sebagai contoh menggunakan get_home_path()di dalam admin_inithook tidak apa-apa sedangkan menggunakannya di dalam inittidak.
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/wordpressbukan/var/www/htdocs. Sebaliknya gunakan$_SERVER['DOCUMENT_ROOT'], setidaknya jika Anda dapat memastikan bahwa root dokumen tidak akan berubah.