Estás haciendo dos preguntas a la vez:
- ¿Cuál es la diferencia entre
home_url()
y site_url()
?
- ¿Cómo consigo que WordPress devuelva la raíz del URL sin el subdirectorio donde está instalado?
Aquí están las respuestas, y confirmé con Andrew Nacin, un desarrollador central de WordPress, además de realizar algunas pruebas de servidor para confirmar lo que Andrew me dijo.
Pregunta # 1
En General > La configuración de wp-admin, home_url()
hace referencia al campo etiquetado "Dirección del sitio (URL)". Confuso, ¿eh? Sí, dice "Dirección del sitio", por lo que podría asumir site_url()
, pero estaría equivocado . Ejecuta tu propia prueba y ya verás. (Puedes eliminar temporalmente un campo echo H1
con los valores site_url()
y home_url()
en la parte superior de las funciones de tu tema.php.)
Mientras tanto, site_url()
hace referencia al campo etiquetado "Dirección de WordPress (URL)" en General > Ajustes.
Por lo tanto, si desea hacer referencia a una ruta física tal 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, debería usar otras funciones. para esos, mira plugins_url()
y get_template_directory_uri()
.
El site_url()
siempre será la ubicación donde se puede llegar al sitio al agregar /wp-admin
al final, mientras que home_url()
no sería de manera confiable esta ubicación.
El home_url()
sería donde configuró su página de inicio configurando General > Configuración del campo "Dirección del sitio (URL)".
Pregunta # 2
Entonces, si he colocado mi blog en http://example.com/blog
, y example.com
es solo un sitio estático en el que tengo un tema de cartera, entonces este sería un escenario que se alinea con su pregunta. En tal caso, entonces 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;
}