답변:
그들은 똑같은 일을 해야 하지만 특정 조건에서는 그렇지 않을 수 있습니다.
우선 :
wp-admin/includes/file.php
다른 호출 컨텍스트에 포함되어야 get_home_path()
정의되지 않은 함수를 호출 이어질 것입니다.코덱스 항목과 관련하여
기술
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
and가 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
$_SERVER['DOCUMENT_ROOT']
문제입니다. 심지어 문제가 있습니다. 예를 들어 올바르게 설정 또는 설정되지 않을 수 있습니다. 내가 처리 할 수있는 다른 방법들도 있습니다 ... 각각은 자신의 경고가 있습니다. 많은 재미 :)
/var/apps/wordpress
대신에 반환 됩니다/var/www/htdocs
.$_SERVER['DOCUMENT_ROOT']
최소한 문서 루트가 변경되지 않도록하려면 적어도을 사용 하십시오.