{"id":233736,"date":"2023-02-20T20:15:00","date_gmt":"2023-02-20T17:15:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233736"},"modified":"2022-11-11T12:07:12","modified_gmt":"2022-11-11T09:07:12","slug":"jak-kompilowac-scss-za-pomoca-php-dodaj-zmienne-do-wordpress-customizer-w-celu-kompilacji-motywu-css","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/jak-kompilowac-scss-za-pomoca-php-dodaj-zmienne-do-wordpress-customizer-w-celu-kompilacji-motywu-css\/","title":{"rendered":"Jak kompilowa\u0107 SCSS za pomoc\u0105 PHP: Dodaj zmienne do WordPress Customizer w celu kompilacji motywu CSS"},"content":{"rendered":"\n<p>Ten samouczek poka\u017ce Ci, jak doda\u0107 ustawienia motywu, np. kolory motywu, w WordPress Customizer i ponownie skompilowa\u0107 arkusz styl\u00f3w motywu z wybranymi zmiennymi. Posiadaj\u0105c stylizacj\u0119 motywu w SCSS przy u\u017cyciu biblioteki, mo\u017cesz \u0142atwo umo\u017cliwi\u0107 u\u017cytkownikom motywu dostosowywanie dowolnych zmiennych w arkuszu styl\u00f3w motywu, bez konieczno\u015bci samodzielnej edycji plik\u00f3w SCSS.<\/p>\n<p>Ka\u017cdy dobry motyw powinien umo\u017cliwia\u0107 du\u017c\u0105 personalizacj\u0119. Przynajmniej powinno by\u0107 mo\u017cliwe ustawienie kolor\u00f3w g\u0142\u00f3wnego motywu. Zamiast pisa\u0107 du\u017co brzydkich CSS, aby wsz\u0119dzie zast\u0119powa\u0107 kolory motywu, mo\u017cesz zamiast tego ponownie skompilowa\u0107 pe\u0142ny arkusz styl\u00f3w bezpo\u015brednio z Customizer. Ten samouczek nauczy Ci\u0119, jak!<\/p>\n<h2>Co zrobimy \u2013 i czego potrzebujemy<\/h2>\n<p>Zak\u0142adam, \u017ce tw\u00f3j motyw ma ju\u017c troch\u0119 stylizacji w plikach SCSS, kt\u00f3re ju\u017c wkompilowa\u0142e\u015b do g\u0142\u00f3wnego motywu <code>style.css<\/code>. U\u017cywaj\u0105c SCSS, najprawdopodobniej definiujesz powtarzaj\u0105ce si\u0119 rzeczy, takie jak kolory, rozmiary lub punkty przerwania, jako zmienne SCSS i u\u017cywasz tych zmiennych w swojej stylizacji.<\/p>\n<p>Dla zmiennych w pliku SCSS mo\u017cna utworzy\u0107 dowolne i dowoln\u0105 liczb\u0119 ustawie\u0144 Customizer. Idealnie do tego nadaj\u0105 si\u0119 selektory kolor\u00f3w, wprowadzanie liczb i tekstu. Gdy u\u017cytkownik zmieni ustawienia w WordPress Customizer, zobaczy podgl\u0105d motywu ze zmienionymi zmiennymi. A kiedy klikn\u0105 \u201eZapisz&quot;, ostateczny CSS zostanie skompilowany do g\u0142\u00f3wnego pliku CSS arkusza styl\u00f3w przy u\u017cyciu wybranych warto\u015bci.<\/p>\n<p>Jako przyk\u0142ad dla tego samouczka przyjm\u0119, \u017ce g\u0142\u00f3wny plik SCSS arkusza styl\u00f3w motywu robi <code>@import<\/code>plik <code>variables.scss<\/code>. Tam zdefiniowali\u015bmy trzy zmienne, kt\u00f3re chcemy dostosowa\u0107 w Customizer: Dwa kolory i jeden rozmiar tekstu w <code>px<\/code>.<\/p>\n<pre><code>$main: #594c74 !default;\n$secondary: #555 !default;\n$text-size: 12px !default;<\/code><\/pre>\n<p>Nale\u017cy pami\u0119ta\u0107, \u017ce aby umo\u017cliwi\u0107 SCSS ponowne zdefiniowanie zmiennych, <strong>nale\u017cy je zdefiniowa\u0107<\/strong> za pomoc\u0105 <code>!default<\/code>. To jest <a href=\"https:\/\/sass-lang.com\/documentation\/variables#default-values\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">zasada w SCSS<\/a>. Aby ten samouczek dzia\u0142a\u0142; wszelkie zmienne, kt\u00f3re chcesz dostosowa\u0107, musz\u0105 by\u0107 zdefiniowane jako domy\u015blne w plikach SCSS.<\/p>\n<p>Od Ciebie zale\u017cy, kiedy (lub czy) chcesz nadpisa\u0107 plik CSS. W tym samouczku za\u0142o\u017cono, \u017ce gdy u\u017cytkownik kliknie \u201eZapisz&#8221; w programie Customizer, nast\u0105pi ponowna kompilacja i zapis do CSS motywu. Jednak gdy podgl\u0105d Customizera jest aktywny, a u\u017cytkownik zmienia ustawienia (przed klikni\u0119ciem Zapisz), po prostu wypisujemy skompilowany CSS w nag\u0142\u00f3wku do podgl\u0105du witryny. Nie chcemy od razu nadpisywa\u0107 pliku CSS na wypadek, gdyby u\u017cytkownik chcia\u0142 anulowa\u0107 wprowadzone przez siebie zmiany.<\/p>\n<h3>\u00a0 Pami\u0119ta\u0107\u2026<\/h3>\n<p>Ten samouczek nadpisze plik motywu za <code>style.css<\/code>ka\u017cdym razem, gdy ustawienia Customizer zostan\u0105 zapisane.<\/p>\n<p>Zak\u0142adam, \u017ce ju\u017c skompilowa\u0142e\u015b swoje pliki SCSS programem kompiluj\u0105cym (np. <a href=\"http:\/\/koala-app.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Koala<\/a> lub wiersz polece\u0144). Posiadanie tego kodu w motywie spowoduje nadpisanie pliku CSS, ale nie zmieni \u017ar\u00f3d\u0142owych plik\u00f3w SCSS. Oznacza to, \u017ce za ka\u017cdym razem, gdy dokonasz zmian w programie Customizer, a nast\u0119pnie wr\u00f3cisz do oryginalnych plik\u00f3w SCSS i ponownie je skompilujesz, ustawienia dostosowania zostan\u0105 utracone!<\/p>\n<p>Istnieje kilka sposob\u00f3w na obej\u015bcie tego i zale\u017cy to od twojego projektu i sposobu pracy. W wi\u0119kszo\u015bci przypadk\u00f3w nie stanowi\u0142oby to problemu. Zwykle nale\u017cy o tym pami\u0119ta\u0107 podczas opracowywania motywu. Je\u015bli przekazujesz sw\u00f3j sfinalizowany motyw komu\u015b innemu, zwykle i tak nie dotyka on twoich plik\u00f3w SCSS.<\/p>\n<p>Pomijaj\u0105c to, zacznijmy przyjrze\u0107 si\u0119, jak to robimy:<\/p>\n<ol>\n<li>Zapoznanie si\u0119 z bibliotek\u0105 SCSSPHP i w\u0142\u0105czenie jej do naszego motywu<\/li>\n<li>Utw\u00f3rz ustawienia Customizer dla ka\u017cdej zmiennej SCSS, kt\u00f3r\u0105 chcemy dostosowa\u0107<\/li>\n<li>Upewnienie si\u0119, \u017ce Customizer wy\u015bwietla podgl\u0105d zmian w podr\u00f3\u017cy<\/li>\n<li>Podczas zapisywania ustawie\u0144 Customizer ponownie kompilujemy i nadpisujemy plik CSS motywu.<\/li>\n<\/ol>\n<h2>1 Biblioteka SCSSPHP<\/h2>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152472-61e4dfd0532a5.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152472-61e4dfd0532a5.png\" alt=\"Jak kompilowa\u0107 SCSS za pomoc\u0105 PHP: Dodaj zmienne do WordPress Customizer w celu kompilacji motywu CSS\" ><\/a><\/p>\n<p>Do kompilacji plik\u00f3w SCSS <a href=\"https:\/\/scssphp.github.io\/scssphp\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">u\u017cyjemy biblioteki SCSSPHP firmy leafo<\/a> (licencja MIT). Pami\u0119taj, \u017ce ten samouczek dotyczy biblioteki SCSS. Autor biblioteki ma podobn\u0105 <a href=\"https:\/\/github.com\/leafo\/lessphp\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">bibliotek\u0119 LESS PHP,<\/a> je\u015bli wolisz u\u017cywa\u0107 LESS, ale pami\u0119taj, \u017ce poni\u017cszy samouczek dotyczy biblioteki SCSS.<\/p>\n<p>Biblioteka SCSSPHP jest naprawd\u0119 prosta w u\u017cyciu! Oto uproszczony przegl\u0105d tego, jak b\u0119dziemy u\u017cywa\u0107 biblioteki w PHP naszego motywu:<\/p>\n<ul>\n<li>Zawieramy bibliotek\u0119<\/li>\n<li>Utw\u00f3rz now\u0105 instancj\u0119 klasy kompilatora z biblioteki<\/li>\n<li>Za\u0142aduj zawarto\u015b\u0107 \u017ar\u00f3d\u0142owego pliku SCSS i przeka\u017c go do obiektu kompilatora<\/li>\n<li>Zdefiniuj tablic\u0119 asocjacyjn\u0105; Nazwy zmiennych SCSS (w tym <code>$<\/code>) jako klucze i ich warto\u015bci. Ka\u017cdy element w tej tablicy zast\u0105pi zmienne o tej samej nazwie w dostarczonym pliku SCSS.<\/li>\n<li>Prosimy obiekt kompilatora, aby skompilowa\u0142 i odebra\u0142 skompilowany CSS w postaci ci\u0105gu znak\u00f3w. Nast\u0119pnie mo\u017cemy albo wyprowadzi\u0107 ten CSS w \u015brodku <code>head<\/code>, albo zapisa\u0107 to w <code>style.css<\/code>pliku motywu<\/li>\n<\/ul>\n<h3>\u00a0 Jakie zmienne SCSS mo\u017cemy skompilowa\u0107?<\/h3>\n<p>Prosta odpowied\u017a brzmi: Dowolny rodzaj prawid\u0142owej zmiennej SCSS!<\/p>\n<p>Biblioteka SCSSPHP mo\u017ce skompilowa\u0107 dowolny rodzaj prawid\u0142owych zmiennych SCSS, ale pami\u0119taj, \u017ce musisz si\u0119 upewni\u0107, \u017ce zosta\u0142y poprawnie sformatowane w programie Customizer. Na przyk\u0142ad kolory musz\u0105 by\u0107 poprzedzone prefiksem <code>#<\/code>dla kolor\u00f3w szesnastkowych lub by\u0107 sformatowane jako <code>rgb()<\/code>lub <code>rgba()<\/code>definicje. Do zmiennej rozmiaru zwykle trzeba doda\u0107 \u201e <code>px<\/code>&#8222;, \u201e <code>em<\/code>&#8222;, \u201e <code>%<\/code>&#8221; i tak dalej.<\/p>\n<p>Je\u015bli planujesz stworzy\u0107 zaawansowany system do kompilacji zmiennych SCSS za pomoc\u0105 motywu Customizer, upewnij si\u0119, \u017ce masz dobry system do prawid\u0142owego formatowania ka\u017cdego typu zmiennej!<\/p>\n<p>Zr\u00f3bmy pierwszy krok z drogi; pobranie i w\u0142\u0105czenie biblioteki do naszego motywu:<\/p>\n<h3>Pobieranie i do\u0142\u0105czanie biblioteki SCSSPHP do motywu<\/h3>\n<p>Pierwszym krokiem jest pobranie <a href=\"https:\/\/scssphp.github.io\/scssphp\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">biblioteki SCSSPHP<\/a>. Na po\u0142\u0105czonej stronie kliknij przycisk \u201ePobierz&#8221; na samej g\u00f3rze. Je\u015bli wolisz korzysta\u0107 z Composera, na stronie znajdziesz poradnik na ten temat.<\/p>\n<p>Wypakuj zip do podfolderu gdzie\u015b w swoim motywie. Jako przyk\u0142ad umieszczam go w <code>theme\/inc\/scssphp\/<\/code>folderze.<\/p>\n<p>Otw\u00f3rz plik PHP, do kt\u00f3rego chcesz doda\u0107 kod do kompilacji. Mo\u017ce znajdowa\u0107 si\u0119 bezpo\u015brednio w motywie <code>functions.php<\/code>lub w pliku PHP do\u0142\u0105czonym przez <code>functions.php<\/code>. Dla uproszczenia pisz\u0119 wszystko w \u015brodku <code>functions.php<\/code>.<\/p>\n<p>Zanim b\u0119dziemy mogli korzysta\u0107 z biblioteki, musimy j\u0105 do\u0142\u0105czy\u0107; jak tak:<\/p>\n<pre><code>require_once(get_stylesheet_directory(). '\/inc\/scssphp\/scss.inc.php');<\/code><\/pre>\n<p>Dostosuj odpowiednio \u015bcie\u017ck\u0119 do swoich plik\u00f3w. Musimy do\u0142\u0105czy\u0107 <code>scss.inc.php<\/code>plik znaleziony w folderze g\u0142\u00f3wnym biblioteki. Teraz po tej linii mo\u017cemy skorzysta\u0107 z klas biblioteki!<\/p>\n<h2>2 Tworzenie ustawie\u0144 Customizer dla zmiennych SCSS<\/h2>\n<p>Utw\u00f3rzmy ustawienia WordPress Customizer dla naszych zmiennych. Na potrzeby samouczka dodamy ustawienia dla wspomnianych powy\u017cej zmiennych SCSS: dwa selektory kolor\u00f3w i wej\u015bcie liczbowe.<\/p>\n<p>Nie b\u0119d\u0119 wdawa\u0142 si\u0119 w szczeg\u00f3\u0142y wyja\u015bniaj\u0105ce, jak doda\u0107 ustawienia Customizer \u2013 jest na to mn\u00f3stwo samouczk\u00f3w. W poni\u017cszym przyk\u0142adzie kodu tworz\u0119 now\u0105 sekcj\u0119 i umieszczam w niej trzy ustawienia:<\/p>\n<pre><code>add_action('customize_register', function($wp_customize) {\n    $wp_customize-&gt;add_section('theme-variables', [\n        'title' =&gt; __('Theme Variables', 'txtdomain'),\n        'priority' =&gt; 25\n    ]);\n\u00a0\n    $wp_customize-&gt;add_setting('theme-main', ['default' =&gt; '#594c74']);\n    $wp_customize-&gt;add_control(new WP_Customize_Color_Control($wp_customize, 'theme-main', [\n        'section' =&gt; 'theme-variables',\n        'label' =&gt; __('Main theme color', 'txtdomain'),\n        'priority' =&gt; 10\n    ]));\n\u00a0\n    $wp_customize-&gt;add_setting('theme-secondary', ['default' =&gt; '#555']);\n    $wp_customize-&gt;add_control(new WP_Customize_Color_Control($wp_customize, 'theme-secondary', [\n        'section' =&gt; 'theme-variables',\n        'label' =&gt; __('Secondary theme color', 'txtdomain'),\n        'priority' =&gt; 20\n    ]));\n\u00a0\n    $wp_customize-&gt;add_setting('theme-text-size', ['default' =&gt; '12']);\n    $wp_customize-&gt;add_control('theme-text-size', [\n        'section' =&gt; 'theme-variables',\n        'label' =&gt; __('Text size', 'txtdomain'),\n        'type' =&gt; 'number',\n        'priority' =&gt; 30,\n        'input_attrs' =&gt; ['min' =&gt; 8, 'max' =&gt; 20, 'step' =&gt; 1]\n    ]);\n});<\/code><\/pre>\n<p>Ten kod \u0142\u0105czy si\u0119 <code>customize_register<\/code>i dodaje sekcj\u0119 o nazwie \u201eZmienne tematyczne&#8221;. Nast\u0119pnie dodaje selektor kolor\u00f3w &#8217; <code>theme-main<\/code>&#8217;, kolejny selektor kolor\u00f3w &#8217; <code>theme-secondary<\/code>&#8217; i wprowadza liczb\u0119 &#8217; <code>theme-text-size<\/code>&#8217;. To jest ca\u0142a domy\u015blna funkcjonalno\u015b\u0107 WordPressa. Dodaj\u0119 r\u00f3wnie\u017c ustaw domy\u015blne ustawienie ka\u017cdego ustawienia na te same warto\u015bci, kt\u00f3re zosta\u0142y zdefiniowane w <code>variables.scss<\/code>pliku. Ma to na celu zapewnienie, \u017ce ustawienia Customizer zostan\u0105 zainicjowane z poprawnymi kolorami.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152472-61e4dfd112a70.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152472-61e4dfd112a70.png\" alt=\"Jak kompilowa\u0107 SCSS za pomoc\u0105 PHP: Dodaj zmienne do WordPress Customizer w celu kompilacji motywu CSS\" ><\/a><\/p>\n<p>Wygl\u0105da \u015bwietnie! Ale w tej chwili nic si\u0119 nie dzieje, gdy dostosowujesz te zmienne. Przejd\u017amy do kroku 3; obs\u0142uga podgl\u0105du w Customizerze.<\/p>\n<h2>3 Kompiluj CSS w podr\u00f3\u017cy w podgl\u0105dzie Customizer<\/h2>\n<p>Ten krok obs\u0142uguje aktualizacj\u0119 podgl\u0105du Customizer, gdy u\u017cytkownik zmienia ustawienia i nie zapisuje do \u017cadnego z naszych plik\u00f3w. Zamiast tego wypiszemy skompilowany CSS w <code>&lt;head&gt;<\/code>podgl\u0105dzie wewn\u0105trz <code>&lt;style&gt;<\/code>tagu. W ten spos\u00f3b zapewniamy, \u017ce wbudowany CSS nadpisuje wszystkie style z oryginalnego pliku CSS.<\/p>\n<p>Aby sprawdzi\u0107, czy aktualnie korzystamy z podgl\u0105du Customizer, u\u017cywamy funkcji <code>[is_customize_preview](https:\/\/developer.wordpress.org\/reference\/functions\/is_customize_preview\/)()<\/code>. Kiedy to powr\u00f3ci <code>true<\/code>, tworzymy funkcj\u0119 podpi\u0119t\u0105 do <code>wp_head<\/code>. Wewn\u0105trz funkcji inicjujemy i konfigurujemy bibliotek\u0119 SCSSPHP, pobieramy aktualne warto\u015bci ustawie\u0144, kompilujemy CSS i wypisujemy go w <code>&lt;style&gt;<\/code>tagu.<\/p>\n<pre><code>require_once(get_stylesheet_directory(). '\/inc\/scssphp\/scss.inc.php');\n\u00a0\nif (is_customize_preview()) {\n    add_action('wp_head', function() {\n        $compiler = new ScssPhpScssPhpCompiler();\n\u00a0\n        $source_scss = get_stylesheet_directory(). '\/assets\/scss\/style.scss';\n        $scssContents = file_get_contents($source_scss);\n        $import_path = get_stylesheet_directory(). '\/assets\/scss';\n        $compiler-&gt;addImportPath($import_path);\n\u00a0\n        $variables = [\n            '$main' =&gt; get_theme_mod('theme-main', '#594c74'),\n            '$secondary' =&gt; get_theme_mod('theme-secondary', '#555'),\n            '$text-size' =&gt; get_theme_mod('theme-text-size', '12'). 'px',\n        ];\n        $compiler-&gt;setVariables($variables);\n\u00a0\n        $css = $compiler-&gt;compile($scssContents);\n        if (!empty($css) &amp;&amp; is_string($css)) {\n            echo '&lt;style type=\"text\/css\"&gt;'. $css. '&lt;\/style&gt;';\n        }\n    });\n}<\/code><\/pre>\n<p>W linii <code>#7<\/code>definiujemy \u015bcie\u017ck\u0119 do \u017ar\u00f3d\u0142owego pliku SCSS i \u0142adujemy jego zawarto\u015b\u0107 do zmiennej at <code>#8<\/code>. A w linii <code>#9<\/code>i <code>#10<\/code>ustawili\u015bmy \u015bcie\u017ck\u0119 importu dla biblioteki, aby zapewni\u0107 <code>@import<\/code>prawid\u0142owe dzia\u0142anie wszystkich plik\u00f3w w naszych plikach SCSS. Wi\u0119cej informacji na ten temat mo\u017cna znale\u017a\u0107 w <a href=\"https:\/\/scssphp.github.io\/scssphp\/docs\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">witrynie dokumentacji biblioteki<\/a> pod nag\u0142\u00f3wkiem \u201e\u015acie\u017cki importu&#8221;. Zasadniczo biblioteka SCSSPHP musi zna\u0107 wzgl\u0119dn\u0105 \u015bcie\u017ck\u0119 folderu SCSS, aby wszystkie <code>@import<\/code>\u015bcie\u017cki by\u0142y poprawne.<\/p>\n<p>W linii <code>#12-16<\/code>tworzymy tablic\u0119 dla kompilatora; tablica asocjacyjna z nazwami zmiennych jako kluczami. Dla warto\u015bci, kt\u00f3rych u\u017cywamy, <code>[get_theme_mod](https:\/\/developer.wordpress.org\/reference\/functions\/get_theme_mod\/)()<\/code>aby uzyska\u0107 warto\u015bci z Customizer. Funkcja <code>get_theme_mod()<\/code>pozwala zdefiniowa\u0107 jako drugi parametr domy\u015blny, je\u015bli warto\u015b\u0107 nie zosta\u0142a zapisana. To oszcz\u0119dza nam awarii kompilatora z warto\u015bciami takimi jak <code>null<\/code>. Zapewniamy wi\u0119c te same warto\u015bci domy\u015blne, co w naszym pliku zmiennych SCSS i kiedy zarejestrowali\u015bmy ustawienia Customizer.<\/p>\n<p>Zwr\u00f3\u0107 tak\u017ce uwag\u0119, \u017ce kod w wierszu <code>#15<\/code>do\u0142\u0105cza \u201e <code>px<\/code>&#8222;, zapewniaj\u0105c, \u017ce rzeczywista warto\u015b\u0107 zmiennej jest prawid\u0142owa. W przeciwnym razie skompilowa\u0142by si\u0119 jako \u201e <code>$text-size: 12;<\/code>&#8222;, gdy potrzebujemy \u201e <code>$text-size: 12px;<\/code>&#8222;. Dostarczamy tablic\u0119 zmiennych do kompilatora w wierszu <code>#17<\/code>, m\u00f3wi\u0105c mu, aby skompilowa\u0142 si\u0119 przy u\u017cyciu tych zmiennych.<\/p>\n<p>Nast\u0119pnie w wierszu <code>#19-22<\/code>wywo\u0142ujemy <code>compile()<\/code>funkcj\u0119, kt\u00f3ra powinna zwr\u00f3ci\u0107 skompilowany CSS jako ci\u0105g znak\u00f3w. Wyprowadzamy <code>&lt;style&gt;<\/code>tag z ci\u0105giem CSS w \u015brodku. Poniewa\u017c jeste\u015bmy uzale\u017cnieni <code>wp_head<\/code>od, Customizer wyrenderuje podgl\u0105d ze zmienionym kodem CSS za ka\u017cdym razem, gdy wprowadzana jest zmiana.<\/p>\n<h2>4 Zapisywanie skompilowanego CSS w arkuszu styl\u00f3w motywu<\/h2>\n<p>Kod do kompilacji CSS jest bardzo podobny do poprzedniego kroku. Jedyna r\u00f3\u017cnica polega na tym, \u017ce teraz zapisujemy CSS do pliku zamiast go wyprowadza\u0107. Powiniene\u015b <strong>naprawd\u0119<\/strong> rozwa\u017cy\u0107 umieszczenie tego w funkcji, aby nie powtarza\u0107 kodu, ale dla jasno\u015bci postanowi\u0142em je rozdzieli\u0107.<\/p>\n<p>Zaczepiamy si\u0119 <code>[customize_save_after](https:\/\/developer.wordpress.org\/reference\/hooks\/customize_save_after\/)<\/code>, kt\u00f3re wyzwalacze, gdy kto\u015b kliknie Zapisz w WordPress Customizer. W tym momencie pobieramy \u017ar\u00f3d\u0142owy SCSS, definiujemy warto\u015bci zmiennych i kompilujemy go do CSS. Z ci\u0105giem CSS u\u017cywamy prostej funkcji PHP, aby zapisa\u0107 go w pliku CSS motywu.<\/p>\n<pre><code>add_action('customize_save_after', function() {\n    $compiler = new ScssPhpScssPhpCompiler();\n\u00a0\n    $source_scss = get_stylesheet_directory(). '\/assets\/scss\/style.scss';\n    $scssContents = file_get_contents($source_scss);\n    $import_path = get_stylesheet_directory(). '\/assets\/scss';\n    $compiler-&gt;addImportPath($import_path);\n    $target_css = get_stylesheet_directory(). '\/style.css';\n\u00a0\n    $variables = [\n        '$main' =&gt; get_theme_mod('theme-main', '#594c74'),\n        '$secondary' =&gt; get_theme_mod('theme-secondary', '#555'),\n        '$text-size' =&gt; get_theme_mod('theme-text-size', '12'). 'px',\n    ];      \n    $compiler-&gt;setVariables($variables);\n\u00a0\n    $css = $compiler-&gt;compile($scssContents);\n    if (!empty($css) &amp;&amp; is_string($css)) {\n        file_put_contents($target_css, $css);\n    }\n});<\/code><\/pre>\n<p>Jedyn\u0105 r\u00f3\u017cnic\u0105 w stosunku do poprzedniej jest linia, w <code>#8<\/code>kt\u00f3rej definiujemy plik docelowy do zapisu, oraz linia <code>#19<\/code>, w kt\u00f3rej zapisujemy do pliku.<\/p>\n<h2>\u00a0 Wniosek<\/h2>\n<p>Mamy teraz ustawienia Customizer, kt\u00f3re kontroluj\u0105 zmienne w pliku SCSS motywu i nadpisuj\u0105 g\u0142\u00f3wny arkusz styl\u00f3w motywu przy u\u017cyciu tych zmiennych. Nie ma ogranicze\u0144 co do liczby lub rodzaju ustawie\u0144, kt\u00f3re u\u017cytkownicy motywu maj\u0105 dostosowywa\u0107! Zainwestuj troch\u0119 czasu w skonfigurowanie odpowiedniego systemu do obs\u0142ugi formatowania r\u00f3\u017cnych typ\u00f3w zmiennych (np. przedrostk\u00f3w lub przyrostk\u00f3w) i odpowiedni\u0105 struktur\u0119 ustawie\u0144 Customizer. U\u017cytkownicy motywu doceni\u0105 elastyczno\u015b\u0107 i \u0142atwo\u015b\u0107 dostosowania motywu!<\/p>\n<p>Mo\u017cesz tak\u017ce wymy\u015bli\u0107 r\u00f3\u017cne sposoby obs\u0142ugi zapisu pliku ko\u0144cowego CSS. Je\u015bli nie chcesz nadpisywa\u0107 g\u0142\u00f3wnego arkusza styl\u00f3w, by\u0107 mo\u017ce chcesz zapisa\u0107 go w innym pliku. Mo\u017cesz r\u00f3wnie\u017c przyjrze\u0107 si\u0119 u\u017cywaniu <a href=\"https:\/\/sass-lang.com\/documentation\/at-rules\/control\/if\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">warunkowych if-else w SCSS<\/a>.<\/p>\n<p>Ten samouczek zosta\u0142 napisany, aby da\u0107 ci odskoczni\u0119 do tego, jak mo\u017cesz dostosowa\u0107 sw\u00f3j motyw WordPress z Customizer. Daj mi zna\u0107, czy by\u0142o to dla Ciebie przydatne \u2013 lub je\u015bli potrzebujesz bardziej zaawansowanego samouczka, kt\u00f3ry zapewni, \u017ce arkusz styl\u00f3w motywu nie zostanie nadpisany!<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ten samouczek poka\u017ce Ci, jak doda\u0107 ustawienia motywu, takie jak kolory w WordPress Customizer i skompilowa\u0107 motyw SCSS z wybranymi zmiennymi w PHP.<\/p>\n","protected":false},"author":1,"featured_media":224105,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[897,908,908,721,721,897,1110,805,805,836,836,845,929,929,845,866,866],"tags":[1169],"class_list":{"0":"post-233736","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-kod","8":"category-css-7","10":"category-deweloper","13":"category-n-a","14":"category-php-7","16":"category-przewodnik-dla-poczatkujacych","18":"category-samouczki","19":"category-tematy","22":"category-wordpress-7","24":"tag-affiai-pl"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/233736","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=233736"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/233736\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/224105"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=233736"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=233736"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=233736"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}