Sự khác biệt giữa get_home_path()
và là ABSPATH
gì? 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à ABSPATH
gì? 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.php
phả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 ABSPATH
sẽ 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_url
và home_url
khá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à ABSPATH
có 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_init
hook là tốt, trong khi sử dụng bên trong init
thì 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/wordpress
thay 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.