✅ WEB- ja WordPress -uutiset, -teemat, -laajennukset. Täällä jaamme vinkkejä ja parhaita verkkosivustoratkaisuja.

Kuinka ottaa käyttöön automaattinen latausohjelma nimiavaruuksilla WordPress-teemassa tai -laajennuksessa

3

Jos kirjoitat oliopohjaista koodia, automaattinen latausohjelma on pakollinen. Ilman automaattista latausohjelmaa sinun on lisättävä rivi, joka sisältää luokkatiedoston, ennen kuin voit alustaa sen. Se voi nopeasti olla hankalaa, kun työskentelet useiden luokkien kanssa. Autoloader on toiminto, joka laukeaa aina, kun uusi luokka instantoidaan, ja sisältää luokkatiedoston ennen instanssia.

Nimiavaruudet ovat tapa jäsentää ja kapseloida koodia ja auttaa välttämään nimien törmäyksiä. Jos aiot kirjoittaa OOP, on suositeltavaa käyttää myös nimiavaruuksia. Muista, että voit ottaa käyttöön automaattisen latausohjelman käyttämättä nimiavaruuksia OOP-koodissasi.

Voit käyttää tätä koodia WordPress-teemassasi tai -laajennuksessasi tai mitä tahansa PHP-koodia WordPressin ulkopuolella – muuta polkuja vastaavasti. Tätä esimerkkiä varten olen luomassa automaattista latausohjelmaa WordPress-teemaa varten.

Luokan nimiavaruuden ja rakenteen säännöt

Autoloaderin käyttöönotto vaatisi joitain määriteltyjä sääntöjä koodirakenteelle ja mistä ne löytyvät. Nimiavaruuksien käyttäminen yksinkertaistaa tätä jonkin verran, koska nimiavaruutesi voi viitata siihen, missä kansiossa luokat ovat.

Tee ensin päätös siitä, mikä nimiavaruutesi pitäisi nimetä. Yleensä se on jotain ainutlaatuista koodillesi, esimerkiksi teemasi nimi. Esimerkiksi tämän sivuston teeman nimiavaruus on AWhitePixelTheme. Tämä tarkoittaa, että automaattinen latausohjelma toimii, kaikkien luokkien on oltava tässä nimiavaruudessa.

namespace AWhitePixelTheme;

Ensimmäinen sääntöni on, että mikä tahansa luokkatiedosto sisältää aina vain yhden luokan ja luokan nimen on oltava sama kuin tiedoston nimi. Esimerkiksi; luokka MyTeston määritettävä tiedoston sisällä MyTest.php.

Toinen sääntöni on, kuinka luokat rakennetaan kansioihin. Päätän, että kaikki luokat menevät teemani kansioon src. Voin laittaa luokkatiedostot suoraan tähän kansioon, ja sitä varten niiden tulee olla yllä määritellyn "root"-nimiavaruuden sisällä. Mutta jos haluan luoda alikansioita ja laittaa niihin luokkatiedostoja, niiden nimiavaruuksien tulee sisältää kansiorakenne. Esim luokka kansiossa MyTest.phpolevalle tiedostolle src/Test/on määritettävä tämä nimiavaruus:

namespace AWhitePixelThemeTest;

Autoloaderin luominen

Haluan pitää automaattisen latausohjelman erillisessä tiedostossa ja src/kansion ulkopuolella, joka on määritetty vain nimivälitteisille luokkatiedostoille. Esimerkkinä luon tiedoston autoloader.phpteemani kansioon inc/.

PHP:ssä on sisäänrakennettu automaattinen lataustoiminto: spl_autoload_register. Annat parametriksi autoloader-funktion nimen ja tuossa funktiossa saat pyydetyn luokan argumenttina (mitä laitat newluokkaa ilmentäessäsi). Kun luokissa on nimiavaruuksia, esim new AWhitePixelThemeTestMyTest()., tämän funktion muuttuja olisi "AWhitePixelThemeTestMyTest".

Lisätään autoloader-toiminto, ja siinä määritetään vaadittava nimiavaruus automaattilataajalle:

