Jaka jest różnica między get_home_path()
i ABSPATH
? Czy nie ma sensu wskazywać na root instalacyjny WordPress?
Oni powinni zrobić to samo, ale pod pewnymi warunkami, nie może.
Przede wszystkim uwaga:
wp-admin/includes/file.php
muszą być uwzględnione w kontekście, w przeciwnym razie wywołanie get_home_path()
doprowadzi do wywołania niezdefiniowanej funkcji.W odniesieniu do wpisu kodeksu
Opis
Uzyskaj bezwzględną ścieżkę systemu plików do katalogu głównego instalacji WordPress.
Zwracana wartość
Pełna ścieżka systemu plików do katalogu głównego instalacji WordPress. Jeśli zainstalujesz wordpress w podfolderze, wyświetli się lokalizacja podfolderu
Przykłady
$path = get_home_path(); print "Path: ".$path; // Return "Path: /var/www/htdocs/" or "Path: /var/www/htdocs/wordpress/" if it is subfolder
Wskazuje, że zwracana wartość zwróci ścieżkę do podfolderu, jeśli WordPress został zainstalowany w podkatalogu. To jest w rzeczywistości niepoprawne.
get_home_path()
zwróci katalog główny instalacji WordPress, nawet jeśli jest on zainstalowany w podkatalogu. Taki jest cel funkcji.
Załóżmy, że instalacja WordPress znajduje się w podkatalogu o nazwie /dev
,
site_url
) (np. / var / www / htdocs / dev)home_url
)Jeśli zarejestrujesz połączenie z ABSPATH
, to wynikiem będzie, /var/www/htdocs/dev
który nie jest katalogiem głównym instalacji. Katalog główny twojej instalacji to /var/www/htdocs
.
ABSPATH
jest najpierw zdefiniowany, w wp-load.php
którym będzie się znajdować, /var/www/htdocs/dev/wp-load.php
stąd ABSPATH
bierze się jego definicja.
Jeśli przyjrzysz się get_home_path()
dalej, zauważysz, że jeśli site_url
i home_url
różnią się, to podciąg jest brany ze ścieżki rządzonej przez pozycję (pierwsze wystąpienie) podkatalogu znalezionego w ciągu.
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 );
}
W związku z tym, w wyniku tego, get_home_path()
a ABSPATH
może zwracać różne wyniki, jeśli masz WordPress zainstalowane w podkatalogu.
Po drugie, połączenia get_home_path()
należy wykonywać w kontekście, w którym wspomniano wp-admin/includes/file.php
już o tym.
Na przykład używanie get_home_path()
wewnątrz admin_init
haka jest w porządku, gdy używanie wewnątrz init
nie jest.
Ponieważ plik ten jest dołączany tylko w kontekście administratora (pulpitu nawigacyjnego), jeśli absolutnie potrzebujesz go poza tym kontekstem, musisz sam go dołączyć przed wywołaniem funkcji,
require_once(ABSPATH . 'wp-admin/includes/file.php');
Jak na ironię (lub nie), która wykorzystuje ABSPATH
: D
/var/apps/wordpress
Zamiast/var/www/htdocs
. Raczej użyj$_SERVER['DOCUMENT_ROOT']
, przynajmniej jeśli możesz zapewnić, że katalog główny dokumentu się nie zmieni.$_SERVER['DOCUMENT_ROOT']
ma swoje problemy ... np. Może nie być ustawiona lub ustawiona poprawnie i tak dalej. Są też inne sposoby, w jakie mogę wymyślić, aby sobie z tym poradzić ... Każdy z własnymi zastrzeżeniami. Dużo zabawy :)Korzystam z home_url () do linkowania do strony głównej w WP. Czasami site_url () może nie być tak naprawdę twoim home_url () . Możesz zdefiniować specjalną stronę jako stronę główną w Wordpress.
źródło