Sự khác biệt giữa get_home_path () và ABSPATH là gì?


27

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:


33

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 ý:

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,

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_urlhome_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()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


Giải thích rõ ràng, mặc dù tôi nghĩ các nhà phát triển bên thứ ba không nên sử dụng hằng số cũng như chức năng. Bởi vì WordPress có thể được đặt ở bất cứ đâu , việc đặt nó bên ngoài gốc tài liệu khiến cả hằng số và hàm trả về, ví dụ /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.
Fleuv

@Fleuv Thật vậy, đây là một $_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 :)
Adam

1
Giải pháp này đã được giải thích rõ ràng và hoạt động chính xác như mong muốn sau khi WP đưa ra lỗi "không xác định". Cảm ơn;)
Chris Sprague

-1

Tôi đang sử dụng home_url () để liên kết đến trang "Trang chủ" của WP. Đôi khi, site_url () có thể không thực sự là home_url () của bạn . Bạn có thể định nghĩa một trang đặc biệt là trang chủ trong Wordpress.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.