Qual é a diferença entre get_home_path () e ABSPATH?

23

Qual é a diferença entre get_home_path() e ABSPATH ? Não é o ponto de ambos apontar para a raiz de instalação do WordPress?

    
por Borek Bernard 15.05.2015 / 13:53

2 respostas

30

Eles devem fazer a mesma coisa, mas sob certas condições, não podem.

Antes de tudo, note:

Em relação à entrada do códice,

  

Descrição

     

Obtenha o caminho absoluto do sistema de arquivos para a raiz da instalação do WordPress.

     

Valor de retorno

     

Caminho completo do sistema de arquivos para a raiz da instalação do WordPress. Se você instalar o wordpress na subpasta, ele mostrará o local da subpasta

     

Exemplos

$path = get_home_path();
print "Path: ".$path; // Return "Path: /var/www/htdocs/" or "Path: /var/www/htdocs/wordpress/" if it is subfolder

Ele afirma que o valor retornado retornará o caminho da subpasta se você instalou o WordPress em um subdiretório. Isto é, de fato, incorreto.

get_home_path() retornará o diretório raiz da sua instalação do WordPress, mesmo que esteja instalado em um subdiretório. Esse é o propósito da função.

Suponha que sua instalação do WordPress esteja dentro de um subdiretório chamado /dev ,

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

Se você registrar uma chamada para ABSPATH , o resultado será, /var/www/htdocs/dev , que é não a raiz da sua instalação. A raiz da sua instalação é /var/www/htdocs .

ABSPATH é definido pela primeira vez em wp-load.php , que estará localizado em /var/www/htdocs/dev/wp-load.php , portanto é aqui que ABSPATH terá sua definição.

Se você inspecionar o get_home_path() , mais você notará que, se os site_url e home_url forem diferentes, então uma sub-string é tomada do caminho governado pela posição (primeira ocorrência) do subdiretório encontrado dentro da string.

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 );
}

Portanto, como resultado disso, get_home_path() e ABSPATH podem retornar resultados diferentes se você tiver o WordPress instalado em um subdiretório.

Em segundo lugar, chamar get_home_path() deve ser feito em um contexto em que o afortmentioned wp-admin/includes/file.php já foi incluído.

Como exemplo, usando get_home_path() dentro do admin_init hook está bem onde como usá-lo em init não é.

Vendo que este arquivo só é incluído dentro do contexto admin (painel), se você absolutamente precisar dele fora deste contexto, você precisará incluir o arquivo antes de chamar a função,

require_once(ABSPATH . 'wp-admin/includes/file.php');

Ironicamente (ou não), que usa ABSPATH : D

    
por userabuser 15.05.2015 / 15:49
-1

Estou usando o home_url () para vincular à página "Início" do WP. Às vezes, site_url () pode não ser realmente seu home_url () . Você pode definir uma página específica como página inicial no Wordpress.

    
por mdikici 23.07.2018 / 12:20

Tags