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

17 jun 2011, 21:07:10
Vistas: 161K
Votos: 93

Mi entendimiento es que site_url() devuelve la ubicación donde se encuentran los archivos del núcleo de WordPress.

Si mi blog está alojado en http://example.com/blog entonces site_url() devuelve http://example.com/blog

Pero entonces, ¿en qué se diferencia home_url()? Para mí, home_url() devuelve lo mismo: http://example.com/blog

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

2
Comentarios

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

Volomike Volomike
30 abr 2012 02:33:53
Todas las respuestas a la pregunta 7
6
78

Estás haciendo dos preguntas al mismo tiempo:

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

Aquí están las respuestas, las cuales confirmé con Andrew Nacin, un desarrollador principal de WordPress, además de realizar algunas pruebas en el servidor para verificar lo que Andrew me dijo.

Pregunta #1

En Ajustes > Generales de wp-admin, home_url() hace referencia al campo etiquetado como "Dirección del sitio (URL)". ¿Confuso, cierto? Sí, dice "Dirección del sitio", por lo que podrías asumir que es site_url(), pero estarías equivocado. Haz tu propia prueba y lo verás. (Puedes colocar temporalmente un campo echo H1 con los valores de site_url() y home_url() en la parte superior de tu functions.php del tema).

Mientras tanto, site_url() hace referencia al campo etiquetado como "Dirección de WordPress (URL)" en Ajustes > Generales.

Por lo tanto, si deseas hacer referencia a una ruta física, como llamar a la ruta de una carpeta de plugin en la URL para cargar una imagen, o llamar a la ruta de una carpeta del tema para cargar una imagen, en realidad deberías usar otras funciones para eso - revisa plugins_url() y get_template_directory_uri().

site_url() siempre será la ubicación donde puedes acceder al sitio agregando /wp-admin al final, mientras que home_url() no sería confiablemente esta ubicación.

home_url() sería donde has configurado tu página de inicio estableciendo el campo "Dirección del sitio (URL)" en Ajustes > Generales.

Pregunta #2

Entonces, si he colocado mi blog en http://ejemplo.com/blog, y ejemplo.com es solo un sitio estático donde tengo un tema de portafolio, entonces este sería un escenario que se alinea con tu pregunta. En tal caso, usaría este fragmento de código:

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

    if ( ! $asParts )
      wp_die( 'ERROR: Path corrupt for parsing.' ); // reemplaza esto con un mejor resultado de error

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

    return $sReturn;
}
30 abr 2012 03:54:56
Comentarios

¿Tienes un enlace a la discusión con A.Nacin?

kaiser kaiser
30 abr 2012 04:02:35

Fue por correo electrónico. Lo siento. Ah, y gracias por la edición, recordaré ese cambio de sintaxis la próxima vez.

Volomike Volomike
30 abr 2012 05:07:21

Me tomó mucho tiempo y bastante dolor darme cuenta de que 'Dirección del sitio (URL)' = 'home' y 'Dirección de WordPress (URL)' = 'siteurl'. Definitivamente deberían cambiar esas etiquetas.

Jbm Jbm
26 ene 2014 05:33:53

¡Tu respuesta a la segunda pregunta ha dado en el clavo!

Devner Devner
19 feb 2018 10:08:58

Parece que hay un error tipográfico en $sPort = ! empty( $sPort ) ? ":$nPort" : '';. Creo que ! empty( $sPort ) debería ser ! empty( $nPort ). De lo contrario, ":$nPort" nunca se alcanzará, por lo tanto $sPort = '' y un puerto nunca se añadirá en la antepenúltima línea.

Ferris Ferris
26 may 2023 00:30:49

@Ferris tienes razón y lo he editado. Gracias.

Volomike Volomike
30 may 2023 06:41:55
Mostrar los 1 comentarios restantes
0
35

##TLDR:
En una instalación no estándar, puedes colocar tus archivos de WordPress en un subdirectorio del directorio raíz de tu sitio web.
...y aún así permitir que tus visitantes accedan a tu "sitio web" de WordPress desde la URL raíz de tu dominio, sin necesidad de añadir el nombre del subdirectorio:
(por ejemplo: www.example.com vs www.example.com/wordpress):

Función WP  | wp_options. | Constante WP  | lo que representa          | Etiqueta en Ajustes WP | Ejemplo     
-------------------------------------------------------------------------------------------------------------------------------------
`site_url()` | `siteurl`   | `WP_SITEURL` | Ubicación de archivos WP   | Dirección de WordPress | https://www.example.com/wordpress
`home_url()` | `home`      | `WP_HOME`    | Barra de direcciones navegador | Dirección del Sitio   | https://www.example.com 

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

##Diferentes Configuraciones para WordPress

En las instalaciones más estándar de WordPress, home_url y site_url tendrán el mismo valor.
Sin embargo, 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 ya lo haya incluido).

