Skip to content
🛠 2 Viisi WordPressi juurtee saamiseks

🛠 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.php ja kaasake wp-admin/includes/file.php, seejärel kutsuge välja get_home_path(), et saada absoluutne tee koos lõpus oleva kaldkriipsuga
  • Kasutage ABSPATH konstanti failist wp-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

get_home_path()

ABSPATH

Kus defineeritud

wp-admin/includes/file.php

wp-config.php

Saadavus

Ainult adminis / pärast require_once

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
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';

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:

1if (!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
5require_once ABSPATH . 'wp-admin/update.php';
6
7// Or load a custom file from the root
8include_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?

ABSPATH on 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, salvestage ABSPATH skripti 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 ABSPATH juba defineeritud; te ei pea midagi kaasama. Kontroll if (!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 muutub ABSPATH kättesaadavaks. Pidage meeles: wp-load.php otse 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 tagastada false.

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 kasutage home_url(); failisüsteemi tee jaoks kasutage get_home_path() või ABSPATH. Ärge ajage neid segamini: require_once eeldab failisüsteemi teed, wp_remote_get() eeldab URL-i. Kui need segamini ajate, saate kas false file_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.