В чем разница между get_home_path () и ABSPATH?

В чем разница между get_home_path() и ABSPATH ? Не стоит ли указывать на установочный корень WordPress?

Solutions Collecting From Web of "В чем разница между get_home_path () и ABSPATH?"

Они должны делать то же самое, но при определенных условиях не могут.

Прежде всего отметим:

  • что описание записи в кодексе вводит в заблуждение
  • что wp-admin/includes/file.php должен быть включен в контекст else, вызывающий 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 нет.

Видя, как этот файл включается только из контекста admin (dashboard), если вам абсолютно необходимо это вне этого контекста, вам нужно будет включить файл непосредственно перед вызовом функции,

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

По иронии судьбы (или нет), который использует ABSPATH : D