Qual è la differenza tra get_home_path()
e ABSPATH
? Il punto di entrambi non è quello di puntare al root di installazione di WordPress?
Qual è la differenza tra get_home_path()
e ABSPATH
? Il punto di entrambi non è quello di puntare al root di installazione di WordPress?
Risposte:
Essi dovrebbero fare la stessa cosa, ma a certe condizioni, non possono.
Prima di tutto nota:
wp-admin/includes/file.php
deve essere incluso nel contesto altrimenti la chiamata get_home_path()
porterà a chiamare una funzione indefinita.Per quanto riguarda la voce del codice,
Descrizione
Ottieni il percorso assoluto del filesystem alla radice dell'installazione di WordPress.
Valore di ritorno
Percorso completo del filesystem alla radice dell'installazione di WordPress. Se installi wordpress nella sottocartella, mostrerà la posizione della sottocartella
Esempi
$path = get_home_path(); print "Path: ".$path; // Return "Path: /var/www/htdocs/" or "Path: /var/www/htdocs/wordpress/" if it is subfolder
Indica che il valore restituito restituirà il percorso della sottocartella se è stato installato WordPress in una sottodirectory. Questo è in realtà errato.
get_home_path()
restituirà la directory principale dell'installazione di WordPress, anche se è installata in una sottodirectory. Questo è lo scopo della funzione.
Supponiamo che l'installazione di WordPress sia all'interno di una sottodirectory denominata /dev
,
site_url
) (ad es. / var / www / htdocs / dev)home_url
)Se si registra una chiamata ABSPATH
, il risultato sarà, /var/www/htdocs/dev
che non è la radice dell'installazione. La radice della tua installazione è /var/www/htdocs
.
ABSPATH
viene prima definito in wp-load.php
cui si troverà /var/www/htdocs/dev/wp-load.php
quindi da qui ABSPATH
prenderà la sua definizione.
Se si esamina get_home_path()
ulteriormente, si noterà che se il site_url
e home_url
differisce, viene presa una sottostringa del percorso governato dalla posizione (prima occorrenza) della sottodirectory trovata all'interno della stringa.
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 );
}
Pertanto, di conseguenza, get_home_path()
e ABSPATH
può restituire risultati diversi se WordPress è installato in una sottodirectory.
In secondo luogo, la chiamata get_home_path()
deve essere effettuata in un contesto in cui il wp-admin/includes/file.php
già citato è già stato incluso.
Ad esempio, usare get_home_path()
all'interno del admin_init
gancio va bene dove non lo init
è usarlo all'interno .
Dato che questo file viene incluso solo all'interno del contesto di amministrazione (dashboard), se ne hai assolutamente bisogno al di fuori di questo contesto, dovrai includere tu stesso il file prima di chiamare la funzione,
require_once(ABSPATH . 'wp-admin/includes/file.php');
Ironia della sorte (o no) che usa ABSPATH
: D
$_SERVER['DOCUMENT_ROOT']
ha anche i suoi problemi ... ad esempio non può essere impostato o impostato correttamente e così via. Ci sono altri modi a cui riesco a pensare anche per gestire questo ... Ognuno con i propri avvertimenti. Molto divertente :)
/var/apps/wordpress
anziché/var/www/htdocs
. Piuttosto usa$_SERVER['DOCUMENT_ROOT']
, almeno se puoi assicurarti che la radice del documento non cambierebbe.