Quelle est la différence entre home_url () et site_url ()

65

Je crois comprendre que site_url()renvoie l’emplacement où se trouvent les fichiers centraux de wordpress.

Donc, si mon blog est hébergé à http://example.com/blogpuis site_url()retournehttp://example.com/blog

Mais alors comment home_url()diffère? Pour moi, home_url()retourne la même chose:http://example.com/blog

Si cela est correct, puis-je obtenir WordPress pour revenir http://example.com/?

Praveen
la source
4
Vous posez deux questions à la fois sur une question très importante. La réponse à "Quelle est la différence entre home_url () et site_url ()?" est différent de la question "Comment faire pour que WordPress renvoie la racine de l'URL sans le sous-répertoire où il est installé?"
Volomike

Réponses:

51

Vous posez deux questions à la fois:

  1. Quelle est la différence entre home_url()et site_url()?
  2. Comment faire en sorte que WordPress renvoie l'URL racine sans le sous-répertoire où il est installé?

Voici les réponses, que j'ai confirmées avec Andrew Nacin, un développeur principal de WordPress, ainsi que des tests de serveur pour confirmer ce que Andrew m'a dit.

Question 1

Dans Général> Paramètres de wp-admin, faites home_url()référence au champ intitulé "Adresse du site (URL)". Déroutant, hein? Oui, il est écrit "Adresse du site", donc vous pouvez supposer site_url(), mais vous auriez tort . Faites votre propre test et vous verrez. (Vous pouvez déposer temporairement un echo H1champ avec site_url()et home_url()valeurs au sommet de functions.php de votre votre thème.)

Pendant ce temps, fait site_url()référence au champ intitulé "Adresse WordPress (URL)" dans Général> Paramètres.

Donc, si vous voulez indiquer un chemin physique, par exemple appeler le chemin du dossier d'un plugin sur l'URL pour charger une image, ou appeler le chemin du dossier d'un thème pour charger une image, vous devez utiliser d'autres fonctions pour ces - regarde plugins_url()et get_template_directory_uri().

Le site_url()sera toujours le lieu où vous pourrez accéder au site en pointant /wp-adminà l'extrémité, alors que home_url()ce ne serait pas fiable.

Le home_url()serait l'endroit où vous avez défini votre page d'accueil en définissant le champ Général> Paramètres "Adresse du site (URL)".

Question 2

Donc, si j'ai placé mon blog dans http://example.com/blog, et example.comest juste un site statique où j'ai comme thème de portefeuille, alors ce serait un scénario qui correspond à votre question. Dans un tel cas, j'utiliserais alors cet extrait de code:

<?php
function getDomain() {
    $sURL    = site_url(); // WordPress function
    $asParts = parse_url( $sURL ); // PHP function

    if ( ! $asParts )
      wp_die( 'ERROR: Path corrupt for parsing.' ); // replace this with a better error result

    $sScheme = $asParts['scheme'];
    $nPort   = $asParts['port'];
    $sHost   = $asParts['host'];
    $nPort   = 80 == $nPort ? '' : $nPort;
    $nPort   = 'https' == $sScheme AND 443 == $nPort ? '' : $nPort;
    $sPort   = ! empty( $sPort ) ? ":$nPort" : '';
    $sReturn = $sScheme . '://' . $sHost . $sPort;

    return $sReturn;
}
Volomike
la source
Avez-vous un lien vers la discussion avec A.Nacin?
Kaiser
1
C'était par email. Pardon. Oh, et merci pour l'édition - je me souviendrai de ce changement de syntaxe la prochaine fois.
Volomike
8
Il m'a fallu beaucoup de temps et beaucoup de peine pour réaliser que 'Adresse du site (URL)' = 'home' et 'Adresse WordPress (URL)' = 'siteurl'. Ils devraient définitivement changer ces étiquettes.
Jbm
Votre réponse à la deuxième question touche le jackpot!
Devner
7

Si vous souhaitez que WP soit installé dans un répertoire mais dans le répertoire principal du site, à la racine de votre domaine, vous devez déplacer le fichier principal index.php vers la racine de votre domaine et modifier l'instruction require pour qu'elle pointe dans votre répertoire.

Ce processus est décrit ici: Donner à WordPress son propre répertoire .

