WordPress theme structure

Salam. Deməli saytda 2 versiyanı mobile və desktop üçün ayrı ayrı temalar istifadə etmək istəyirəm. Bunun üçün kiçik bir plugin yazdım sayta daxil olanda user hemen plugin detect edib uygun temanı real time olaraq aktiv edir. Problem isə odur ki mən istəmirəm ki eyni kodları hər iki temanın functions.php sindən təkrar işlədim. Bunun üçün hansısa həll varmı? register post type taxanomy bu tip kodlarin her iki temanin functions inda isletmek istemirem. Ağləma gələn variant var ki həmən kodları da plugin kimi yazıb aktiv etmək olar. 1 plugin hər iki temada işləyəcək. ama məsələn kimse əli dəysə və ya bilərəkdən həmən plugin i deaktiv etsə artiq error cixacaq. Elə etmək olarmı ki temada requrie qoya bilərəm ki necəsə filan plugin deaktivdirsə sayt alert versin temanı aktiv etməzdən əvvəl plugin aktiv olmalıdır. Digər bir variant isə vvordpress də tema xaricində öz kodlarımı hər hansı lib və ya kodu standard olaraq harada yerləşdirməliyəm ki onu istınilən temada istifadə edə bilim. Daha dəqiq desəm tutaq ki saytda 2 və ya daha artıq tema var və mənim functions da olacaq kodlarımdan bıziləri beten temalarda istfadə olunur. həmən o kodları temadan kənar harada yerləşdirə bilərəm ki istınilən temanın functions inda istifadə edə bilim. Təşəkkür edirəm

Verilmiş cavablar və yazılan şərhlər (6 cavab var)

E. Hacı (2015-08-22 10:18:47)
Aha hər bir template-in içində eyni if else yazmaq bir az düz çıxmır, SOLID prinsipinə də zidd kimi görünür. Amma sonralar optimizə edə bilərsiz. Ki mərkəzi detector olsun functions.php faylında, o yönləndirsin hər şeyi necə lazımdır mobilə və ya desktopa.

Emin Rəhmanov (2015-08-21 16:12:11)
Aha. tam anladim bu dediklerinizi. Bes page template leri nece? onlar da ele page template ni yaradib tutaq ki Test adli page template var o page template in de icinde yene if edib uygun mobile veya desktop page template i include etmek? Ama dediyiniz kimi bu da professional hell deyil de ? hele ki bele edim sonraliqca daha da tekmillesdirerem

E. Hacı (2015-08-21 15:03:31)
Olar elə. Çoxdur həllər. Məsələn elə ən sadəsi if(is_mobile()) else şərtinin template faylların hər birinin içində olması və müvafiq alt-template faylı yükləməsi. Bu metodla olanda index, page, single və.s.-in içində yuxarıdakı if else ilə müvafiq papkadan müvafiq faylı çağırırsız, lazım olan librarylerin yüklənməsini isə functions.php-də yenə də eyni tip if else ilə edirsiz. Functions.php faylı index, single, page və.s. olmasından asılı olmayaraq həmişə birinci run olur. Deməli kitabxana və altyapı işlərini onun içində etməliyik, sonra da wordpress özü url-ə uyğun avtomatik template-i çağırır, tutalım səhifə açılır və page.php yüklənir. Bu zaman da sizdə page.php-in içində əlavə heç bir kod yoxdur, yalnız if require desktop else require mobile sətri var. Beləliklə məsələ həll olur.

Emin Rəhmanov (2015-08-21 13:49:06)
1 tema ile lap ela olar hell etmek, Zehmet deyilse dediyiniz 1 tema ile hell etmek ucun struktur, detect nece hansi faylda olmalidi bu kimi seyler haqinda qisaca melumat verersinizse ve ya hansisa bir source. esas function.php fayllarinin nece cagrilmasi ve diger index single page_template fayllarinin nece olacagi maraqlidi. bele etsem sizce duzgun olar? tema qovlugu icinde 2 qovluq yaratsam biri mobile digeri desktop. heresinin icinde eyni fayllar olsa ozlerine uygun. temanin oz qovlugu icindeki tutaq ki index.php de yoxlayib mobile ve ya desktop qovluqdaki indexi include etmek. hemcinin page.php single.php de bu kimi. wp-content/themes/test wp-content/themes/test/mobile wp-content/themes/test/desktop wp-content/themes/test/index.php faylinde yazlniz if(is_mobile()) include 'wp-content/themes/test/mobile/index.php'; else include 'wp-content/themes/test/desktop/index.php'; diger butun fayllar da bele. basqa daha optimal varianti varmi?

E. Hacı (2015-08-21 13:06:14)
Dediklərinizin hər birinin həlli var. Amma ümumi konsept tamamilə yanlışdır deyə bu həllərə gərək yoxdur. Qayda 1: Tema 1 dənə olmalıdır, mütləq və mütləq. Mobile və desktop məsələsi temanın daxilində həll olmalıdır. Detektor qoy init-dən əvvəl detekt etsin, sonra ona uyğun lib-lər, template load olsun. Yəni yol init-dən əvvəl ayrılsın, amma temanın daxilində. Qayda 2: plugin və theme xaricində heç bir lib, funksiya saxlanılmamalıdır heç bir halda. Lib-i temanın daxilində rahat saxlamaq olar. Əsas məntiq olaraq ona fokuslanmaq lazım ki: kod parçalarınız ON-DEMAND işləsin. Yəni nə lazımdır o çağırılsın. Bunu struktur olaraq həll etdikdən sonra heç bir problem qalmır

Emin Rəhmanov (2015-08-21 12:58:54)
Demeli bele bir meqama rast geldim. men dizayni deyisende dediyim kimi kicik plugin ile deyisirem. pluginde userin device ni yoxladiqdan sonra uygun olaraq 2 tema desktop ve ya mobile arasinda uygun temani bu kodla aktiv edirem. [code] add_filter('stylesheet', function() { return 'mobile'; }); add_filter('template', function() { return 'mobile'; }); [/code] eger admin panelden desktop theme secilibse ve men bu yuxardaki kodlarla mobile theme ni aktiv ediremse her 2 add_filter ile stylesheet ve template. bu zaman tema tamamile aktiv olur mobil tema. yox eger temani tekce add_filter('stylesheet', function() { return 'mobile'; }); ile aktiv ediremse o zaman ise desktop temanin functions.php si de cagrilir ve mobile theme de normal olaraq yuklenir. sadece olaraq funksiyalari owerride elemir. gerek ki mobile ve desktop functions.php icinde eyniadli funksialar olmaya. bir eterefden bu cox eladi demek olar ki sirf mene lazim olan bir weydi, qalir bir mesele ki bu yolla men deyen ki isetmek olar? duzgundur isletmek bu yolla? ve tekce functions.php ni merge edir goresen yoxsa diger her hansisa fayllari da? eger yalniz temalar icinde olan functions.php leri merge etse o zaman tam men isteyendir.