{"id":233849,"date":"2023-02-24T09:58:00","date_gmt":"2023-02-24T06:58:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233849"},"modified":"2022-11-11T12:47:24","modified_gmt":"2022-11-11T09:47:24","slug":"kuidas-wordpressi-teemas-voi-pistikprogrammis-nimeruumidega-automaatlaadurit-juurutada","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/kuidas-wordpressi-teemas-voi-pistikprogrammis-nimeruumidega-automaatlaadurit-juurutada\/","title":{"rendered":"Kuidas WordPressi teemas v\u00f5i pistikprogrammis nimeruumidega automaatlaadurit juurutada"},"content":{"rendered":"\n<p>Kui kirjutate objektorienteeritud koodi, on automaatlaadur kohustuslik. Ilma automaatse laadijata peaksite enne selle l\u00e4htestamist lisama rea, mis sisaldab klassi faili. See v\u00f5ib kiiresti olla t\u00fclikas, kui t\u00f6\u00f6tate paljude klassidega. Autoloader on funktsioon, mis k\u00e4ivitub iga kord, kui uus klass instantseeritakse, ja sisaldab klassifaili enne k\u00e4ivitamist.<\/p>\n<p>Nimeruumid on viis koodi struktureerimiseks ja kapseldamiseks ning aitavad v\u00e4ltida nimede kokkup\u00f5rkeid. Kui kavatsete kirjutada OOP, on soovitatav kasutada ka nimeruume. Pidage meeles, et saate automaatse laadija juurutada ilma OOP-koodis nimeruume kasutamata.<\/p>\n<p>Saate seda koodi kasutada oma WordPressi teema v\u00f5i pistikprogrammi jaoks v\u00f5i mis tahes PHP-koodi jaoks v\u00e4ljaspool WordPressi \u2013 lihtsalt muutke radu vastavalt. Selle n\u00e4ite jaoks loon WordPressi teema jaoks automaatlaaduri.<\/p>\n<h2>Klassi nimeruumi ja struktuuri reeglid<\/h2>\n<p>Automaatse laadija juurutamine eeldab teie koodistruktuuri ja nende leidmise kohta teatud kindlaid reegleid. Nimeruumide kasutamine lihtsustab seda m\u00f5nev\u00f5rra, kuna teie nimeruum v\u00f5ib viidata sellele, millises kaustas klassid asuvad.<\/p>\n<p>Esmalt tehke otsus, mis teie nimeruumi nimetada. Tavaliselt on see teie koodi jaoks midagi unikaalset, n\u00e4iteks teie teema nimi. N\u00e4iteks selle saidi teema nimeruum on <code>AWhitePixelTheme<\/code>. See t\u00e4hendab, et automaatlaaduri t\u00f6\u00f6tamiseks peavad k\u00f5ik klassid olema selles nimeruumis.<\/p>\n<pre><code>namespace AWhitePixelTheme;<\/code><\/pre>\n<p>Minu esimene reegel on, et iga klassifail sisaldab alati ainult \u00fchte klassi ja klassi nimi peab olema sama, mis faili nimi. N\u00e4iteks; klass <code>MyTest<\/code>peab olema faili sees m\u00e4\u00e4ratletud <code>MyTest.php<\/code>.<\/p>\n<p>Minu teine \u200b\u200breegel on, kuidas klasse kaustadesse struktureerida. Otsustan, et k\u00f5ik klassid l\u00e4hevad <code>src<\/code>minu teema kausta. Klassifaile v\u00f5in panna otse sellesse kausta ja selleks peavad need asuma \u00fclal defineeritud &#8220;root&quot; nimeruumis. Aga kui tahan luua alamkaustu ja sinna klassifaile panna, peavad nende nimeruumid sisaldama kaustastruktuuri. N\u00e4iteks klass faili <code>MyTest.php<\/code>, mis asub kaustas <code>src\/Test\/<\/code>, peab olema m\u00e4\u00e4ratud see nimeruum:<\/p>\n<pre><code>namespace AWhitePixelThemeTest;<\/code><\/pre>\n<h2>Autoloaderi loomine<\/h2>\n<p>Mulle meeldib hoida automaatlaadurit eraldi failis ja v\u00e4ljaspool <code>src\/<\/code>kausta, mis on m\u00e4\u00e4ratud ainult nimeruumiga klassifailide jaoks. N\u00e4iteks loon faili oma teema <code>autoloader.php<\/code>kausta .<code>inc\/<\/code><\/p>\n<p>PHP-l on sisseehitatud automaatlaaduri funktsioon: <a href=\"https:\/\/www.php.net\/manual\/en\/function.spl-autoload-register.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">spl_autoload_register<\/a>. Esitate parameetrina oma automaatlaaduri funktsiooni nime ja selles funktsioonis saate argumendina n\u00f5utud klassi (mille tahate <code>new<\/code>klassi instantieerimisel). Klasside instantseerimisel nimeruumidega, nt <code>new AWhitePixelThemeTestMyTest()<\/code>, on selle funktsiooni jaoks ette n\u00e4htud muutuja <code>\"AWhitePixelThemeTestMyTest\"<\/code>.<\/p>\n<p>Lisame automaatlaaduri funktsiooni ja m\u00e4\u00e4rame selles automaatlaaduri jaoks vajaliku nimeruumi:<\/p>\n<pre><code>&lt;?php\nspl_autoload_register('awhitepixel_autoloader');\nfunction awhitepixel_autoloader($class) {\n    $namespace = 'AWhitePixelTheme';\n\u00a0\n}<\/code><\/pre>\n<p>Seej\u00e4rel peame selle faili lisama, et meie automaatlaadur oleks registreeritud. Kuna see on teemas, lisan kaasamise teema <code>functions.php<\/code>. Kui kasutate seda pistikprogrammi jaoks, sisestage see oma pistikprogrammi failidesse. Autoloaderi fail tuleb lisada varakult, enne mis tahes klasside k\u00e4ivitamist. Panen selle oma esimesele reale <code>functions.php<\/code>:<\/p>\n<pre><code>require_once(get_template_directory(). '\/inc\/autoloader.php');<\/code><\/pre>\n<p>Kui kasutate seda lapseteema v\u00f5i pistikprogrammi jaoks, muutke teed vastavalt oma vajadustele.<\/p>\n<p>Ja see ongi k\u00f5ik. N\u00fc\u00fcd on automaatlaadur paigas, kuid see ei tee midagi. P\u00f6\u00f6rdume tagasi automaatlaaduri funktsiooni juurde ja l\u00f5petame selle.<\/p>\n<h2>Autoloaderi funktsiooni kirjutamine ja testimine<\/h2>\n<p>K\u00f5igepealt peame tagama, et taotletud klassi nimi on tegelikult meie nimeruumis. Kontrollime lihtsalt, kas antud nimeruumi klassi nimi sisaldab nimeruumi stringi, ja kui ei, siis v\u00e4ljume funktsioonist. P\u00e4rast seda eemaldame stringist nimeruumi nime, et saaksime v\u00e4lja t\u00f6\u00f6tada k\u00f5ik alamkaustad ja klassifailid.<\/p>\n<pre><code>&lt;?php\nspl_autoload_register('awhitepixel_autoloader');\nfunction awhitepixel_autoloader($class) {\n    $namespace_name = 'AWhitePixelTheme';\n\u00a0\n    if (strpos($class, $namespace) !== 0) {\n        return;\n    }\n    $class = str_replace($namespace, '', $class);\n}<\/code><\/pre>\n<p>N\u00fc\u00fcd muudame antud nimeruumi faili tegelikuks teeks. Esiteks asendame k\u00f5ik <code>\"\"<\/code>nimeruumis olevad kaldkriipsud kausta eraldaja m\u00e4rgiga \u2013 selleks kasutame PHP konstanti <code>DIRECTORY_SEPARATOR<\/code>. P\u00e4ris l\u00f5ppu lisame <code>\".php\"<\/code>. Ja l\u00f5puks enne stringi lisame t\u00e4ieliku juurtee. Kuna see on teema sees, kasutan ma <code>get_template_directory()<\/code>. Kui kasutate seda pistikprogrammi jaoks, kasutage meetodit, mis tagastab teie pistikprogrammi t\u00e4ieliku tee.<\/p>\n<pre><code>    ...\n    $class = str_replace($namespace, '', $class);\n\u00a0\n    $class = str_replace('', DIRECTORY_SEPARATOR, $class). '.php';\n    $directory = get_template_directory();\n    $path = $directory. DIRECTORY_SEPARATOR. 'src'. DIRECTORY_SEPARATOR. $class;\n}<\/code><\/pre>\n<p>K\u00f5ik, mida me n\u00fc\u00fcd tegema peame, on kontrollida, kas fail on olemas, ja kui on, siis seda n\u00f5uda.<\/p>\n<pre><code>    ...\n    $path = $directory. DIRECTORY_SEPARATOR. 'src'. DIRECTORY_SEPARATOR. $class;\n\u00a0\n    if (file_exists($path)) {\n        require_once($path);\n    }\n}<\/code><\/pre>\n<p>See on k\u00f5ik!<\/p>\n<p>Testime seda. <code>Test<\/code>Looge oma teema kausta alamkaust ja sisestage <code>src\/<\/code>selle sisse php-fail nimega <code>MyTest.php<\/code>. M\u00e4\u00e4ratlege selles klass <code>MyTest<\/code>, j\u00e4rgides nimeruumi reegleid: <code>AWhitePixelThemeTest<\/code>. Lisan lihtsalt konstrueerimisfunktsiooni teksti &quot;Edu&quot;, et saaksime h\u00f5lpsasti n\u00e4ha, et see tegelikult klassi initsialiseerib.<\/p>\n<pre><code>&lt;?php\nnamespace AWhitePixelThemeTest;\n\u00a0\nclass MyTest {\n    public function __construct() {\n        var_dump('Success!');\n    }\n}<\/code><\/pre>\n<p>Oma funktsioonides.php p\u00e4rast automaatlaaduri n\u00f5udmist loome lihtsalt klassi:<\/p>\n<pre><code>$test = new AWhitePixelThemeTestMyTest();<\/code><\/pre>\n<p>V\u00e4rskendage oma WordPressi saiti ja veenduge, et saate &quot;Edu!&quot; v\u00e4ljastatakse.<\/p>\n<p>Autoloader laadib automaatselt k\u00f5ik meie m\u00e4\u00e4ratletud nimeruumis olevad klassifailid ja j\u00e4rgib \u00f5igeid reegleid. Saate kursusi luua k\u00f5ikjal oma teema sees, isegi klassides endis.<\/p>\n<h2>T\u00e4ielik automaatlaaduri funktsioon<\/h2>\n<p>Viitamiseks siin on meie viimane automaatlaaduri funktsioon:<\/p>\n<pre><code>spl_autoload_register('awhitepixel_autoloader');\nfunction awhitepixel_autoloader($class) {\n    $namespace = 'AWhitePixelTheme';\n\u00a0\n    if (strpos($class, $namespace) !== 0) {\n        return;\n    }\n\u00a0\n    $class = str_replace($namespace, '', $class);\n    $class = str_replace('', DIRECTORY_SEPARATOR, $class). '.php';\n\u00a0\n    $directory = get_template_directory();\n    $path = $directory. DIRECTORY_SEPARATOR. 'src'. DIRECTORY_SEPARATOR. $class;\n\u00a0\n    if (file_exists($path)) {\n        require_once($path);\n    }\n}<\/code><\/pre>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Juhend selle kohta, kuidas kirjutada automaatlaadurit, mis v\u00f5imaldab teie objektorienteeritud koodi jaoks nimeruume WordPressi teemale v\u00f5i pistikprogrammile.<\/p>\n","protected":false},"author":1,"featured_media":224072,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[718,894,718,833,894,916,916,1110,842,833,926,926,842,863,863],"tags":[1165],"class_list":{"0":"post-233849","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-arendaja","8":"category-kood","10":"category-juhend-algajatele","12":"category-muud","14":"category-n-a","15":"category-opetused","17":"category-teemasid","20":"category-wordpress-4","22":"tag-affiai-et"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/233849","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/comments?post=233849"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/233849\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/224072"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=233849"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=233849"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=233849"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}