Milo
la source
Je viens toujours d'utiliser home_url()depuis que je suis en mode réseau wp. J'ai donné à WordPress son propre répertoire une seule fois et ce n'était tout simplement pas à mon goût. Mais je l’utilise cependant wp_content_dirsur certains sites.
xLRDxREVENGEx le
Je n'ai aucune expérience du multisite, je ne sais donc pas comment cela fonctionne dans cette situation. Je préfère installer WP dans un répertoire juste pour garder les choses propres et ne pas encombrer la racine.
Milo
ma structure de fichiers est probablement l'une des plus soignées qui soit. home/usr/public_html/site1 home/usr/public_html/site2et ainsi de suite et puis le wp_content_direst généralement sur un cdn
xLRDxREVENGEx
si une installation de WP était la seule chose là-bas, tout irait bien, mais je travaille principalement sur des serveurs d'autres personnes avec des centaines de fichiers et de répertoires jonchés.
Milo
Ma compréhension est-elle correcte que site_url () et home_url () sont identiques, à moins que l’on ne définisse le répertoire d’installation de wordpress de manière à ce qu’il soit différent de la racine?
Praveen
3

TLDR:

Dans une installation non standard, vous pouvez placer vos fichiers WordPress dans un sous-répertoire de la racine de votre site Web.
... et autorisez toujours vos visiteurs à accéder à votre "site Web" WordPress à partir de l'URL de domaine (racine) de votre site, sans ajouter le nom du sous-répertoire:
(c.-à-d. www.example.comvs www.example.com/wordpress):

WP function  | wp_options. | WP constant  | what it represents       | WP Settings Label | Example     
-------------------------------------------------------------------------------------------------------------------------------------
`site_url()` | `siteurl`   | `WP_SITEURL` | WordPress files location | WordPress Address | https://www.example.com/wordpress
`home_url()` | `home`      | `WP_HOME`    | browser address bar      | Site Address      | https://www.example.com 

Où la valeur d'une constante WP prime sur une valeur wp_options / WP Settings.

Différentes configurations pour WordPress

Dans les installations WordPress les plus standard , home_urlet site_urlaura la même valeur.
Quoi qu'il en soit, ils représentent deux choses différentes.

Dans une installation non standard , elles peuvent avoir des valeurs différentes.

