Was ist der Unterschied zwischen get_home_path()
und ABSPATH
? Ist es nicht der Sinn von beidem, auf das WordPress-Installationsstammverzeichnis zu verweisen?
Sie sollten dasselbe tun, aber unter bestimmten Umständen auch nicht.
Zuallererst Anmerkung:
wp-admin/includes/file.php
muss 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/dev
lautet das Ergebnis, das nicht der Stamm Ihrer Installation ist. Die Wurzel Ihrer Installation ist /var/www/htdocs
.
ABSPATH
wird zuerst definiert, an wp-load.php
welcher Stelle es sich befindet, /var/www/htdocs/dev/wp-load.php
daher wird hier ABSPATH
die Definition vorgenommen.
Wenn Sie die Inspektion get_home_path()
weiter werden Sie feststellen , dass , wenn die site_url
und home_url
unterscheidet, 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 ABSPATH
kö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.php
bereits enthalten ist.
Als Beispiel ist die Verwendung get_home_path()
innerhalb des admin_init
Hakens in Ordnung, wohingegen die Verwendung innerhalb init
nicht 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
/var/apps/wordpress
statt/var/www/htdocs
. Verwenden$_SERVER['DOCUMENT_ROOT']
Sie es lieber , zumindest wenn Sie sicherstellen können, dass sich der Dokumentenstamm nicht ändert.$_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ß :)Ich verwende home_url (), um auf die "Home" -Seite von WP zu verlinken. Manchmal ist site_url () nicht unbedingt Ihre home_url () . Sie können in Wordpress eine bestimmte Seite als Homepage definieren.
quelle