Яка різниця між get_home_path()і ABSPATH? Чи не сенс обох вказувати на корінь установки WordPress?
Яка різниця між get_home_path()і ABSPATH? Чи не сенс обох вказувати на корінь установки WordPress?
Відповіді:
Вони повинні робити те ж саме, але при певних умовах можуть не робити.
Перш за все зауважте:
wp-admin/includes/file.phpповинен бути включений у контекст іншого виклику get_home_path(), призведе до виклику невизначеної функції.Щодо запису кодексу,
Опис
Отримайте абсолютний шлях до файлової системи до кореня установки WordPress.
Повернене значення
Повний шлях файлової системи до кореня установки 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і 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можуть повертатися різні результати, якщо у вас встановлено WordPress в підкаталозі.
По-друге, дзвінок 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'], принаймні, якщо ви можете запевнити, що корінь документа не зміниться.