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'; /* * Якщо файл забороняється 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.0.2
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 ); }