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.phpdeve 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/devche non è la radice dell'installazione. La radice della tua installazione è /var/www/htdocs.
ABSPATHviene prima definito in wp-load.phpcui si troverà /var/www/htdocs/dev/wp-load.phpquindi da qui ABSPATHprenderà la sua definizione.
Se si esamina get_home_path()ulteriormente, si noterà che se il site_urle home_urldifferisce, 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 ABSPATHpuò 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.phpgià citato è già stato incluso.
Ad esempio, usare get_home_path()all'interno del admin_initgancio 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/wordpressanziché/var/www/htdocs. Piuttosto usa$_SERVER['DOCUMENT_ROOT'], almeno se puoi assicurarti che la radice del documento non cambierebbe.