Skip to content
🛠 2 Måter å finne WordPress-rotstien på

🛠 2 Måter å finne WordPress-rotstien på

Du inkluderer en fil i functions.php, og WordPress finner den ikke. Høres det kjent ut? Årsaken er nesten alltid en feil sti til rotmappen.

En manuelt hardkodet /var/www/html/ slutter å virke når du flytter til en annen server. Og en rigid innbakt ../../wp-content/plugins/ slutter å fungere når mappestrukturen endres. Heldigvis tilbyr WordPress to standardmåter å hente den absolutte stien til nettstedets rot på, uten gjetting. Begge inkluderer en avsluttende skråstrek ut av boksen, slik at det å sette sammen understier ikke krever en ekstra /.

Når du har lest dette innlegget, vet du nøyaktig når du skal bruke get_home_path() og når du skal bruke ABSPATH, og hvorfor de er like i noen prosjekter, men returnerer forskjellige mapper i andre. Som en bonus dekker vi en vanlig feil med dobbel skråstrek og et scenario for eksterne cron-skript.

💡 Rask oversikt:

  • Åpne temaets functions.php og inkluder wp-admin/includes/file.php, kall deretter get_home_path() for å få den absolutte stien med en avsluttende skråstrek
  • Bruk konstanten ABSPATH fra wp-config.php; den er tilgjengelig globalt, krever ingen manuell inkludering og fungerer selv på frontend
  • Med en ikke-standard mappestruktur (Bedrock, flyttet kjerne), sammenlign resultatet fra begge metodene på en testserver; de kan peke til forskjellige mapper
  • For utvidelser og temaer som distribueres via WordPress.org-katalogen, bruk ABSPATH; det er standarden som fungerer pålitelig på alle hostinger

Egenskap

get_home_path()

ABSPATH

Hvor definert

wp-admin/includes/file.php

wp-config.php

Tilgjengelighet

Kun admin / etter require_once

Global

Avsluttende skråstrek

Alltid til stede /

Alltid til stede /

Er de like

I en standardinstallasjon, ja

I en standardinstallasjon, ja

Når de er ulike

Kjernen er flyttet fra dokumentroten

Bedrock, tilpasset struktur

1. Get_home_path(): stien via admin-API-et

Funksjonen get_home_path() er dokumentert i den offisielle WordPress-dokumentasjonen og returnerer den absolutte filsystemstien til installasjonsroten, mappen som inneholder wp-admin, wp-includes og wp-content. I motsetning til manuell hardkoding er den ikke avhengig av driftsmiljøet og slutter ikke å virke når du migrerer.

Den største fordelen: du trenger ikke gjette om nettstedet er deployet i domenets rot eller i en underkatalog. Funksjonen finner det ut og returnerer for eksempel /var/www/html/ for en standardinstallasjon eller /home/user/site.com/wordpress/ for et nettsted i en undermappe. Ingen ../../ og ingen manuelle konfigurasjonsendringer.

Filen som inneholder funksjonen ligger i wp-admin/includes/file.php, så get_home_path() er ikke direkte tilgjengelig i et tema eller på frontend. For å bruke den utenfor admin-området, inkluder filen manuelt først. Legg til koden i barne-temaets functions.php eller via en utvidelse som Code Snippets:

1// Include the file with the function — without it get_home_path() will cause a fatal error
2require_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
8require_once $root . 'wp-admin/update.php';

Her laster require_once med en sti bygget fra ABSPATH inn admin-filen bare én gang; en ny inkludering vil ikke forårsake en konflikt. Etter dette er get_home_path() tilgjengelig hvor som helst i temaet.

Merk: den avsluttende skråstreken er allerede inkludert i den returnerte strengen. Sett sammen understier uten en ekstra ledende /: $root . 'wp-admin/update.php', ikke $root . '/wp-admin/update.php'. PHP vil i stillhet svelge en dobbel skråstrek på de fleste filsystemer, men enkelte strenge file_exists()-sjekker kan snuble.

2. ABSPATH: konstanten rett fra wp-config.php

ABSPATH er en konstant som WordPress definerer i wp-config.php under oppstart. I en standardfil ser den slik ut:

1if (!defined('ABSPATH')) {
2 define('ABSPATH', __DIR__ . '/');
3}

__DIR__ returnerer mappen der wp-config.php selv ligger, og det er WordPress-roten. Konstanten er tilgjengelig globalt: i temaer, utvidelser, på frontend, i admin, i WP-CLI. Ingen require_once nødvendig for å laste den; den er allerede i minnet fra det øyeblikket kjernen starter.

Bruken er triviell: bruk ABSPATH overalt hvor en absolutt sti kreves:

1// Save the path to a variable for readability
2$rootPath = ABSPATH;
3
4// Include the file from wp-admin
5require_once ABSPATH . 'wp-admin/update.php';
6
7// Or load a custom file from the root
8include_once ABSPATH . 'custom-cron.php';

Den avsluttende skråstreken er til stede her også, oppførsel identisk med get_home_path(). Mønsteret require_once ABSPATH . 'wp-admin/update.php' vil fungere på enhver hosting, i enhver mappestruktur, uten sti-justeringer. Det er nettopp derfor de fleste utvidelser i WordPress.org-katalogen bruker ABSPATH fremfor get_home_path(): konstanten krever ingen manuell filinkludering og er ikke avhengig av kall-konteksten.

Når get_home_path() og ABSPATH returnerer forskjellige mapper

I en standard WordPress-installasjon returnerer begge konstruksjonene den samme strengen. Men det er to scenarioer der de avviker, og hvis du er uvitende om dem, kan en feil leve i koden din i månedsvis.

