¿Cuál es la diferencia entre get_home_path()
y ABSPATH
? ¿No es el punto de ambos apuntar a la raíz de instalación de WordPress?
¿Cuál es la diferencia entre get_home_path()
y ABSPATH
? ¿No es el punto de ambos apuntar a la raíz de instalación de WordPress?
Respuestas:
Ellos deben hacer lo mismo, pero bajo ciertas condiciones, tal vez no.
En primer lugar nota:
wp-admin/includes/file.php
debe incluirse en el contexto; de lo contrario, llamar get_home_path()
provocará una función indefinida.En cuanto a la entrada del códice,
Descripción
Obtenga la ruta absoluta del sistema de archivos a la raíz de la instalación de WordPress.
Valor de retorno
Ruta completa del sistema de archivos a la raíz de la instalación de WordPress. Si instala WordPress en una subcarpeta, mostrará la ubicación de la subcarpeta
Ejemplos
$path = get_home_path(); print "Path: ".$path; // Return "Path: /var/www/htdocs/" or "Path: /var/www/htdocs/wordpress/" if it is subfolder
Establece que el valor de retorno devolverá la ruta de la subcarpeta si ha instalado WordPress en un subdirectorio. De hecho, esto es incorrecto.
get_home_path()
devolverá el directorio raíz de su instalación de WordPress, incluso si está instalado en un subdirectorio. Ese es el propósito de la función.
Suponga que su instalación de WordPress está dentro de un subdirectorio llamado /dev
,
site_url
) (por ejemplo, / var / www / htdocs / dev)home_url
)Si registra una llamada a ABSPATH
, entonces el resultado será /var/www/htdocs/dev
cuál no es la raíz de su instalación. La raíz de su instalación es /var/www/htdocs
.
ABSPATH
se define por primera vez en wp-load.php
qué se ubicará, por lo /var/www/htdocs/dev/wp-load.php
tanto, aquí es donde ABSPATH
tomará su definición.
Si inspecciona get_home_path()
más, notará que si el site_url
y home_url
difieren, se toma una subcadena de la ruta gobernada por la posición (primera aparición) del subdirectorio que se encuentra dentro de la cadena.
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 );
}
Por lo tanto, como resultado de esto, get_home_path()
y ABSPATH
puede devolver resultados diferentes si tiene WordPress instalado en un subdirectorio.
En segundo lugar, la llamada get_home_path()
debe realizarse en un contexto en el que wp-admin/includes/file.php
ya se ha incluido lo mencionado anteriormente.
Como ejemplo, usar get_home_path()
dentro del admin_init
gancho está bien, mientras que usarlo dentro init
no lo está.
Como este archivo solo se incluye desde el contexto del administrador (tablero), si lo necesita fuera de este contexto, deberá incluir el archivo usted mismo antes de llamar a la función,
require_once(ABSPATH . 'wp-admin/includes/file.php');
Irónicamente (o no) que usa ABSPATH
: D
$_SERVER['DOCUMENT_ROOT']
tiene sus problemas ... por ejemplo, no se puede configurar o configurar correctamente, etc. También puedo pensar en otras formas de manejar esto ... Cada una con sus propias advertencias. Muy divertido :)
/var/apps/wordpress
lugar de/var/www/htdocs
. En lugar de usar$_SERVER['DOCUMENT_ROOT']
, al menos si puede asegurarse de que la raíz del documento no cambie.