Sitten meidän on sisällytettävä tämä tiedosto, jotta automaattinen latausohjelmamme rekisteröidään. Koska tämä kuuluu teemaan, lisään sisällyttämisen teemaan functions.php. Jos käytät tätä laajennukselle, laita se laajennustiedostoihisi. Autoloader-tiedosto on lisättävä aikaisin, ennen luokkien ilmentämistä. Laitan tämän ensimmäiselle rivilleni functions.php:

require_once(get_template_directory(). '/inc/autoloader.php');

Jos käytät sitä lapsiteemaan tai laajennukseen, muokkaa polkua tarpeidesi mukaan.

Ja siinä se. Autoloader on nyt paikallaan, mutta se ei tee mitään. Palataan automaattiseen lataustoimintoon ja lopetetaan se.

Autoloader-toiminnon kirjoittaminen ja testaus

Ensin meidän on varmistettava, että pyydetty luokan nimi on todella nimiavaruudessamme. Tarkistamme vain, sisältääkö annettu nimiavaruuden luokan nimi nimiavaruuden merkkijonon, ja jos ei, poistumme funktiosta. Tämän jälkeen poistamme nimiavaruuden nimen merkkijonosta, jotta voimme selvittää mahdolliset alikansiot ja luokkatiedostot.

Nyt muutetaan annettu nimiavaruus todelliseksi polkuksi tiedostoon. Ensin korvaamme kenoviivan ""nimiavaruudessa kansion erottimen merkillä – tätä varten käytämme PHP-vakiota DIRECTORY_SEPARATOR. Aivan lopussa lisäämme ".php". Ja lopuksi ennen merkkijonoa lisäämme koko juuripolun. Koska tämä on teeman sisällä, käytän get_template_directory(). Jos käytät tätä laajennukselle, käytä menetelmää, joka palauttaa täyden polun laajennukseen.

... $class = str_replace($namespace, '', $class);   $class = str_replace('', DIRECTORY_SEPARATOR, $class). '.php'; $directory = get_template_directory(); $path = $directory. DIRECTORY_SEPARATOR. 'src'. DIRECTORY_SEPARATOR. $class; }

Meidän tarvitsee nyt vain tarkistaa, onko tiedosto olemassa, ja jos on, vaatia sitä.

... $path = $directory. DIRECTORY_SEPARATOR. 'src'. DIRECTORY_SEPARATOR. $class;   if (file_exists($path)) { require_once($path); } }

Se siitä!

Testataanpa sitä. Luo alikansio Testteemasi src/kansioon ja laita sen sisään php-tiedosto nimeltä MyTest.php. Määrittele siihen luokka MyTestnimiavaruuden sääntöjen mukaisesti: AWhitePixelThemeTest. Lisään vain tulosteen "Success" konstruktiofunktioon, jotta voimme helposti nähdä, että se todella alustaa luokan.

Funktiones.php:ssä, kun olemme vaatineet automaattisen latausohjelman, luomme luokan:

$test = new AWhitePixelThemeTestMyTest();

Päivitä WordPress-sivustosi ja varmista, että saat "Onnistuminen!" tulostettu.

Autoloader lataa automaattisesti kaikki luokkatiedostot, jotka ovat määritetyssä nimiavaruudessa, ja noudattaa oikeita sääntöjä. Voit luoda kursseja mistä tahansa teeman sisällä, jopa itse luokissa.

Täysi automaattinen lataustoiminto

Viitteeksi tässä on viimeinen automaattinen lataustoimintomme:

spl_autoload_register('awhitepixel_autoloader'); function awhitepixel_autoloader($class) { $namespace = 'AWhitePixelTheme';   if (strpos($class, $namespace) !== 0) { return; }   $class = str_replace($namespace, '', $class); $class = str_replace('', DIRECTORY_SEPARATOR, $class). '.php';   $directory = get_template_directory(); $path = $directory. DIRECTORY_SEPARATOR. 'src'. DIRECTORY_SEPARATOR. $class;   if (file_exists($path)) { require_once($path); } }

Tämä verkkosivusto käyttää evästeitä parantaakseen käyttökokemustasi. Oletamme, että olet kunnossa, mutta voit halutessasi kieltäytyä. Hyväksyä Lisätietoja