Kjernen er flyttet fra dokumentroten. Noen hosting-leverandører (Kinsta, WP Engine) og tilpassede oppsett plasserer kjernefiler i en egen mappe, med wp-config.php ett nivå over. I dette tilfellet peker ABSPATH til mappen som inneholder wp-config.php, mens get_home_path() peker til underkatalogen med kjernen. På WordPress StackExchange deler utviklere et virkelig eksempel: ABSPATH = /www/site/, mens get_home_path() = /www/site/wp/. En forskjell på én mappe, og require_once feiler med en fatal feil.

Bedrock og andre ikke-standard strukturer. I Roots' Bedrock er nettstedets rot (web/wp/) atskilt fra prosjektroten, som inneholder config/, vendor/ og web/. ABSPATH i Bedrock peker til web/wp/, mens get_home_path() orienterer seg basert på multisite-innstillinger og hjem-URL-en. I praksis kan get_home_path() i Bedrock returnere en sti til web/wp/ som samsvarer med ABSPATH, men ikke stol på det; verifiser på ditt spesifikke prosjekt.

Praktisk lærdom: hvis du skriver en utvidelse for WordPress.org-katalogen, bruk ABSPATH; den er tilgjengelig overalt uten ekstra inkluderinger. Hvis du skriver kode for et spesifikt nettsted med en ikke-standard struktur, sjekk begge konstantene i et testmiljø og velg den som peker dit du faktisk trenger. Fem minutters sammenligning på en testserver vil spare timer med feilsøking i produksjon.

Det er en nyanse til med temaer: hvis temaet ditt distribueres på ThemeForest eller i WordPress.org-katalogen, bruk alltid ABSPATH; den er garantert definert på enhver klients hosting. get_home_path() fungerer kanskje ikke hvis temaet kaller den før admin-området lastes.

Den korte videoen over demonstrerer visuelt hvordan ABSPATH beskytter utvidelser mot direkte kjøring og hvorfor mønsteret defined('ABSPATH') or die er en sikkerhetsstandard for enhver PHP-fil i WordPress-økosystemet.

⁉️🤔 Vanlige spørsmål

Hva er raskest: get_home_path() eller ABSPATH?

ABSPATH er en konstant: verdien defineres én gang når WordPress lastes og lagres i minnet. get_home_path() er en funksjon som ved første kall analyserer hjem-URL-en og beregner stien relativt til filsystemet. Hastighetsforskjellen er forsvinnende liten (mikrosekunder per kall), men hvis stien etterspørres dusinvis av ganger i én enkelt HTTP-forespørsel, lagre ABSPATH i en variabel øverst i skriptet ditt og bruk den.

Må jeg inkludere ABSPATH manuelt i mine egne filer?

Hvis koden din kjører i WordPress-kontekst (tema, utvidelse, AJAX-behandler), er ABSPATH allerede definert; du trenger ikke inkludere noe. Sjekken if (!defined('ABSPATH')) { exit; } øverst i en frittstående PHP-fil i nettstedets rot er en god sikkerhetspraksis: den blokkerer direkte skriptkjøring utenom WordPress og beskytter mot datalekkasjer via en direkte HTTP-forespørsel til filen.

Kan jeg bruke ABSPATH i et eksternt cron-skript?

Du kan, men med forsiktighet. Hvis skriptet ligger utenfor WordPress-installasjonen, last wp-load.php: require_once '/path/to/wp-load.php';. Etter det blir ABSPATH tilgjengelig. Husk: å kalle wp-load.php direkte laster hele kjernen og alle aktive utvidelser, noe som er overkill for hyppige cron-jobber. For prosjekter med høy trafikk er det bedre å flytte logikken inn i en WP-CLI-kommando.

Returnerer get_home_path() en sti med dobbel skråstrek?

Nei. Funksjonen er garantert å returnere én enkelt avsluttende skråstrek. En dobbel skråstrek kan bare oppstå hvis du selv legger til en / i begynnelsen av understien: get_home_path() . '/wp-admin/'. Riktig måte er uten ledende skråstrek: get_home_path() . 'wp-admin/'. På de fleste Linux-systemer er en dobbel skråstrek ekvivalent med en enkel, men ikke stol på det; file_exists()-sjekker på enkelte konfigurasjoner kan returnere false.

Hvordan er rotstien forskjellig fra hjem-URL-en?

Rotstien (/var/www/html/) er serverens filsystem. Hjem-URL-en (https://site.com) er adressen nettleseren ser. For å få en URL, bruk home_url(); for en filsystemsti, bruk get_home_path() eller ABSPATH. Ikke bland dem: require_once forventer en filsystemsti, wp_remote_get() forventer en URL. Hvis du forveksler dem, får du enten false fra file_exists() eller en ødelagt HTTP-forespørsel til en lokal sti.

Hva du bør bruke i prosjektet ditt: konklusjonen

For de aller fleste oppgaver er ABSPATH tilstrekkelig. Konstanten er tilgjengelig umiddelbart etter at WordPress lastes, krever ingen manuell filinkludering og fungerer identisk på enhver hosting. Hvis du skriver en utvidelse eller et tema for distribusjon, kun ABSPATH, ingen alternativer.

Hvis du administrerer et nettsted med en ikke-standard mappestruktur (flyttet kjerne, Bedrock, multisite med forskjellige hjem-URL-er), bruk fem minutter og sammenlign resultatet fra get_home_path() og ABSPATH i et testmiljø. Et avvik på én mappe kan koste timer med feilsøking i produksjon.

Hvilken metode bruker du, get_home_path() eller ABSPATH? Fortell oss i kommentarene: vi leser hver eneste en.