get_home_path() WP 1.5.0

Отримує абсолютний шлях до кореневої папки сайту (де знаходиться wp-config.php ). Результат може відрізнятися від константи ABSPATH . Має закриваючий слеш на кінці.

На багатьох серверах функція повертає так само як і $_SERVER[‘DOCUMENT_ROOT’] або ABSPATH .

На фронті функція працює некоректно, дивіться приклад 1.

Для роботи функції має бути підключений файл:

require_once ABSPATH. 'wp-admin/includes/file.php';

Хуків немає.

Повертає

Строку. Шлях до каталогу (папки).

Використання

get_home_path();

Приклади

0

#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/, то шлях виходить порожній – його неможливо визначити.

Виглядає це як баг, напишу я тикет, щоб і на фронті функція повертала шлях до кореня сайту.

0

#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() 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 );
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *