Was ist der Unterschied zwischen get_home_path()und ABSPATH? Ist es nicht der Sinn von beidem, auf das WordPress-Installationsstammverzeichnis zu verweisen?
Was ist der Unterschied zwischen get_home_path()und ABSPATH? Ist es nicht der Sinn von beidem, auf das WordPress-Installationsstammverzeichnis zu verweisen?
Antworten:
Sie sollten dasselbe tun, aber unter bestimmten Umständen auch nicht.
Zuallererst Anmerkung:
wp-admin/includes/file.phpmuss im Kontext enthalten sein. Andernfalls get_home_path()wird eine undefinierte Funktion aufgerufen.In Bezug auf den Codex-Eintrag,
Beschreibung
Ermitteln Sie den absoluten Dateisystempfad zum Stammverzeichnis der WordPress-Installation.
Rückgabewert
Vollständiger Dateisystempfad zum Stammverzeichnis der WordPress-Installation. Wenn Sie WordPress im Unterordner installieren, wird der Speicherort des Unterordners angezeigt
Beispiele
$path = get_home_path(); print "Path: ".$path; // Return "Path: /var/www/htdocs/" or "Path: /var/www/htdocs/wordpress/" if it is subfolder
Der Rückgabewert gibt den Pfad des Unterordners zurück, wenn Sie WordPress in einem Unterverzeichnis installiert haben. Dies ist in der Tat falsch.
get_home_path()gibt das Stammverzeichnis Ihrer WordPress-Installation zurück, auch wenn es in einem Unterverzeichnis installiert ist. Das ist der Zweck der Funktion.
Angenommen , Ihre Wordpress - Installation in einem Unterverzeichnis aufgerufen /dev,
site_url) (zB / var / www / htdocs / dev)home_url)Wenn Sie einen Anruf bei protokollieren ABSPATH, /var/www/htdocs/devlautet das Ergebnis, das nicht der Stamm Ihrer Installation ist. Die Wurzel Ihrer Installation ist /var/www/htdocs.
ABSPATHwird zuerst definiert, an wp-load.phpwelcher Stelle es sich befindet, /var/www/htdocs/dev/wp-load.phpdaher wird hier ABSPATHdie Definition vorgenommen.
Wenn Sie die Inspektion get_home_path()weiter werden Sie feststellen , dass , wenn die site_urlund home_urlunterscheidet, dann eine Unterkette des Wegs durch die Position (erste Vorkommen) des Unterverzeichnisses geregelt genommen wird innerhalb der Zeichenfolge gefunden.
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 );
}
Daher wird als Ergebnis dieser, get_home_path()und ABSPATHkönnen unterschiedliche Ergebnisse zurück , wenn Sie Wordpress in einem Unterverzeichnis installiert haben.
Zweitens get_home_path()muss das Anrufen in einem Kontext erfolgen, in dem das Afortmentioned wp-admin/includes/file.phpbereits enthalten ist.
Als Beispiel ist die Verwendung get_home_path()innerhalb des admin_initHakens in Ordnung, wohingegen die Verwendung innerhalb initnicht in Ordnung ist.
Da diese Datei nur im Admin-Kontext (Dashboard) enthalten ist, müssen Sie die Datei vor dem Aufrufen der Funktion selbst hinzufügen, wenn Sie sie außerhalb dieses Kontexts unbedingt benötigen.
require_once(ABSPATH . 'wp-admin/includes/file.php');
Ironischerweise (oder nicht) welche verwendet ABSPATH: D
$_SERVER['DOCUMENT_ROOT']Angelegenheit ... hat sogar Probleme ... zB kann es sein, dass sie nicht richtig eingestellt ist oder nicht richtig und so weiter. Ich kann mir auch andere Möglichkeiten vorstellen, damit umzugehen ... Jede mit ihren eigenen Einschränkungen. Viel Spaß :)
/var/apps/wordpressstatt/var/www/htdocs. Verwenden$_SERVER['DOCUMENT_ROOT']Sie es lieber , zumindest wenn Sie sicherstellen können, dass sich der Dokumentenstamm nicht ändert.