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

27

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

Borek Bernard
fonte

Respostas:

33

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

Antes de mais nada, note:

Em relação à entrada do codex,

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 de retorno retornará o caminho da subpasta se você instalou o WordPress em um subdiretório. Isso é 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 objetivo da função.

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

Se você registrar uma chamada para ABSPATH, o resultado será o /var/www/htdocs/devque 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.phpque será localizado, /var/www/htdocs/dev/wp-load.phpportanto, é de onde ABSPATHtirará sua definição.

Se você inspecionar get_home_path()ainda mais, notará que, se o site_urle for home_urldiferente, será utilizada uma sub-string do caminho governado pela posição (primeira ocorrência) do subdiretório encontrado na 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 ABSPATHpode retornar resultados diferentes se você tiver o WordPress instalado em um subdiretório.

Em segundo lugar, a chamada get_home_path()deve ser feita em um contexto em que o mencionado acima wp-admin/includes/file.phpjá foi incluído.

Por exemplo, o uso get_home_path()dentro do admin_initgancho é bom, enquanto o uso dentro initnão é.

Como esse arquivo é incluído apenas dentro do contexto do administrador (painel), se você absolutamente precisar dele fora desse contexto, 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

Adão
fonte
Bem explicado, embora eu ache que desenvolvedores de terceiros não devem usar a constante nem a função. Como o WordPress pode ser localizado em qualquer lugar , colocá-lo fora da raiz do documento faz com que a constante e a função retornem, por exemplo, em /var/apps/wordpressvez de /var/www/htdocs. Em vez disso $_SERVER['DOCUMENT_ROOT'], use pelo menos se você pode garantir que a raiz do documento não seja alterada.
Fleuv
@ Fleuv De fato, este é um assunto complicado ... ainda $_SERVER['DOCUMENT_ROOT']tem seus problemas ... por exemplo, não pode ser definido ou definido corretamente e assim por diante. Há outras maneiras em que posso pensar para lidar com isso ... Cada uma com suas próprias advertências. Muito divertido :)
Adam
11
Esta solução foi bem explicada e funcionou exatamente como desejado após o WP lançar o erro "não definido". Obrigado;)
Chris Sprague
-1

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

mdikici
fonte