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

23

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

    
pregunta Borek Bernard 15.05.2015 - 13:53

2 respuestas

30

Ellos deberían hacer lo mismo, pero bajo ciertas condiciones, pueden no hacerlo.

Primera nota de todos:

Con respecto 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 la 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

Indica 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 ,

  • enlace ( site_url ) (por ejemplo, / var / www / htdocs / dev)
  • enlace ( home_url )

Si registra una llamada a ABSPATH , el resultado será /var/www/htdocs/dev , que es no 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 , que se ubicará en /var/www/htdocs/dev/wp-load.php , por lo que aquí es donde ABSPATH tomará su definición.

Si inspecciona get_home_path() , observará que si difieren site_url y home_url , luego se toma una subcadena de la ruta gobernada por la posición (primera vez) del subdirectorio encontrado 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 pueden devolver resultados diferentes si tiene WordPress instalado en un subdirectorio.

En segundo lugar, llamar a get_home_path() se debe hacer en un contexto en el que afortmentioned wp-admin/includes/file.php ya se ha incluido.

Como ejemplo, utilizar get_home_path() dentro del admin_init hook está bien, ya que usarlo dentro de init no es.

Al ver que este archivo solo se incluye desde el contexto de administración (panel de control), si es absolutamente necesario que esté 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

    
respondido por el userabuser 15.05.2015 - 15:49
-1

Estoy usando home_url () para enlazar 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.

    
respondido por el mdikici 23.07.2018 - 12:20

Lea otras preguntas en las etiquetas