get_home_path ()와 ABSPATH의 차이점은 무엇입니까?


27

차이 무엇 get_home_path()ABSPATH? 둘 다 요점이 워드 프레스 설치 루트를 가리 키지 않습니까?

답변:


33

그들은 똑같은 일을 해야 하지만 특정 조건에서는 그렇지 않을 수 있습니다.

우선 :

코덱스 항목과 관련하여

기술

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.

에 대한 호출을 기록 ABSPATH하면 결과는 설치의 루트 /var/www/htdocs/dev아닙니다 . 설치의 루트는 /var/www/htdocs입니다.

ABSPATH는 어디에 위치 할 wp-load.php것인지 먼저 정의 /var/www/htdocs/dev/wp-load.php되므로 여기서 ABSPATH정의를 가져옵니다.

get_home_path()더 자세히 살펴보면 site_urland가 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당신이 워드 프레스는 하위 디렉토리에 설치되어있는 경우 다른 결과를 반환 할 수 있습니다.

둘째, get_home_path()언급 된 내용 wp-admin/includes/file.php이 이미 포함 된 상황에서 전화를 해야합니다 .

예를 들어 후크 get_home_path()내에서 admin_init사용하는 init것이 좋지 않은 경우 후크 내에서 사용하는 것이 좋습니다.

이 파일은 관리자 (대시 보드) 컨텍스트 내에서만 포함되므로이 컨텍스트 외부에서 파일이 절대적으로 필요한 경우 함수를 호출하기 전에 파일을 직접 포함해야합니다.

require_once(ABSPATH . 'wp-admin/includes/file.php');

아이러니하게 (또는 사용하지 않음) ABSPATH: D


잘 설명했지만, 타사 개발자가 상수 나 함수를 사용해서는 안된다고 생각합니다. 워드 프레스는 어디에나 위치 할 수 있기 때문에 문서 루트 외부에 배치하면 상수와 함수가 모두 /var/apps/wordpress대신에 반환 됩니다 /var/www/htdocs. $_SERVER['DOCUMENT_ROOT']최소한 문서 루트가 변경되지 않도록하려면 적어도을 사용 하십시오.
Fleuv

@Fleuv 실제로 이것은 까다로운 $_SERVER['DOCUMENT_ROOT']문제입니다. 심지어 문제가 있습니다. 예를 들어 올바르게 설정 또는 설정되지 않을 수 있습니다. 내가 처리 할 수있는 다른 방법들도 있습니다 ... 각각은 자신의 경고가 있습니다. 많은 재미 :)
Adam

1
이 솔루션은 WP가 "정의되지 않음"오류를 발생시킨 후 정확하게 설명되고 원하는대로 작동했습니다. 감사합니다;)
Chris Sprague

-1

WP의 "홈"페이지에 링크하기 위해 home_url () 을 사용 하고 있습니다. 때로는 site_url () 이 실제로는 home_url () 이 아닐 수도 있습니다 . Wordpress에서 특정 페이지를 홈페이지로 정의 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.