web-dev-qa-db-fra.com

Quelle est la différence entre get_home_path () et ABSPATH?

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?

24
Borek Bernard

Ilsdevraientfont la même chose, mais dans certaines conditions, ne le peuvent pas.

Tout d'abord note:

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,

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

30
userabuser