Remarque: je laisse hors du protocole dans ma réponse pour une lisibilité plus facile.
Dans ce post, PREPEND URL avec TOUS: https://, http://OU //
( à moins que j'inclus déjà).

( //Est le relativeprotocole et travaillera pour les deux / deux http://ou https://)

Installations standard (y compris les installations "en un clic")

home_url: est la page d'accueil de votre site web (wordpress), comme indiqué dans la barre d'adresse de l'utilisateur.
site_url: est le répertoire où se trouvent vos fichiers wordpress.

L'installation en 5 minutes de WordPress installe des fichiers wordpress. Ces deux valeurs seront identiques. Les fichiers wordpress seront installés dans le même dossier que celui que vous souhaitez utiliser pour adresser votre site Web ou la partie wordpress (blog) du site Web de votre serveur.

Exemple 1:
l' utilisateur accède à votre blog à: www.example.com, les
fichiers installés à wordpress: www.example.comou le dossier racine du site Web de votre serveur.

home_url=== site_url==="www.example.com"

Exemple 2:
l' utilisateur accède à votre blog à: www.example.com/blog, les
fichiers installés à wordpress: www.example.com/blogou dans le blogdossier dans la racine de votre site Web.

home_url=== site_url==="www.example.com/blog"

Dans ce cas, il www.example.coms’agit du site Web principal et de www.example.com/blogla racine de votre blog.
Ici, votre blog est séparé de votre site Web principal et fonctionne comme un sous-ensemble de celui-ci.
Dans ce cas, votre site Web principal n'est pas contrôlé, défini ou mis en forme par WordPress.
Juste votre blog est. Toutes les URL de votre blog seront traitées parwww.example.com/blog

Remarque: dans la documentation, "site / site Web Wordpress" (par opposition à "site / site Web") désigne le répertoire dans lequel vos fichiers WordPress sont installés. Dans ce cas, c’est www.example.com/blog- tout dans le blogdossier. Dans ce scénario, le "site Web WordPress" n’est pas identique à votre domaine, votre racine ou votre site Web principal. C'est un sous-ensemble de votre site Web global. Un peu comme un site Web à l'intérieur d'un site Web. Je mentionne cela car la terminologie peut sembler peu claire ou source de confusion, étant donné cette configuration particulière.

Autre configuration d'installation WordPress

Donner à WordPress son propre répertoire , la section Method II (With URL change).

Par exemple, beaucoup de gens ne veulent pas encombrer le dossier racine de leur site Web avec tous les fichiers wordpress.
Ils veulent installer wordpress dans un sous-répertoire *, mais ils doivent accéder au "blog" ou au "site Web WordPress" comme si les fichiers étaient installés à la racine du serveur pour le site Web.

Cela est particulièrement vrai lorsque WordPress est utilisé pour créer et gérer un site Web complet qui n'a même pas de "blog".

Exemple 3:
l' utilisateur accède à votre « blog » à: www.example.com, les
fichiers installés à wordpress: www.example.com/wordpressou le dossier racine du site Web de votre serveur.

home_url=== "www.example.com"
site_url==="www.example.com/wordpress"

(Remarque: cette configuration ne fonctionnera pas « hors de la boîte » en changeant les valeurs de ces variables , il nécessite des changements de configuration supplémentaires pour fonctionner correctement.)
Voir Donner WordPress son propre répertoire , la section intitulée Method II (With URL change)pour savoir comment faire.

Dans ce cas home_urlet site_urldevrait contenir des valeurs différentes.

Dans cette configuration, vous voulez que votre site fonctionne exactement comme si les fichiers WordPress ont été installés dans le répertoire racine du serveur pour votre site ...
Mais, pour des raisons d' organisation sur le serveur,
vous réellement avez vos fichiers WordPress dans un dossier appelé wordpressdans le serveur de répertoire racine de votre site web.

Ainsi, l’utilisateur saisira www.example.comvotre page d’accueil WordPress au lieu dewww.example.com/wordpress

fonction wordpress <-> variable de base de données <-> constante Wordpress

Cette section suppose la configuration de l'exemple 3 ci-dessus.
URL de la barre d'adresse: www.example.com
fichiers wordpress: répertoire / wordpress

(Les autres cas sont triviaux: toutes les variables / fonctions conservent / retournent la même valeur.)

Comment définir les valeurs pour site_urlethome_url

Tout d'abord, laissez-moi noter que siteurlet homestocker les valeurs retournées par les fonctions ci-dessus

1) Normalement, vous définissez ces valeurs sur le panneau dorsal / tableau de bord / admin de
Settings -> General ->
siteurl WordPress: Adresse WordPress: https://www.example.com/wordpress
home Adresse du site: https://www.example.com

(n'incluez pas les barres obliques finales ici - elles seraient configurées ailleurs)

2) Vous pouvez également définir ces valeurs dans votre base de données WordPress:
wp_optionstable ->

`options_name` | `options_value`
----------------------------------------------------
`siteurl`      | `https://www.example.com/wordpress`  
`home`         | `https://www.example.com`  

(n'incluez pas les barres obliques finales ici - elles seraient configurées ailleurs)

3) Editez votre wp-config.php
Définissez ces constantes spécifiques pour conserver vos valeurs
Définissez WP_HOMEet définissez les WP_SITEURLparamètres en insérant ces lignes vers le haut de votre wp-config.phpfichier:

define('WP_SITEURL','http://example.com/wordpress');  // wordpress core files
define('WP_HOME','http://example.com');               // address bar url

// ** MySQL settings - You can get this info from your web host ** //
...    

(n'incluez pas les barres obliques finales ici - elles seraient configurées ailleurs)

Référence: WP_SITEURL et WP_HOME

NOTE: Ceci est déroutant
(j'aurais vraiment aimé que WordPress identifie les paramètres de manière similaire à leurs noms php,
tels que Wordpress Site Addresset Home Page Addressou quelque chose de plus explicite, tel que location of WordPress Site core fileset browser url to access WordPress home page)

`WP_SITEURL` <--> `site_url()` <--> `siteurl` <--> Wordpress Address <--> /wordpress   
`WP_HOME`    <--> `home_url()` <--> `home`    <--> Site Address      <--> /

Maintenant, voici où il devient difficile!

SI vous avez défini ces constantes dans votrewp-config.phpfichier, peu importe les valeurs que vous avez dans votre page de base de données / paramètres.
En fait, vous ne pourrez pas modifier cette valeur via le back-end (elle sera grisée). Vous pouvez toujours modifier en modifiant votre base de données, mais cela n'aura aucun effet sur votre site, alors que les constantes existent dans votre fichier wp-config.

Votre fichier de configuration ne changera pas les valeurs de votre base de données (ni donc de votre page de paramètres). Au lieu de cela, les valeurs de votre page de base de données / paramètres seront ignorées . Les valeurs de wp-config remplacent ou ont priorité sur les paramètres de votre base de données.

Alors ... pour conclure (TLDR):

WP function  | wp_options. | WP constant  | what it represents       | WP Settings Label | Example     
-------------------------------------------------------------------------------------------------------------------------------------
`site_url()` | `siteurl`   | `WP_SITEURL` | WordPress files location | WordPress Address | https://www.example.com/wordpress
`home_url()` | `home`      | `WP_HOME`    | browser address bar      | Site Address      | https://www.example.com 

Où la valeur d'une constante WP prime sur une valeur wp_options / WP Settings.

La valeur de l'enregistrement wp_options et la valeur des paramètres WP sont identiques.
Éditer l'un, par définition, édite l'autre.
Il ne s'agit que de 2 manières différentes d'accéder à la même variable.

D'autre part, les constantes WordPress sont uniques et indépendantes.
En interne, les constantes WordPress (PHP) remplacent leurs équivalents db.
Si une constante est définie dans wp-config, la base de données ne sera pas modifiée.
Mais en interne, WordPress préférera / utilisera toujours sa valeur plutôt que celle de la base de données.

SherylHohman
la source
3

Les fonctions site_url()et home_url()sont similaires et peuvent entraîner une confusion dans leur fonctionnement.

La site_url()fonction récupère la valeur siteurldans la wp_optionstable de votre base de données.

Ceci est l'URL des fichiers de base WordPress.
Si vos fichiers principaux existent dans un sous-répertoire /wordpressde votre serveur Web, la valeur serait http://example.com/wordpress.

La home_url()fonction extrait la valeur de homela wp_optionstable dans votre base de données.

C'est l'adresse à laquelle vous souhaitez que les gens se rendent pour consulter votre site Web WordPress.

Si vos fichiers principaux WordPress existent /wordpress, mais que vous voulez que l'URL de votre site Web soit http://example.comla valeur de base, elle doit l'être http://example.com.

Nanhe Kumar
la source
2

Pour répondre à votre deuxième question:

Q: Si cela est correct, puis-je demander à wordpress de renvoyer http://example.com/ ?

Vous ne pouvez pas, sauf si vous prenez Donner à WordPress ses propres étapes de répertoire . Cela signifie que vous placez les fichiers de base WordPress dans /blogou /WordPress, puis index.phpdans la racine.

Si vous décidez de mettre WordPress dans son propre répertoire, vous utiliserez home_url()pour aller index.phpet site_url()pour obtenir des fichiers de base et autres.

Refrences:
Codex site_url
Codex home_url
Codex permettant de créer un répertoire propre à Wordpress

xLRDxREVENGEx
la source
-1

Le moyen le plus simple d’obtenir l’URL du site sans sous-répertoires ( http://example.com/ au lieu de http://example.com/blog ) consiste à utiliser la barre oblique inversée /

Par exemple, si vous tapez:

<a href="/">domain url</a>

Il va créer un lien qui va à votre domaine

Jake
la source
Merci d'avoir participé. Malheureusement, cela ne répond pas à la question posée par le PO. Il existe de nombreuses raisons pour lesquelles une personne doit utiliser les fonctions wordpress proposées par OP à propos de. Il est peu probable que OP souhaite simplement ajouter un lien vers sa page d'accueil via HTML, par exemple en modifiant un message. Il est plus probable que OP édite un fichier de thème php ou un fichier de plugin. En tout cas, ils travaillent avec php, pas html. Enfin, alors qu'OP attendait une valeur sans /pour ce site, sur un site différent, OP peut s'attendre à ce qu'un sous-répertoire soit renvoyé. Cela dépend de la configuration de WP pour chaque site.
SherylHohman