(// es el protocolo relativo y funcionará tanto para http:// como para https://)

Instalaciones Estándar (incluyendo Instalaciones "Un Clic")

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

La instalación de 5 minutos de WordPress establece estos dos valores iguales - los archivos de WordPress se instalarán en la misma carpeta que deseas que la gente use para acceder a tu sitio web, o la parte del blog de WordPress del sitio web de tu servidor.

Ejemplo 1:
el usuario accede a tu blog en: www.example.com,
archivos de WordPress instalados en: www.example.com, o la carpeta raíz del sitio web de tu servidor.

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

Ejemplo 2:
el usuario accede a tu blog en: www.example.com/blog,
archivos de WordPress instalados en: www.example.com/blog, o en la carpeta blog dentro del raíz de tu sitio web.

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

En este caso www.example.com es el sitio web principal, y www.example.com/blog es la raíz de tu blog.
Aquí tu blog está separado de, y funciona como un subconjunto de, tu sitio web principal.
En este caso, tu sitio web principal no está controlado, definido o estilizado por WordPress.
Solo tu blog lo está. Todas las URLs en tu blog estarán precedidas por www.example.com/blog

Nota: En la documentación, "sitio web de WordPress" (a diferencia de simplemente "sitio web") se refiere al directorio donde están instalados tus archivos de WordPress. En este caso, es www.example.com/blog - todo dentro de la carpeta blog. El "sitio web de WordPress", en este escenario, no es lo mismo que tu dominio, tu raíz o tu sitio web principal. Es un subconjunto de tu 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 Método II (Con cambio de URL).

Por ejemplo, muchas personas no quieren saturar la carpeta raíz de su sitio web con todos los archivos de WordPress.
Quieren instalar WordPress en un subdirectorio, *pero tener el "blog" o "sitio web de WordPress" accesible como si los archivos estuvieran instalados en la raíz del servidor para el sitio web.

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

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

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

(Nota: esta configuración no funcionará "fuera de la caja" solo cambiando los valores de estas variables. Requiere cambios de configuración adicionales para funcionar correctamente)
Ver Dando a WordPress su propio Directorio, la sección titulada Método II (Con cambio de URL) para saber cómo hacer esto.

En este caso home_url y site_url deben tener valores diferentes.

En esta configuración, deseas que tu sitio web funcione exactamente como si los archivos de WordPress estuvieran instalados en el directorio raíz del servidor para tu sitio web...
PERO, por motivos de organización en el servidor,
realmente tienes tus archivos de WordPress en una carpeta llamada wordpress en el directorio raíz del servidor para tu sitio web.

Así, el usuario escribirá www.example.com para obtener tu página de inicio de WordPress, en lugar de www.example.com/wordpress

función wordpress <--> variable de base de datos <--> Constante WordPress

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

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

Cómo establecer los valores para site_url y home_url

Primero, permíteme notar que siteurl y home almacenan los valores devueltos por las funciones anteriores

  1. Normalmente estableces estos valores en el panel de administración de WordPress:
    Ajustes -> Generales ->
    siteurl Dirección de WordPress: https://www.example.com/wordpress
    home Dirección del Sitio: https://www.example.com

(no incluyas barras diagonales al final aquí - eso se configuraría en otro lugar)

  1. Alternativamente, puedes establecer estos valores en tu base de datos de WordPress:
    tabla wp_options ->

    options_name | options_value

    siteurl | https://www.example.com/wordpress
    home | https://www.example.com

(no incluyas barras diagonales al final aquí - eso se configuraría en otro lugar)

  1. Edita tu wp-config.php
    Define estas constantes específicas para guardar tus valores
    Define los ajustes WP_HOME y WP_SITEURL insertando estas líneas hacia el inicio de tu archivo wp-config.php:

    define('WP_SITEURL','http://example.com/wordpress'); // archivos core de WordPress define('WP_HOME','http://example.com'); // URL en barra de direcciones

    // ** Ajustes MySQL - Puedes obtener esta info de tu proveedor de hosting ** // ...
    (no incluyas barras diagonales al final 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 los Ajustes similar a sus nombres en php,
como Dirección del Sitio WordPress y Dirección de la Página de Inicio o algo más explícito como ubicación de los archivos core del Sitio WordPress y URL en navegador para acceder a la página de inicio de WordPress)

`WP_SITEURL` <--> `site_url()` <--> `siteurl` <--> Dirección de WordPress <--> /wordpress   
`WP_HOME`    <--> `home_url()` <--> `home`    <--> Dirección del Sitio      <--> /

¡Aquí es donde se pone complicado!

SI definiste esas constantes en tu archivo wp-config.php, no importa qué valores tengas en tu base de datos/página de ajustes.
De hecho, no podrás modificar este valor desde el panel de administración (aparecerá en gris). Aún puedes modificarlo editando tu base de datos, pero hacerlo no tendrá efecto en tu sitio, mientras las constantes existan en tu archivo wp-config.

Tu archivo de configuración no cambiará los valores en tu base de datos (o por lo tanto en tu página de ajustes). En su lugar, los valores de tu base de datos/página de ajustes serán ignorados. Los valores en wp-config anulan o tienen prioridad sobre los ajustes de tu base de datos.

#Para resumir (TLDR) :

Función WP  | wp_options. | Constante WP  | lo que representa          | Etiqueta en Ajustes WP | Ejemplo     
-------------------------------------------------------------------------------------------------------------------------------------
`site_url()` | `siteurl`   | `WP_SITEURL` | Ubicación de archivos WP   | Dirección de WordPress | https://www.example.com/wordpress
`home_url()` | `home`      | `WP_HOME`    | Barra de direcciones navegador | Dirección del Sitio   | https://www.example.com 

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

El valor del registro wp_options y el valor de Ajustes WP son el mismo.
Editar uno, por definición edita el otro.
Es solo 2 formas diferentes de acceder a la misma variable.

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

5 ene 2019 00:44:14
5

Si deseas instalar WordPress en un directorio pero que la página de inicio del sitio esté en la raíz de tu dominio, necesitas mover el archivo principal index.php a la raíz de tu dominio y editar la declaración require para que apunte dentro de tu directorio.

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

17 jun 2011 21:12:30
Comentarios

Siempre uso home_url() ya que estoy en modo de red wp. Solo una vez he dado a WordPress su propio directorio y no fue de mi agrado. Sin embargo, en algunos sitios sí que uso wp_content_dir.

xLRDxREVENGEx xLRDxREVENGEx
17 jun 2011 21:29:04

No tengo experiencia con multisitio, así que no estoy familiarizado con cómo funciona esto en esa situación. Prefiero instalar WP en un directorio para mantener las cosas ordenadas y no saturar la raíz.

Milo Milo
17 jun 2011 21:34:07

Mi estructura de archivos es probablemente una de las más ordenadas que hay. home/usr/public_html/sitio1 home/usr/public_html/sitio2 y así sucesivamente, y luego el wp_content_dir suele estar en una CDN.

xLRDxREVENGEx xLRDxREVENGEx
17 jun 2011 21:39:11

si una instalación de WP fuera lo único que hubiera, estaría bien, pero principalmente trabajo en servidores de otras personas con cientos de archivos y directorios esparcidos por todas partes.

Milo Milo
17 jun 2011 21:46:01

¿Es correcto mi entendimiento de que site_url() y home_url() son iguales, a menos que uno configure su directorio de instalación de WordPress para que sea diferente a la raíz?

Praveen Praveen
20 jun 2011 22:00:52
0

Las funciones site_url() y home_url() son similares y pueden generar confusión sobre cómo funcionan.

La función site_url() recupera el valor de siteurl en la tabla wp_options de tu base de datos.

Esta es la URL que apunta a los archivos principales de WordPress.
Si tus archivos principales están en un subdirectorio como /wordpress en tu servidor web, el valor sería http://ejemplo.com/wordpress.

La función home_url() recupera el valor de home en la tabla wp_options de tu base de datos.

Esta es la dirección que quieres que visiten las personas para ver tu sitio web WordPress.

Si tus archivos principales de WordPress están en /wordpress, pero quieres que la URL de tu sitio web sea http://ejemplo.com, el valor de home debería ser http://ejemplo.com.

17 abr 2013 10:41:34
0

Para responder a tu segunda pregunta:

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

No puedes, a menos que sigas los pasos de Darle a WordPress su propio directorio. Usando esto significa que colocas los archivos principales de WordPress en /blog o /WordPress y luego el index.php en tu raíz.

Si decides poner WordPress dentro de su propio directorio, entonces usarías home_url() para ir a index.php y site_url() para obtener los archivos principales y demás.

Referencias:
Codex para site_url
Codex para home_url
Codex para Darle a WordPress su propio directorio

17 jun 2011 21:37:10
1

Tu primera pregunta ha sido respondida, pero creo que la forma más sencilla de recuperar tu dominio raíz es con la función bloginfo('url'); además, bloginfo() tiene otros parámetros que puede devolver, revisa la documentación.

También existe get_bloginfo() por si deseas envolver el contenido en una variable.

10 oct 2023 20:46:19
Comentarios

Aunque este enlace pueda responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace como referencia. Las respuestas que solo contienen enlaces pueden volverse inválidas si la página enlazada cambia. - De la Revisión

cjbj cjbj
14 oct 2023 12:45:50
1
-1

La forma más sencilla de obtener la URL del sitio sin subdirectorios ( http://example.com/ en lugar de http://example.com/blog ), simplemente usa la barra diagonal /

Por ejemplo, si escribes:

<a href="/">url del dominio</a>

Creará un enlace que dirige a tu dominio

5 may 2016 12:12:41
Comentarios

Gracias por participar. Lamentablemente, esto no responde a la pregunta planteada por el OP. Hay muchas razones por las que una persona necesita usar las funciones de WordPress que el OP menciona. Es poco probable que el OP simplemente quiera añadir un enlace a su página de inicio mediante HTML, como editando una publicación. Es más probable que el OP esté editando un archivo PHP de un tema o un plugin. En cualquier caso, están trabajando con PHP, no con HTML. Finalmente, aunque el OP esperaba un valor sin / para este sitio, en un sitio diferente, el OP podría esperar que se devolviera un subdirectorio. Depende de la configuración de WP para cada sitio.

SherylHohman SherylHohman
5 ene 2019 04:12:55