Яка різниця між 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']
, принаймні, якщо ви можете запевнити, що корінь документа не зміниться.