Quelle est la différence entre get_home_path()
et ABSPATH
? Est-ce que le point de tous les deux ne pointe pas vers la racine d'installation de WordPress?
Ilsdevraientfont la même chose, mais dans certaines conditions, ne le peuvent pas.
Tout d'abord note:
wp-admin/includes/file.php
doit être inclus dans le contexte sinon l'appel de get_home_path()
conduira à l'appel d'une fonction non définie.En ce qui concerne l'entrée du codex,
La description
Obtenez le chemin absolu du système de fichiers à la racine de l'installation de WordPress.
Valeur de retour
Chemin d'accès complet du système de fichiers à la racine de l'installation de WordPress. Si vous installez wordpress dans un sous-dossier, l’emplacement du sous-dossier
Exemples
$path = get_home_path(); print "Path: ".$path; // Return "Path: /var/www/htdocs/" or "Path: /var/www/htdocs/wordpress/" if it is subfolder
Il indique que la valeur de retour renverra le chemin du sous-dossier si vous avez installé WordPress dans un sous-répertoire. C'est en fait incorrect.
get_home_path()
retournera le répertoire racine de votre installation WordPress, même s’il est installé dans un sous-répertoire. C'est le but de la fonction.
Supposons que votre installation WordPress se trouve dans un sous-répertoire appelé /dev
,
site_url
) (par exemple,/var/www/htdocs/dev)home_url
)Si vous enregistrez un appel à ABSPATH
, le résultat sera /var/www/htdocs/dev
qui est not la racine de votre installation. La racine de votre installation est /var/www/htdocs
.
ABSPATH
est défini pour la première fois dans wp-load.php
qui sera situé à /var/www/htdocs/dev/wp-load.php
et c’est là que ABSPATH
prendra sa définition.
Si vous examinez le get_home_path()
vous remarquerez que si le site_url
et le home_url
diffèrent, une sous-chaîne est créée pour le chemin d'accès régi par la position (première occurrence) du sous-répertoire trouvé dans la chaîne.
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 );
}
Par conséquent, get_home_path()
et ABSPATH
peuvent renvoyer des résultats différents si WordPress est installé dans un sous-répertoire.
Deuxièmement, appeler get_home_path()
doit être effectué dans un contexte où le wp-admin/includes/file.php
a déjà été inclus.
Par exemple, utiliser get_home_path()
dans le crochet admin_init
convient très bien, alors que l’utiliser dans init
ne l’est pas.
Étant donné que ce fichier est uniquement inclus à partir du contexte admin (tableau de bord), si vous en avez absolument besoin en dehors de ce contexte, vous devrez l'inclure vous-même avant d'appeler la fonction.
require_once(ABSPATH . 'wp-admin/includes/file.php');
Ironiquement (ou non) qui utilise ABSPATH
: D