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?
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?
Respostas:
Eles deveriam fazer a mesma coisa, mas sob certas condições, talvez não.
Antes de mais nada, note:
wp-admin/includes/file.php
deve ser incluído no contexto, caso contrário, a chamada get_home_path()
levará à chamada de uma função indefinida.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
,
site_url
) (por exemplo, / var / www / htdocs / dev)home_url
)Se você registrar uma chamada para ABSPATH
, o resultado será o /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 será localizado, /var/www/htdocs/dev/wp-load.php
portanto, é de onde ABSPATH
tirará sua definição.
Se você inspecionar get_home_path()
ainda mais, notará que, se o site_url
e for home_url
diferente, 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 ABSPATH
pode 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.php
já foi incluído.
Por exemplo, o uso get_home_path()
dentro do admin_init
gancho é bom, enquanto o uso dentro init
nã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
$_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 :)
/var/apps/wordpress
vez 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.