
🛠 2 Viisi WordPressi juurtee saamiseks
Lisad faili failis functions.php ja WordPress ei leia seda üles. Tuttav olukord? Põhjus on peaaegu alati vale tee juurkataloogi.
Käsitsi sisse kirjutatud /var/www/html/ laguneb, kui liigute teise serverisse. Ja jäigalt sisse küpsetatud ../../wp-content/plugins/ lakkab töötamast, kui kataloogistruktuur muutub. Õnneks pakub WordPress kahte standardset viisi saidi juure absoluutse tee saamiseks, ilma oletusteta. Mõlemad sisaldavad vaikimisi lõpus kaldkriipsu, nii et alamteede ühendamine ei nõua täiendavat / märki.
Selle postituse lõpuks teate täpselt, millal kasutada get_home_path() ja millal ABSPATH, ning miks need mõnes projektis kattuvad, kuid teistes tagastavad erinevaid katalooge. Boonusena käsitleme levinud topeltkaldkriipsu viga ja stsenaariumi väliste cron-skriptide jaoks.
💡 Kiirülevaade:
- Avage oma teema
functions.phpja kaasakewp-admin/includes/file.php, seejärel kutsuge väljaget_home_path(), et saada absoluutne tee koos lõpus oleva kaldkriipsuga - Kasutage
ABSPATHkonstanti failistwp-config.php; see on globaalselt saadaval, ei vaja käsitsi kaasamist ja töötab isegi esiküljel - Mittestandardse kataloogistruktuuri korral (Bedrock, ümber paigutatud tuum) võrrelge testserveris mõlema meetodi väljundit; need võivad osutada erinevatele kaustadele
- WordPress.org kataloogi kaudu levitatavate pluginade ja teemade puhul kasutage
ABSPATH; see on standard, mis töötab usaldusväärselt igal majutusel
Omadus |
|
|
|---|---|---|
Kus defineeritud |
|
|
Saadavus | Ainult adminis / pärast | Globaalne |
Lõpu kaldkriips | Alati olemas | Alati olemas |
Kas need kattuvad | Standardpaigalduses jah | Standardpaigalduses jah |
Millal need erinevad | Tuum on dokumendijuurest ümber paigutatud | Bedrock, kohandatud struktuur |
1. Get_home_path(): tee läbi admin API
Funktsioon get_home_path() on dokumenteeritud ametlikus WordPressi dokumentatsioonis ja tagastab absoluutse failisüsteemi tee paigalduse juurele, kataloogile, mis sisaldab wp-admin, wp-includes ja wp-content. Erinevalt käsitsi kodeerimisest ei sõltu see majutuskeskkonnast ega lagune, kui te saiti migreerite.
Peamine eelis: te ei pea arvama, kas sait on juurutatud domeeni juure või alamkataloogi. Funktsioon selgitab selle välja ja tagastab näiteks /var/www/html/ standardpaigalduse korral või /home/user/site.com/wordpress/ alamkaustas oleva saidi puhul. Ei mingeid ../../ ega käsitsi konfiguratsiooni muudatusi.
Funktsiooni sisaldav fail asub wp-admin/includes/file.php, seega ei ole get_home_path() otse teemas või esiküljel saadaval. Selle kasutamiseks väljaspool admin-ala kaasake fail kõigepealt käsitsi. Lisage kood oma alamteema functions.php faili või pluginaga nagu Code Snippets:
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';
Siin laadib require_once koos ABSPATH põhjal ehitatud teega admin-faili ainult ühe korra; teine kaasamine ei põhjusta konflikti. Pärast seda on get_home_path() saadaval kõikjal teemas.
Märkus: lõpu kaldkriips on tagastatud stringis juba sees. Ühendage alamteed ilma täiendava juhtiva / märgita: $root . 'wp-admin/update.php', mitte $root . '/wp-admin/update.php'. PHP neelab topeltkaldkriipsu enamikus failisüsteemides vaikselt alla, kuid mõned ranged file_exists() kontrollid võivad komistada.
2. ABSPATH: konstant otse failist wp-config.php
ABSPATH on konstant, mille WordPress defineerib käivitamise ajal failis wp-config.php. Standardfailis näeb see välja järgmine:
1 if (!defined('ABSPATH')) { 2 define('ABSPATH', __DIR__ . '/'); 3 }
__DIR__ tagastab kataloogi, kus wp-config.php ise asub, ja see on WordPressi juur. Konstant on saadaval globaalselt: teemades, pluginates, esiküljel, adminis, WP-CLI-s. Selle laadimiseks pole vaja require_once; see on mälus olemas hetkest, kui tuum käivitub.
Kasutamine on triviaalne: kasutage ABSPATH kõikjal, kus on vaja absoluutset teed:
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';
Ka siin on lõpus kaldkriips olemas, käitumine on identne get_home_path()-ga. Muster require_once ABSPATH . 'wp-admin/update.php' töötab igal majutusel, igas kataloogistruktuuris, ilma ühegi tee kohandamiseta. Just seetõttu kasutab enamik pluginaid WordPress.org kataloogis pigem ABSPATH kui get_home_path(): konstant ei vaja käsitsi faili kaasamist ega sõltu väljakutse kontekstist.
Millal get_home_path() ja ABSPATH tagastavad erinevaid katalooge
WordPressi standardpaigalduses tagastavad mõlemad konstruktsioonid sama stringi. Kuid on kaks stsenaariumi, kus need lahknevad, ja kui te pole neist teadlik, võib viga teie koodis kuid elada.
Tuum on dokumendijuurest ümber paigutatud. Mõned majutusteenuse pakkujad (Kinsta, WP Engine) ja kohandatud seadistused paigutavad tuumafailid eraldi kataloogi, kus wp-config.php on ühe taseme võrra kõrgemal. Sel juhul osutab ABSPATH kaustale, mis sisaldab wp-config.php, samas kui get_home_path() osutab tuumaga alamkataloogile. WordPress StackExchange jagavad arendajad reaalset näidet: ABSPATH = /www/site/, samas kui get_home_path() = /www/site/wp/. Ühe kataloogi erinevus ja require_once ebaõnnestub saatusliku veaga.
Bedrock ja muud mittestandardsed struktuurid. Rootsi Bedrockis on saidijuur (web/wp/) eraldatud projekti juurest, mis sisaldab config/, vendor/ ja web/. ABSPATH Bedrockis osutab web/wp/, samas kui get_home_path() orienteerub multisite seadete ja kodulehe URL-i alusel. Praktikas võib get_home_path() Bedrockis tagastada tee web/wp/, mis ühtib ABSPATH-ga, kuid ärge lootke sellele; kontrollige oma konkreetses projektis.
Praktiline järeldus: kui kirjutate pluginat WordPress.org kataloogi jaoks, kasutage ABSPATH; see on saadaval kõikjal ilma täiendavate kaasamisteta. Kui kirjutate koodi konkreetsele saidile, millel on mittestandardne struktuur, kontrollige mõlemat konstanti testkeskkonnas ja valige see, mis osutab sinna, kuhu tegelikult vaja. Viis minutit võrdlemist testserveris säästab tunde toodangu silumist.
Teemade puhul on veel üks nüanss: kui teie teemat levitatakse ThemeForestis või WordPress.org kataloogis, kasutage alati ABSPATH; see on garanteeritult defineeritud iga kliendi majutusel. get_home_path() ei pruugi töötada, kui teema kutsub seda välja enne admin-ala laadimist.
Ülaltoodud lühike video demonstreerib visuaalselt, kuidas ABSPATH kaitseb pluginaid otsese käivitamise eest ja miks defined('ABSPATH') or die muster on turvastandard igale PHP-failile WordPressi ökosüsteemis.
⁉️🤔 Korduma kippuvad küsimused
Kumb on kiirem: get_home_path() või ABSPATH?
ABSPATHon konstant: selle väärtus defineeritakse üks kord, kui WordPress laadib, ja hoitakse mälus.get_home_path()on funktsioon, mis esimesel väljakutsel parsib kodulehe URL-i ja arvutab tee failisüsteemi suhtes. Kiiruse erinevus on kaduvväike (mikrosekundid väljakutse kohta), kuid kui teed päritakse ühe HTTP-päringu jooksul kümneid kordi, salvestageABSPATHskripti alguses muutujasse ja kasutage seda.
Kas ma pean ABSPATH oma failidesse käsitsi kaasama?
Kui teie kood töötab WordPressi kontekstis (teema, plugin, AJAX-i töötleja), on
ABSPATHjuba defineeritud; te ei pea midagi kaasama. Kontrollif (!defined('ABSPATH')) { exit; }eraldiseisva PHP-faili alguses saidi juures on hea turvatava: see blokeerib skripti otsese käivitamise WordPressist mööda minnes ja kaitseb andmelekkete eest faili otsese HTTP-päringu kaudu.
Kas ma saan ABSPATH kasutada välises cron-skriptis?
Saate, kuid ettevaatusega. Kui skript asub väljaspool WordPressi paigaldust, laadige
wp-load.php:require_once '/path/to/wp-load.php';. Pärast seda muutubABSPATHkättesaadavaks. Pidage meeles:wp-load.phpotse väljakutsumine laadib kogu tuuma ja kõik aktiivsed pluginad, mis on sagedaste cron-tööde jaoks liialdus. Suure liiklusega projektide puhul on parem viia loogika WP-CLI käsu sisse.
Kas get_home_path() tagastab tee topeltkaldkriipsuga?
Ei. Funktsioon tagastab garanteeritult ühe lõpu kaldkriipsu. Topeltkaldkriips saab tekkida ainult siis, kui lisate ise alamtee algusesse
/:get_home_path() . '/wp-admin/'. Õige viis on ilma juhtiva kaldkriipsuta:get_home_path() . 'wp-admin/'. Enamikus Linuxi süsteemides on topeltkaldkriips samaväärne ühekordsega, kuid ärge lootke sellele;file_exists()kontrollid võivad mõnes konfiguratsioonis tagastadafalse.
Kuidas erineb juurtee kodulehe URL-ist?
Juurtee (
/var/www/html/) on serveri failisüsteem. Kodulehe URL (https://site.com) on aadress, mida brauser näeb. URL-i saamiseks kasutagehome_url(); failisüsteemi tee jaoks kasutageget_home_path()võiABSPATH. Ärge ajage neid segamini:require_onceeeldab failisüsteemi teed,wp_remote_get()eeldab URL-i. Kui need segamini ajate, saate kasfalsefile_exists()-st või katkise HTTP-päringu kohalikule teele.
Mida oma projektis kasutada: kokkuvõte
Valdava enamiku ülesannete jaoks piisab ABSPATH-st. Konstant on saadaval kohe pärast WordPressi laadimist, ei vaja käsitsi faili kaasamist ja töötab identselt igal majutusel. Kui kirjutate pluginat või teemat levitamiseks, siis ainult ABSPATH, mitte mingeid alternatiive.
Kui haldate saiti, millel on mittestandardne kataloogistruktuur (ümber paigutatud tuum, Bedrock, multisite erinevate kodulehe URL-idega), kulutage viis minutit ja võrrelge get_home_path() ja ABSPATH väljundit testkeskkonnas. Ühe kataloogi lahknevus võib toodangus maksta tunde silumist.
Kumba meetodit teie kasutate, get_home_path() või ABSPATH? Andke meile kommentaarides teada: me loeme igaüht.



