Qual è la differenza tra get_home_path () e ABSPATH?


27

Qual è la differenza tra get_home_path()e ABSPATH? Il punto di entrambi non è quello di puntare al root di installazione di WordPress?

Risposte:


33

Essi dovrebbero fare la stessa cosa, ma a certe condizioni, non possono.

Prima di tutto nota:

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,

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


Ben spiegato, anche se penso che gli sviluppatori di terze parti non dovrebbero usare né la costante né la funzione. Poiché WordPress può essere posizionato ovunque , posizionandolo al di fuori della radice del documento, vengono restituiti sia la costante che la funzione, ad esempio /var/apps/wordpressanziché /var/www/htdocs. Piuttosto usa $_SERVER['DOCUMENT_ROOT'], almeno se puoi assicurarti che la radice del documento non cambierebbe.
Fleuv,

@Fleuv In effetti è difficile ... $_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 :)
Adam

1
Questa soluzione è stata ben spiegata e ha funzionato esattamente come desiderato dopo che WP stava lanciando l'errore "non definito". Grazie;)
Chris Sprague il

-1

Sto usando home_url () per il collegamento alla pagina "Home" di WP. A volte, site_url () potrebbe non essere il tuo home_url () . Puoi definire una pagina specifica come homepage in Wordpress.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.