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

23

Quelle est la différence entre get_home_path() et ABSPATH ? N’est-il pas utile que les deux pointent vers la racine d’installation de WordPress?

    
posée Borek Bernard 15.05.2015 - 13:53

2 réponses

30

Ils devraient faire la même chose, mais dans certaines conditions, ils ne le peuvent pas.

Tout d'abord, remarquez:

En ce qui concerne l'entrée du codex,

  

Description

     

Obtenez le chemin d'accès absolu du système de fichiers à la racine de l'installation de WordPress.

     

Valeur renvoyée

     

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, il indiquera 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 est indiqué 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() renverra le répertoire racine de votre installation WordPress, même si elle est installée 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 ,

  • enlace ( site_url ) (par exemple, / var / www / htdocs / dev)
  • enlace ( home_url )

Si vous enregistrez un appel à ABSPATH , le résultat obtenu sera /var/www/htdocs/dev , qui est pas 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 . C’est là que ABSPATH prendra sa définition.

Si vous inspectez les get_home_path() , vous remarquerez que si les paramètres site_url et home_url diffèrent, puis une sous-chaîne est prise du chemin 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 vous utilisez WordPress. installé dans un sous-répertoire.

Deuxièmement, appeler get_home_path() doit être effectué dans un contexte où la wp-admin/includes/file.php a déjà été inclus.

Par exemple, get_home_path() est utilisé dans le crochet admin_init , bien que son utilisation dans init n'est pas.

Étant donné que ce fichier est uniquement inclus à partir du contexte admin (tableau de bord), si vous en avez absolument besoin, vous devez 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

    
réponse donnée userabuser 15.05.2015 - 15:49
-1

J'utilise home_url () pour créer un lien vers la page "Accueil" de WP. Parfois, site_url () peut ne pas être réellement votre home_url () . Vous pouvez définir une page spécifique comme page d'accueil dans Wordpress.

    
réponse donnée mdikici 23.07.2018 - 12:20

Lire d'autres questions sur les étiquettes