¿Cuál es la diferencia entre home_url () y site_url ()

65

Entiendo que site_url()devuelve la ubicación donde están los archivos principales de WordPress.

Entonces, si mi blog está alojado en, http://example.com/blogentonces site_url()regresahttp://example.com/blog

Pero entonces, ¿cómo home_url()difiere? Para mí, home_url()devuelve lo mismo:http://example.com/blog

Si eso es correcto, ¿puedo hacer que WordPress regrese http://example.com/?

Praveen
fuente
44
Estás haciendo dos preguntas a la vez sobre una pregunta muy importante. La respuesta a "¿Cuál es la diferencia entre home_url () y site_url ()?" es diferente a la pregunta, "¿Cómo consigo que WordPress devuelva la raíz URL sin el subdirectorio donde está instalado?"
Volomike

Respuestas:

51

Estás haciendo dos preguntas a la vez:

  1. ¿Cuál es la diferencia entre home_url()y site_url()?
  2. ¿Cómo consigo que WordPress devuelva la raíz URL sin el subdirectorio donde está instalado?

Aquí están las respuestas, y lo confirmó con Andrew Nacin, un desarrollador principal de WordPress, y también realicé algunas pruebas de servidor para confirmar lo que Andrew me contó.

Pregunta 1

En General> Configuración de wp-admin, hace home_url()referencia al campo etiquetado "Dirección del sitio (URL)". Confuso, ¿eh? Sí, dice "Dirección del sitio", así que puedes suponer site_url(), pero estarías equivocado . Ejecute su propia prueba y verá. (Puede colocar temporalmente un echo H1campo con site_url()y home_url()valores en la parte superior de las funciones.php de su tema).

Mientras tanto, hace site_url()referencia al campo con la etiqueta "Dirección de WordPress (URL)" en General> Configuración.

Entonces, si desea hacer referencia a dónde podría estar una ruta física, como llamar a la ruta de la carpeta de un complemento en la URL para cargar una imagen, o llamar a la ruta de la carpeta de un tema para cargar una imagen, en realidad debería usar otras funciones para esos: mira plugins_url()y get_template_directory_uri().

El site_url()siempre va a ser el lugar donde se puede llegar al sitio por viradas en /wp-adminla final, mientras que home_url()no sería fiable esta ubicación.

El home_url()sería el caso en que haya establecido la página de inicio mediante el establecimiento de General> Configuración "Sitio de direcciones (URL)" sobre el terreno.

Pregunta 2

Entonces, si coloqué mi blog http://example.com/blogy example.comes solo un sitio estático donde tengo un tema de cartera, entonces este sería un escenario que se alinea con su pregunta. En tal caso, usaría este fragmento de código:

<?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
fuente
¿Tiene un enlace a la discusión con A. Nacin?
kaiser
1
Fue por correo electrónico. Lo siento. Ah, y gracias por la edición. Recordaré que la sintaxis cambiará la próxima vez.
Volomike
8
Me tomó mucho tiempo y mucho dolor darme cuenta de que 'Site Address (URL)' = 'home' y 'WordPress Address (URL)' = 'siteurl'. Definitivamente deberían cambiar esas etiquetas.
Jbm
¡Su respuesta a la segunda pregunta llega al premio gordo!
Devner
7

Si desea instalar WP en un directorio pero el sitio está en la raíz de su dominio, debe mover el archivo index.php principal a la raíz de su dominio y editar la instrucción require para que apunte dentro de su directorio.

Este proceso se describe aquí: dar a WordPress su propio directorio .

Milo
fuente
Siempre lo uso home_url()ya que estoy en el modo de red wp. Solo le di a WordPress su propio directorio una vez y simplemente no fue de mi agrado. Pero sí uso el wp_content_diren algunos sitios.
xLRDxREVENGEx
No tengo ninguna experiencia con múltiples sitios, por lo que no estoy familiarizado con cómo funciona esto en esa situación. Prefiero instalar WP en un directorio solo para mantener las cosas limpias y no saturar la raíz.
Milo
mi estructura de archivos es probablemente una de las más bonitas. home/usr/public_html/site1 home/usr/public_html/site2y así sucesivamente y wp_content_dirgeneralmente está en un
CDN
si una instalación de WP fuera lo único que estaría bien, pero estoy trabajando principalmente en servidores de otras personas con cientos de archivos y directorios llenos de basura.
Milo
¿Es correcto entender que site_url () y home_url () son iguales, a menos que uno configure su directorio de instalación de WordPress para que sea diferente de la raíz?
Praveen
3

TLDR:

