ความแตกต่างระหว่างget_home_path()
และABSPATH
คืออะไร จุดทั้งคู่ชี้ไปยังรูทการติดตั้ง WordPress หรือไม่
ความแตกต่างระหว่างget_home_path()
และABSPATH
คืออะไร จุดทั้งคู่ชี้ไปยังรูทการติดตั้ง WordPress หรือไม่
คำตอบ:
พวกเขาควรทำสิ่งเดียวกัน แต่ภายใต้เงื่อนไขบางอย่างอาจไม่
ประการแรกจากทั้งหมด:
wp-admin/includes/file.php
จะต้องรวมอยู่ในบริบทการโทรอื่นget_home_path()
จะนำไปสู่การเรียกฟังก์ชั่นที่ไม่ได้กำหนดเกี่ยวกับรายการ codex
ลักษณะ
รับเส้นทางของระบบไฟล์ที่แน่นอนไปสู่รูทของการติดตั้ง WordPress
ส่งคืนค่า
พา ธ ระบบไฟล์แบบเต็มไปยังรูทของการติดตั้ง WordPress หากคุณติดตั้ง wordpress ในโฟลเดอร์ย่อยมันจะแสดงตำแหน่งของโฟลเดอร์ย่อย
ตัวอย่าง
$path = get_home_path(); print "Path: ".$path; // Return "Path: /var/www/htdocs/" or "Path: /var/www/htdocs/wordpress/" if it is subfolder
ระบุว่าค่าส่งคืนจะส่งคืนพา ธ ของโฟลเดอร์ย่อยหากคุณติดตั้ง WordPress ในไดเรกทอรีย่อย อันที่จริงแล้วไม่ถูกต้อง
get_home_path()
จะส่งคืนไดเรกทอรีรากของการติดตั้ง WordPress ของคุณแม้ว่าจะติดตั้งในไดเรกทอรีย่อยก็ตาม นั่นคือจุดประสงค์ของฟังก์ชั่น
สมมติว่าการติดตั้ง WordPress ของคุณอยู่ในไดเรกทอรีย่อยที่เรียกว่า/dev
,
site_url
) (เช่น / var / www / htdocs / dev)home_url
)หากคุณบันทึกการโทรไปABSPATH
ยังผลลัพธ์ที่จะเป็น/var/www/htdocs/dev
ซึ่งไม่ใช่รากของการติดตั้งของคุณ /var/www/htdocs
รากของการติดตั้งของคุณ
ABSPATH
ถูกกำหนดเป็นครั้งแรกwp-load.php
ซึ่งจะอยู่ที่/var/www/htdocs/dev/wp-load.php
นี่จึงเป็นที่ที่ABSPATH
จะใช้คำนิยามจาก
หากคุณตรวจสอบget_home_path()
เพิ่มเติมคุณจะทราบว่าหากsite_url
และhome_url
แตกต่างจากนั้นสตริงย่อยจะถูกนำมาจากเส้นทางที่ควบคุมโดยตำแหน่ง (เกิดขึ้นครั้งแรก) ของไดเรกทอรีย่อยที่พบภายในสตริง
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 );
}
ดังนั้นเป็นผลมาจากสิ่งนี้get_home_path()
และABSPATH
อาจส่งคืนผลลัพธ์ที่แตกต่างกันหากคุณมี WordPress ติดตั้งในไดเรกทอรีย่อย
ประการที่สองการโทรget_home_path()
จะต้องกระทำในบริบทที่wp-admin/includes/file.php
รวมความสบายไว้แล้ว
ตัวอย่างเช่นการใช้get_home_path()
ภายในadmin_init
เบ็ดเป็นเรื่องปกติที่การใช้ภายในinit
ไม่ได้
การเห็นว่าไฟล์นี้ถูกรวมไว้ในบริบทผู้ดูแลระบบ (แดชบอร์ด) เท่านั้นหากคุณต้องการมันนอกบริบทนี้คุณจะต้องรวมไฟล์ด้วยตัวคุณเองก่อนที่จะเรียกใช้ฟังก์ชัน
require_once(ABSPATH . 'wp-admin/includes/file.php');
แดกดัน (หรือไม่) ซึ่งใช้ABSPATH
: D
$_SERVER['DOCUMENT_ROOT']
มีปัญหา ... เช่นอาจไม่ได้ตั้งค่าหรือตั้งค่าอย่างถูกต้องและอื่น ๆ มีวิธีอื่นที่ฉันสามารถคิดได้เช่นกันในการจัดการกับมัน ... สนุกมาก :)
ฉันใช้home_url ()เพื่อเชื่อมโยงไปยังหน้า "Home" ของ WP บางครั้งsite_url ()อาจจะไม่เป็นจริงของคุณhome_url () คุณสามารถกำหนดหน้า spesific เป็นหน้าแรกใน Wordpress
/var/apps/wordpress
/var/www/htdocs
ใช้$_SERVER['DOCUMENT_ROOT']
อย่างน้อยถ้าคุณมั่นใจได้ว่ารูทของเอกสารจะไม่เปลี่ยนแปลง