get_home_path()
Получает абсолютный путь до корневой папки сайта (где находится wp-config.php). Результат может отличаться от константы ABSPATH. Имеет закрывающий слэш на конце.
На многих серверах функция возвращает тоже что и $_SERVER['DOCUMENT_ROOT'] или ABSPATH.
На фронте функция работает некорректно, подробнее смотрите пример 1.
Для работы функции должен быть подключен файл:
require_once ABSPATH . 'wp-admin/includes/file.php';
Хуков нет.
Возвращает
Строку
. Путь до каталога (папки).
Использование
get_home_path();
Примеры
#1 Демонстрация работы
Допустим ядро ВП у нас установлено в под-папку wp:
// Убедимся что get_home_path() определен require_once ABSPATH . 'wp-admin/includes/file.php'; echo get_home_path(); echo ABSPATH; echo $_SERVER['SCRIPT_FILENAME']; echo $_SERVER['DOCUMENT_ROOT']; /* В админке: path/sites/site.com/www/ path/sites/site.com/www/wp/ path/sites/site.com/www/wp/wp-admin/options-permalink.php path/sites/site.com/www На фронте: / path/sites/site.com/www/wp/ path/sites/site.com/www/index.php path/sites/site.com/www */
На фронте функция работает некорректно, потому что она опирается на разницу между опциями home и siteurl. В данном случае это строка wp/
. Далее из SCRIPT_FILENAME вырезается все от начала до этой позиции - это и возвращается функцией с добавление слэша в конец. А так как на фронте SCRIPT_FILENAME вообще не содержит подстроки wp/
, то путь получается пустой - его невозможно определить.
Выглядит это как баг.
#2 Получим путь до основной папки сайта
В этой папке обычно находится файл wp-config.php и .htaccess. Допустим нам нужно изменить файл .htaccess
require_once ABSPATH . 'wp-admin/includes/file.php'; require_once ABSPATH . 'wp-admin/includes/misc.php'; $home_path = get_home_path(); $htaccess_file = $home_path .'.htaccess'; /* * If the file doesn't already exist check for write access to the directory * and whether we have some rules. Else check for write access to the file. */ if ( ( ! file_exists($htaccess_file) && is_writable($home_path) ) || is_writable( $htaccess_file ) ) { $rules = ' RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] '; $rules = array_filter( explode( "\n", $rules ) ); $done = insert_with_markers( $htaccess_file, 'My Custom Rules', $rules ); } else { echo '$htaccess_file не существует или закрыт для записи.'; }
Список изменений
С версии 1.5.0 | Введена. |
Код get_home_path() get home path WP 6.6.1
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 ); }