¿Cuál es la diferencia entre get_home_path () y ABSPATH?

27

¿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?

Borek Bernard
fuente

Respuestas:

33

Ellos deben hacer lo mismo, pero bajo ciertas condiciones, tal vez no.

En primer lugar nota:

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,

Si registra una llamada a ABSPATH, entonces el resultado será /var/www/htdocs/devcuál no es la raíz de su instalación. La raíz de su instalación es /var/www/htdocs.

ABSPATHse define por primera vez en wp-load.phpqué se ubicará, por lo /var/www/htdocs/dev/wp-load.phptanto, aquí es donde ABSPATHtomará su definición.

Si inspecciona get_home_path()más, notará que si el site_urly home_urldifieren, 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 ABSPATHpuede 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.phpya se ha incluido lo mencionado anteriormente.

Como ejemplo, usar get_home_path()dentro del admin_initgancho está bien, mientras que usarlo dentro initno 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

Adán
fuente
Bien explicado, aunque creo que los desarrolladores de terceros no deberían usar la constante ni la función. Debido a que WordPress se puede ubicar en cualquier lugar , colocarlo fuera de la raíz del documento hace que la constante y la función regresen, por ejemplo, en /var/apps/wordpresslugar 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.
Fleuv
@Fleuv De hecho, esto es complicado ... incluso $_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 :)
Adam
1
Esta solución se explicó bien y funcionó exactamente como se deseaba después de que WP arrojara el error "no definido". Gracias;)
Chris Sprague
-1

Estoy usando home_url () para vincular a la página "Inicio" de WP. A veces, site_url () puede no ser realmente su home_url () . Puede definir una página específica como página de inicio en Wordpress.

mdikici
fuente