En una instalación no estándar, puede colocar sus archivos de WordPress en un subdirectorio de la raíz de su sitio web.
... y aún permitir que sus visitantes accedan a su "sitio web" de WordPress desde la URL del dominio (raíz) de su sitio, sin agregar el nombre del subdirectorio:
(es decir, 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 

Donde el valor de una constante WP tiene prioridad sobre un valor de wp_options / WP Settings.

Diferentes configuraciones para WordPress

En la mayoría de los estándares instalaciones de WordPress, home_urly site_urltendrá el mismo valor.
En cualquier caso, representan dos cosas diferentes.

En una instalación no estándar , pueden tener valores diferentes.

NOTA: Estoy omitiendo el protocolo en mi respuesta para facilitar la lectura.
En este post, anteponga CADA URL con: https://, http://O //
(a menos que lo incluí ya).

( //es el relativeprotocolo y funcionará para cualquiera / ambos http://o https://)

Instalaciones estándar (incluidas las instalaciones de "un clic")

home_url: es la página de inicio de su sitio web (wordpress), como se indica en la barra de direcciones del usuario.
site_url: es el directorio donde se encuentran sus archivos de WordPress.

La instalación de 5 minutos de WordPress instala los archivos de WordPress, estos dos valores serán los mismos: los archivos de WordPress se instalarán en la misma carpeta que desea que las personas usen para dirigirse a su sitio web, o la porción de WordPress (blog) del sitio web de su servidor.

Ejemplo 1:
el usuario tiene acceso a su blog en: www.example.com,
archivos de wordpress instalados en: www.example.como la carpeta raíz del sitio web de su servidor.

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

Ejemplo 2:
el usuario tiene acceso a su blog en: www.example.com/blog,
archivos de wordpress instalado en: www.example.com/blogo en la blogcarpeta dentro de la raíz de su sitio web.

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

En este caso www.example.comes el sitio web principal, y www.example.com/bloges la raíz de tu blog.
Aquí su blog está separado y funciona como un subconjunto de su sitio web principal.
En este caso, su sitio web principal no está controlado, definido o diseñado por WordPress.
Solo tu blog es. Todas las URL en tu blog serán procesadas porwww.example.com/blog

Nota: En la documentación, "sitio / sitio web de Wordpress" (en lugar de simplemente "sitio / sitio web") se refiere al directorio donde están instalados sus archivos de WordPress. En este caso, lo es www.example.com/blog: todo dentro de la blogcarpeta. El "sitio web de WordPress", en este escenario, no es lo mismo que su dominio, su raíz o su sitio web principal. Es un subconjunto de su sitio web general. Algo así como un sitio web dentro de un sitio web. Menciono esto ya que la terminología puede parecer poco clara o confusa, dada esta configuración particular.

Configuración alternativa de instalación de WordPress

Dando a WordPress su propio directorio , la sección Method II (With URL change).

Por ejemplo, muchas personas no quieren obstruir la carpeta raíz de su sitio web con todos los archivos de WordPress.
Quieren instalar wordpress en un subdirectorio, * pero tienen acceso al "blog" o al "sitio web de WordPress" como si los archivos estuvieran instalados en la raíz de la raíz del servidor del sitio web.

Esto es particularmente cierto cuando WordPress se utiliza para construir y ejecutar un sitio web completo que ni siquiera tiene un "blog".

Ejemplo 3:
el usuario accede a su "blog" en: www.example.com,
archivos de wordpress instalados en: www.example.com/wordpresso la carpeta raíz del sitio web de su servidor.

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

(Nota: esta configuración no funcionará "fuera de la caja" simplemente cambiando los valores de estas variables. Requiere cambios de configuración adicionales para funcionar correctamente).
Vea Cómo dar a WordPress su propio directorio , la sección titulada Method II (With URL change)sobre cómo hacer esto.

En este caso home_urly site_urldebe contener diferentes valores.

En esta configuración, usted quiere que su sitio web para funcionar exactamente como si se instalan los archivos de WordPress en el directorio raíz del servidor para su sitio web ...
PERO, por razones de organización en el servidor,
que en realidad tiene sus archivos de WordPress en una carpeta llamada wordpressen el servidor de directorio raíz para su sitio web.

Entonces, el usuario escribirá www.example.compara obtener su página de inicio de WordPress, en lugar dewww.example.com/wordpress

función wordpress <--> variable de base de datos <--> Wordpress Constant

Esta sección asume la configuración del Ejemplo 3 anterior.
URL de la barra de direcciones: www.example.com
archivos de wordpress: / directorio de wordpress

(Los otros casos son triviales: todas las variables / funciones mantienen / devuelven el mismo valor).

Cómo establecer los valores para site_urlyhome_url

Primero, permítanme señalar que siteurly homealmacenar valores devueltos por las funciones anteriores

1) Normalmente establece estos valores en el backend / panel de control / panel de administración de
Settings -> General ->
siteurl WordPress: Dirección de WordPress: https://www.example.com/wordpress
home Dirección del sitio: https://www.example.com

(no incluya barras inclinadas aquí, eso se configuraría en otro lugar)

2) Alternativamente, establece estos valores en su base de datos de WordPress:
wp_optionstabla ->

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

