Sự khác biệt giữa get_home_path()và là ABSPATHgì? Không phải là điểm của cả hai để trỏ đến root cài đặt WordPress?
Sự khác biệt giữa get_home_path()và là ABSPATHgì? Không phải là điểm của cả hai để trỏ đến root cài đặt WordPress?
Câu trả lời:
Họ nên làm điều tương tự, nhưng trong những điều kiện nhất định, có thể không.
Trước hết lưu ý:
wp-admin/includes/file.phpphải được bao gồm trong ngữ cảnh gọi khác get_home_path()sẽ dẫn đến gọi một hàm không xác định.Về mục nhập codex,
Sự miêu tả
Lấy đường dẫn hệ thống tập tin tuyệt đối đến thư mục gốc của bản cài đặt WordPress.
Giá trị trả về
Đường dẫn hệ thống tập tin đầy đủ đến thư mục gốc của bản cài đặt WordPress. Nếu bạn cài đặt wordpress trong thư mục con, nó sẽ hiển thị vị trí thư mục con
Ví dụ
$path = get_home_path(); print "Path: ".$path; // Return "Path: /var/www/htdocs/" or "Path: /var/www/htdocs/wordpress/" if it is subfolder
Nó nói rằng giá trị trả về sẽ trả về đường dẫn của thư mục con nếu bạn đã cài đặt WordPress trong một thư mục con. Đây là thực tế, không chính xác.
get_home_path()sẽ trả về thư mục gốc của bản cài đặt WordPress của bạn, ngay cả khi nó được cài đặt trong thư mục con. Đó là mục đích của chức năng.
Giả sử cài đặt WordPress của bạn nằm trong thư mục con có tên /dev,
site_url) (vd / var / www / htdocs / dev)home_url)Nếu bạn đăng nhập một cuộc gọi đến ABSPATH, thì kết quả sẽ là, /var/www/htdocs/devđó không phải là gốc của cài đặt của bạn. Root của cài đặt của bạn là /var/www/htdocs.
ABSPATHđược định nghĩa đầu tiên trong wp-load.phpđó sẽ được đặt tại /var/www/htdocs/dev/wp-load.phpđó do đó đây là nơi ABSPATHsẽ lấy định nghĩa của nó.
Nếu bạn kiểm tra get_home_path()thêm, bạn sẽ lưu ý rằng nếu site_urlvà home_urlkhác nhau, thì một chuỗi con được lấy theo đường dẫn được điều chỉnh bởi vị trí (lần xuất hiện đầu tiên) của thư mục con được tìm thấy trong chuỗi.
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 );
}
Do đó, là kết quả của việc này get_home_path()và ABSPATHcó thể trả về các kết quả khác nhau nếu bạn đã cài đặt WordPress trong thư mục con.
Thứ hai, việc gọi điện get_home_path()phải được thực hiện trong bối cảnh wp-admin/includes/file.phpđã bao gồm những điều đáng tiếc .
Như một ví dụ sử dụng get_home_path()bên trong admin_inithook là tốt, trong khi sử dụng bên trong initthì không.
Xem như tệp này chỉ được bao gồm từ trong ngữ cảnh quản trị viên (bảng điều khiển), nếu bạn thực sự cần nó bên ngoài bối cảnh này, bạn sẽ cần phải bao gồm tệp trước khi gọi hàm,
require_once(ABSPATH . 'wp-admin/includes/file.php');
Trớ trêu thay (hoặc không) sử dụng ABSPATH: D
$_SERVER['DOCUMENT_ROOT']vấn đề khó khăn ... thậm chí có vấn đề của nó ... ví dụ: không được đặt hoặc đặt chính xác, v.v. Có nhiều cách khác tôi có thể nghĩ ra để xử lý việc này ... Mỗi cách đều có những cảnh báo riêng. Nhiều niềm vui :)
/var/apps/wordpressthay vì/var/www/htdocs. Thay vì sử dụng$_SERVER['DOCUMENT_ROOT'], ít nhất là nếu bạn có thể đảm bảo rằng tài liệu gốc sẽ không thay đổi.