
🛠 2 Wege, um den WordPress-Root-Pfad zu erhalten
Sie binden eine Datei in functions.php ein, und WordPress findet sie nicht. Kommt Ihnen das bekannt vor? Der Grund ist fast immer ein falscher Pfad zum Wurzelverzeichnis.
Ein manuell hartcodiertes /var/www/html/ funktioniert nicht mehr, wenn Sie auf einen anderen Server umziehen. Und ein starr eingebautes ../../wp-content/plugins/ scheitert, sobald sich die Verzeichnisstruktur ändert. Glücklicherweise bietet WordPress zwei standardisierte Wege, um den absoluten Pfad zum Site-Root ohne Rätselraten zu ermitteln. Beide liefern standardmäßig einen abschließenden Schrägstrich mit, sodass Sie beim Verketten von Unterpfaden kein zusätzliches / benötigen.
Am Ende dieses Beitrags wissen Sie genau, wann Sie get_home_path() und wann Sie ABSPATH verwenden und warum beide in manchen Projekten übereinstimmen, in anderen jedoch unterschiedliche Verzeichnisse zurückgeben. Als Bonus behandeln wir einen häufigen Fehler mit doppelten Schrägstrichen und ein Szenario für externe Cron-Skripte.
💡 Kurzüberblick:
- Öffnen Sie die
functions.phpIhres Themes, binden Siewp-admin/includes/file.phpein und rufen Sie dannget_home_path()auf, um den absoluten Pfad mit abschließendem Schrägstrich zu erhalten - Verwenden Sie die Konstante
ABSPATHaus derwp-config.php; sie ist global verfügbar, erfordert keine manuelle Einbindung und funktioniert auch im Frontend - Vergleichen Sie bei einer nicht standardmäßigen Verzeichnisstruktur (Bedrock, ausgelagerter Core) die Ausgabe beider Methoden auf einem Testserver; sie können auf unterschiedliche Ordner verweisen
- Für Plugins und Themes, die über das WordPress.org-Verzeichnis vertrieben werden, nutzen Sie
ABSPATH; das ist der Standard, der auf jedem Hosting zuverlässig funktioniert
Merkmal |
|
|
|---|---|---|
Wo definiert |
|
|
Verfügbarkeit | Nur Admin / nach | Global |
Abschließender Schrägstrich | Immer vorhanden | Immer vorhanden |
Stimmen sie überein | Bei einer Standardinstallation ja | Bei einer Standardinstallation ja |
Wenn sie abweichen | Core ist aus dem Document Root ausgelagert | Bedrock, benutzerdefinierte Struktur |
1. Get_home_path(): der Pfad über die Admin-API
Die Funktion get_home_path() ist in der offiziellen WordPress-Dokumentation dokumentiert und gibt den absoluten Dateisystempfad zum Installations-Root zurück, also das Verzeichnis, das wp-admin, wp-includes und wp-content enthält. Anders als bei manueller Hartcodierung ist sie unabhängig von der Hosting-Umgebung und geht bei einem Umzug nicht kaputt.
Der Hauptvorteil: Sie müssen nicht raten, ob die Site in der Domain-Root oder in einem Unterverzeichnis bereitgestellt wird. Die Funktion ermittelt das selbst und liefert beispielsweise /var/www/html/ für eine Standardinstallation oder /home/user/site.com/wordpress/ für eine Site in einem Unterordner. Kein ../../ und keine manuellen Konfigurationsanpassungen.
Die Datei, die die Funktion enthält, befindet sich in wp-admin/includes/file.php, daher ist get_home_path() nicht direkt in einem Theme oder im Frontend verfügbar. Um sie außerhalb des Admin-Bereichs zu nutzen, binden Sie die Datei zuerst manuell ein. Fügen Sie den Code in die functions.php Ihres Child-Themes oder über ein Plugin wie Code Snippets ein:
1 // Include the file with the function — without it get_home_path() will cause a fatal error 2 require_once ABSPATH . 'wp-admin/includes/file.php'; 3 4 // Get the absolute path to the WordPress root 5 $root = get_home_path(); 6 7 // Example: include the update.php file from wp-admin 8 require_once $root . 'wp-admin/update.php';
Hier lädt require_once mit einem aus ABSPATH gebildeten Pfad die Admin-Datei nur einmal; eine zweite Einbindung verursacht keinen Konflikt. Danach steht get_home_path() überall im Theme zur Verfügung.
Hinweis: Der abschließende Schrägstrich ist im zurückgegebenen String bereits enthalten. Verketten Sie Unterpfade ohne führendes /: $root . 'wp-admin/update.php', nicht $root . '/wp-admin/update.php'. PHP schluckt einen doppelten Schrägstrich auf den meisten Dateisystemen stillschweigend, aber einige strikte file_exists()-Prüfungen können darüber stolpern.
2. ABSPATH: die Konstante direkt aus der wp-config.php
ABSPATH ist eine Konstante, die WordPress beim Start in der wp-config.php definiert. In einer Standarddatei sieht das so aus:
1 if (!defined('ABSPATH')) { 2 define('ABSPATH', __DIR__ . '/'); 3 }
__DIR__ gibt das Verzeichnis zurück, in dem sich die wp-config.php selbst befindet, und das ist der WordPress-Root. Die Konstante ist global verfügbar: in Themes, Plugins, im Frontend, im Admin, in WP-CLI. Kein require_once nötig, um sie zu laden; sie ist ab dem Moment, in dem der Core startet, im Speicher.
Die Verwendung ist trivial: Nutzen Sie ABSPATH überall dort, wo ein absoluter Pfad benötigt wird:
1 // Save the path to a variable for readability 2 $rootPath = ABSPATH; 3 4 // Include the file from wp-admin 5 require_once ABSPATH . 'wp-admin/update.php'; 6 7 // Or load a custom file from the root 8 include_once ABSPATH . 'custom-cron.php';
Der abschließende Schrägstrich ist auch hier vorhanden, das Verhalten ist identisch zu get_home_path(). Das Muster require_once ABSPATH . 'wp-admin/update.php' funktioniert auf jedem Hosting, in jeder Verzeichnisstruktur, ohne jegliche Pfadanpassungen. Genau deshalb verwenden die meisten Plugins im WordPress.org-Verzeichnis ABSPATH anstelle von get_home_path(): Die Konstante erfordert keine manuelle Dateieinbindung und hängt nicht vom Aufrufkontext ab.
Wenn get_home_path() und ABSPATH unterschiedliche Verzeichnisse zurückgeben
In einer WordPress-Standardinstallation liefern beide Konstrukte denselben String. Es gibt jedoch zwei Szenarien, in denen sie auseinanderlaufen, und wenn Sie diese nicht kennen, kann ein Bug monatelang in Ihrem Code schlummern.
Der Core ist aus dem Document Root ausgelagert. Einige Hosting-Anbieter (Kinsta, WP Engine) und benutzerdefinierte Setups platzieren die Core-Dateien in einem separaten Verzeichnis, wobei die wp-config.php eine Ebene darüber liegt. In diesem Fall zeigt ABSPATH auf den Ordner, der die wp-config.php enthält, während get_home_path() auf das Unterverzeichnis mit dem Core zeigt. Auf WordPress StackExchange teilen Entwickler ein reales Beispiel: ABSPATH = /www/site/, während get_home_path() = /www/site/wp/. Ein Unterschied von einem Verzeichnis, und require_once scheitert mit einem fatalen Fehler.
Bedrock und andere nicht standardmäßige Strukturen. Bei Roots' Bedrock ist der Site-Root (web/wp/) vom Projekt-Root getrennt, der config/, vendor/ und web/ enthält. ABSPATH zeigt in Bedrock auf web/wp/, wohingegen sich get_home_path() an den Multisite-Einstellungen und der Home-URL orientiert. In der Praxis kann get_home_path() in Bedrock einen Pfad zu web/wp/ zurückgeben, der mit ABSPATH übereinstimmt, aber verlassen Sie sich nicht darauf; prüfen Sie das in Ihrem konkreten Projekt.
Praktisches Fazit: Wenn Sie ein Plugin für das WordPress.org-Verzeichnis schreiben, verwenden Sie ABSPATH; es ist überall ohne zusätzliche Includes verfügbar. Wenn Sie Code für eine bestimmte Site mit einer nicht standardmäßigen Struktur schreiben, prüfen Sie beide Konstanten in einer Testumgebung und wählen Sie diejenige, die auf das tatsächlich benötigte Verzeichnis zeigt. Fünf Minuten Vergleich auf einem Testserver sparen Stunden Fehlersuche in der Produktion.
Es gibt noch eine Nuance bei Themes: Wenn Ihr Theme auf ThemeForest oder im WordPress.org-Verzeichnis vertrieben wird, verwenden Sie immer ABSPATH; es ist garantiert auf jedem Kunden-Hosting definiert. get_home_path() funktioniert möglicherweise nicht, wenn das Theme die Funktion aufruft, bevor der Admin-Bereich geladen ist.
Das kurze Video oben demonstriert visuell, wie ABSPATH Plugins vor direkter Ausführung schützt und warum das Muster defined('ABSPATH') or die ein Sicherheitsstandard für jede PHP-Datei im WordPress-Ökosystem ist.
⁉️🤔 Häufige Fragen
Was ist schneller: get_home_path() oder ABSPATH?
ABSPATHist eine Konstante: Ihr Wert wird einmal beim Laden von WordPress definiert und im Speicher gehalten.get_home_path()ist eine Funktion, die beim ersten Aufruf die Home-URL parst und den Pfad relativ zum Dateisystem berechnet. Der Geschwindigkeitsunterschied ist verschwindend gering (Mikrosekunden pro Aufruf), aber wenn der Pfad dutzende Male in einer einzigen HTTP-Anfrage benötigt wird, speichern SieABSPATHam Anfang Ihres Skripts in einer Variablen und verwenden Sie diese.
Muss ich ABSPATH in meinen eigenen Dateien manuell einbinden?
Wenn Ihr Code im WordPress-Kontext läuft (Theme, Plugin, AJAX-Handler), ist
ABSPATHbereits definiert; Sie müssen nichts einbinden. Die Prüfungif (!defined('ABSPATH')) { exit; }am Anfang einer eigenständigen PHP-Datei im Site-Root ist eine gute Sicherheitspraxis: Sie blockiert die direkte Skriptausführung unter Umgehung von WordPress und schützt vor Datenlecks durch eine direkte HTTP-Anfrage an die Datei.
Kann ich ABSPATH in einem externen Cron-Skript verwenden?
Das können Sie, aber mit Vorsicht. Wenn das Skript außerhalb der WordPress-Installation liegt, laden Sie
wp-load.php:require_once '/path/to/wp-load.php';. Danach wirdABSPATHverfügbar. Bedenken Sie: Der direkte Aufruf vonwp-load.phplädt den gesamten Core und alle aktiven Plugins, was für häufige Cron-Jobs übertrieben ist. Für stark frequentierte Projekte ist es besser, die Logik in einen WP-CLI-Befehl auszulagern.
Gibt get_home_path() einen Pfad mit doppeltem Schrägstrich zurück?
Nein. Die Funktion liefert garantiert einen einzelnen abschließenden Schrägstrich. Ein doppelter Schrägstrich kann nur entstehen, wenn Sie selbst ein
/an den Anfang des Unterpfads setzen:get_home_path() . '/wp-admin/'. Der korrekte Weg ist ohne führenden Schrägstrich:get_home_path() . 'wp-admin/'. Auf den meisten Linux-Systemen ist ein doppelter Schrägstrich gleichbedeutend mit einem einfachen, aber verlassen Sie sich nicht darauf;file_exists()-Prüfungen können in manchen Konfigurationenfalsezurückgeben.
Wie unterscheidet sich der Root-Pfad von der Home-URL?
Der Root-Pfad (
/var/www/html/) ist das Dateisystem des Servers. Die Home-URL (https://site.com) ist die Adresse, die der Browser sieht. Um eine URL zu erhalten, verwenden Siehome_url(); für einen Dateisystempfad nutzen Sieget_home_path()oderABSPATH. Verwechseln Sie beides nicht:require_onceerwartet einen Dateisystempfad,wp_remote_get()eine URL. Wenn Sie das durcheinanderbringen, erhalten Sie entwederfalsevonfile_exists()oder eine fehlerhafte HTTP-Anfrage an einen lokalen Pfad.
Was Sie in Ihrem Projekt verwenden sollten: das Fazit
Für die allermeisten Aufgaben ist ABSPATH ausreichend. Die Konstante ist sofort nach dem Laden von WordPress verfügbar, erfordert keine manuelle Dateieinbindung und funktioniert auf jedem Hosting identisch. Wenn Sie ein Plugin oder Theme für den Vertrieb schreiben, ausschließlich ABSPATH, keine Alternativen.
Wenn Sie eine Site mit einer nicht standardmäßigen Verzeichnisstruktur betreuen (ausgelagerter Core, Bedrock, Multisite mit unterschiedlichen Home-URLs), investieren Sie fünf Minuten und vergleichen Sie die Ausgabe von get_home_path() und ABSPATH in einer Testumgebung. Eine Abweichung um ein Verzeichnis kann in der Produktion Stunden an Fehlersuche kosten.
Welche Methode verwenden Sie, get_home_path() oder ABSPATH? Teilen Sie es uns in den Kommentaren mit: Wir lesen jeden einzelnen.