(no incluya barras inclinadas aquí, eso se configuraría en otro lugar)

3) Edite su wp-config.php
Definir estas constantes específicas para mantener sus valores
Definir WP_HOMEy WP_SITEURLconfiguraciones insertando estas líneas hacia la parte superior de su wp-config.phparchivo:

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 ** //
...    

(no incluya barras inclinadas aquí, eso se configuraría en otro lugar)

Referencia: WP_SITEURL y WP_HOME

NOTA: Esto es confuso
(realmente desearía que WordPress hubiera etiquetado la configuración de manera similar a sus nombres php,
como Wordpress Site Addressy / Home Page Addresso algo más explícito como location of WordPress Site core filesy browser url to access WordPress home page)

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

Ahora aquí es donde se pone difícil!

SI definió esas constantes en suwp-config.phparchivo, no importa qué valores tenga en su página de base de datos / configuración.
De hecho, no podrá modificar este valor a través del back-end (estará atenuado). Todavía puede modificar editando su base de datos, pero hacerlo no tendrá ningún efecto en su sitio, mientras que las constantes existan en su archivo wp-config.

Su archivo de configuración no cambiará los valores en su base de datos (o, por lo tanto, su página de configuración). En cambio, se ignorarán los valores de su página de base de datos / configuración . Los valores en wp-config anulan o tienen prioridad sobre la configuración de su base de datos.

Entonces ... para concluir (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 

Donde el valor de una constante WP tiene prioridad sobre un valor de wp_options / WP Settings.

El valor de registro de wp_options y el valor de Configuración de WP son los mismos.
Editar uno, por definición, edita el otro.
Son solo 2 formas diferentes de acceder a la misma variable.

Por otro lado, las constantes de WordPress son únicas e independientes.
Internamente, las constantes de WordPress (PHP) anulan sus contrapartes de db.
Si se define una constante en wp-config, no cambia la base de datos.
Pero internamente, WordPress siempre preferirá / usará su valor en lugar del db.

SherylHohman
fuente
3

Las funciones site_url()y home_url()son similares y pueden generar confusión en su funcionamiento.

La site_url()función recupera el valor del valor de siteurlla wp_optionstabla en su base de datos.

Esta es la URL de los archivos principales de WordPress.
Si sus archivos principales existen en un subdirectorio /wordpressen su servidor web, el valor sería http://example.com/wordpress.

La home_url()función recupera el valor de homela wp_optionstabla en su base de datos.

Esta es la dirección que desea que las personas visiten para ver su sitio web de WordPress.

Si existen los archivos del núcleo de WordPress en /wordpress, pero usted quiere que su URL del sitio web para ser http://example.comel valor de la vivienda debe ser http://example.com.

Nanhe Kumar
fuente
2

Para responder a su segunda pregunta:

P: Si eso es correcto, ¿puedo hacer que WordPress devuelva http://example.com/ ?

No puede, a menos que tome Giving WordPress sus propios pasos en el directorio . Usar esto significa que coloca los archivos principales de WordPress en /blogo /WordPressy luego index.phpen su raíz.

Si decide colocar WordPress dentro de su propio directorio, lo usaría home_url()para ir index.phpy site_url()obtener archivos principales y demás.

Referencias:
Codex para site_url
Codex para home_url
Codex para dar el propio directorio de Wordpress

xLRDxREVENGEx
fuente
-1

La forma más fácil de obtener la URL del sitio sin ningún subdirectorio ( http://example.com/ en lugar de http://example.com/blog ), simplemente use la barra invertida /

Por ejemplo, si escribe:

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

Creará un enlace que va a tu dominio

jake
fuente
Gracias por participar. Lamentablemente, esto no responde a la pregunta planteada por el OP. Hay muchas razones por las cuales una persona necesita usar las funciones de wordpress sobre las que OP pregunta. Es poco probable que OP simplemente quiera agregar un enlace a su página de inicio a través de html, como editando una publicación. Es más probable que OP esté editando un archivo de tema php o un archivo de complemento. En cualquier caso, están trabajando con php, no con html. Por último, aunque OP espera un valor sin /por este sitio, en un sitio diferente, OP puede esperar que se devuelva un subdirectorio. Depende de la configuración de WP para cada sitio.
SherylHohman