Яка різниця між get_home_path () та ABSPATH?


27

Яка різниця між get_home_path()і ABSPATH? Чи не сенс обох вказувати на корінь установки WordPress?

Відповіді:


33

Вони повинні робити те ж саме, але при певних умовах можуть не робити.

Перш за все зауважте:

  • що опис запису кодексу вводить в оману
  • який 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,

Якщо ви ввійдете до дзвінка 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


Добре пояснено, все, хоча я думаю, що сторонні розробники не повинні ні використовувати константу, ні функцію. Оскільки WordPress може бути розташований у будь-якому місці , розміщення його поза корінцем документа призводить до того, що константа і функція повертаються, наприклад, /var/apps/wordpressзамість /var/www/htdocs. Скоріше скористайтеся $_SERVER['DOCUMENT_ROOT'], принаймні, якщо ви можете запевнити, що корінь документа не зміниться.
Fleuv

@Fleuv Дійсно, це хитро ... навіть $_SERVER['DOCUMENT_ROOT']є свої проблеми ... напр., Можливо, не встановлено чи встановлено правильно і так далі. Є й інші способи, над якими я можу надмірно впоратися з цим ... У кожного свої застереження. Дуже весело :)
Адам,

1
Це рішення було добре пояснено і спрацювало так, як бажано, після того, як WP відкинула помилку "не визначено". Дякую;)
Chris Sprague

-1

Я використовую home_url () для посилання на сторінку "Головна" WP. Іноді site_url () насправді може не бути вашим home_url () . Ви можете визначити особливу сторінку як домашню сторінку в Wordpress.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.