{"id":233797,"date":"2023-02-22T19:01:00","date_gmt":"2023-02-22T16:01:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233797"},"modified":"2022-11-11T12:27:55","modified_gmt":"2022-11-11T09:27:55","slug":"wszystko-o-dodawaniu-stylow-i-skryptow-w-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/wszystko-o-dodawaniu-stylow-i-skryptow-w-wordpress\/","title":{"rendered":"Wszystko o dodawaniu styl\u00f3w i skrypt\u00f3w w WordPress"},"content":{"rendered":"\n<p>WordPress oferuje wiele metod dodawania styl\u00f3w i skrypt\u00f3w dla frontendu i administratora, zar\u00f3wno do dodawania plik\u00f3w, jak i bezpo\u015bredniego wyprowadzania zmiennych \/ danych wyj\u015bciowych. Ten post zawiera szczeg\u00f3\u0142owe informacje z przyk\u0142adami kodu, jak prawid\u0142owo dodawa\u0107 skrypty i style do WordPressa.<\/p>\n<p>Skrypty i style mo\u017cna rejestrowa\u0107 i umieszcza\u0107 w kolejce, definiuj\u0105c unikalne uchwyty (identyfikatory przypominaj\u0105ce \u015blimaka), dzi\u0119ki czemu WordPress mo\u017ce wyeliminowa\u0107 duplikaty, takie jak wiele bibliotek jQuery, oraz obs\u0142ugiwa\u0107 zale\u017cno\u015bci (kt\u00f3ry styl lub skrypt nale\u017cy za\u0142adowa\u0107 przed tym i innym) .<\/p>\n<p>Je\u015bli nie ma szczeg\u00f3lnej potrzeby rejestrowania styl\u00f3w lub skrypt\u00f3w, mo\u017cesz je od razu umie\u015bci\u0107 w kolejce, pomijaj\u0105c rejestracj\u0119. Mo\u017cliwe jest r\u00f3wnie\u017c wyrejestrowanie lub usuni\u0119cie z kolejki styl\u00f3w i skrypt\u00f3w (<code>wp_dequeue_script<\/code>i <code>wp_dequeue_style<\/code>) poprzez odwo\u0142anie si\u0119 do uchwytu. Zwykle pomaga dodanie wy\u017cszej liczby w priorytecie haka (sprawiaj\u0105c, \u017ce b\u0119dzie on uruchamiany po haku, w kt\u00f3rym elementy zosta\u0142y umieszczone w kolejce).<\/p>\n<p>PS: Dodawanie styl\u00f3w i skrypt\u00f3w do Gutenberga (zar\u00f3wno blok\u00f3w administratora, jak i frontendu) jest wyja\u015bnione w moim po\u015bcie <a href=\"http:\/\/localhost\/awhitepixel\/blog\/gutenberg-the-basics\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Gutenberg: Podstawy<\/a>.<\/p>\n<h2>Dodawanie skrypt\u00f3w i styl\u00f3w do frontendu<\/h2>\n<p>Aby doda\u0107 style i skrypty tylko do frontendu, u\u017cyj hooka <code>wp_enqueue_scripts<\/code>. Pomimo nazwy haka, jest on u\u017cywany zar\u00f3wno do skrypt\u00f3w, jak i styl\u00f3w. Oto przyk\u0142ad kolejkowania arkusza styl\u00f3w i pliku javascript w motywie:<\/p>\n<pre><code>add_action('wp_enqueue_scripts', function() {\n    \/\/ Styles\n    wp_enqueue_style('main-style', get_stylesheet_directory_uri().'\/style.css', [], '1.0');\n\u00a0\n    \/\/ Scripts\n    wp_enqueue_script('main-script', get_stylesheet_directory_uri().'\/assets\/js\/main.js', ['jquery'], '', true);\n});<\/code><\/pre>\n<p>Trzecim argumentem zar\u00f3wno styl\u00f3w, jak i skrypt\u00f3w jest tablica z zale\u017cno\u015bciami. Np. w przypadku skrypt\u00f3w mo\u017cesz chcie\u0107 za\u0142adowa\u0107 bibliotek\u0119 jQuery przed plikiem skryptu. <strong>Uwaga<\/strong>: Instalacje WordPress zawieraj\u0105 kilka popularnych bibliotek skrypt\u00f3w (na przyk\u0142ad jQuery, jQuery UI, Backbone i Underscore). Dop\u00f3ki dodasz <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_enqueue_script\/#default-scripts-included-and-registered-by-wordpress\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">kt\u00f3rykolwiek z tych uchwyt\u00f3w<\/a> jako zale\u017cno\u015b\u0107 w swoim enqueue_script, WordPress b\u0119dzie je umieszcza\u0142 w kolejce, wi\u0119c nie musisz dodawa\u0107 w\u0142asnych plik\u00f3w dla tych bibliotek.<\/p>\n<p>Pi\u0105tym argumentem dla skrypt\u00f3w jest to, czy skrypt powinien by\u0107 \u0142adowany na ko\u0144cu <code>&lt;body&gt;<\/code>(w stopce), a nie wewn\u0105trz <code>&lt;head&gt;<\/code>tagu.<\/p>\n<p>Aby u\u017cy\u0107 we wtyczce, musisz u\u017cy\u0107 innych metod, aby uzyska\u0107 adres URL do pliku lokalnego, na przyk\u0142ad <code>plugin_dir_url(__FILE__)<\/code>.<\/p>\n<h2>Dodawanie skrypt\u00f3w i styl\u00f3w do administratora<\/h2>\n<p>WordPress oferuje kolejny haczyk, <code>admin_enqueue_scripts<\/code>, do dodawania styl\u00f3w i skrypt\u00f3w tylko dla administratora. U\u017cyj tych samych metod, co powy\u017cej, aby zarejestrowa\u0107, umie\u015bci\u0107 w kolejce i zlokalizowa\u0107 skrypty i style:<\/p>\n<pre><code>add_action('admin_enqueue_scripts', function() {\n    global $pagenow, $post_type;\n    \/\/ Example: $hook == 'edit.php'\n    \/\/ Example: $post_type == 'post'\n    \/\/ wp_enqueue_style or wp_enqueue_script\n});<\/code><\/pre>\n<h2>Dodawanie skrypt\u00f3w i styl\u00f3w do strony logowania<\/h2>\n<p>Poniewa\u017c \u017caden z powy\u017cszych zaczep\u00f3w nie pojawia si\u0119 na ekranie logowania administratora, WordPress oferuje w tym celu osobny zaczep, <code>login_enqueue_scripts<\/code>.<\/p>\n<pre><code>add_action('login_enqueue_scripts', function() {\n    \/\/ wp_enqueue_style or wp_enqueue_script\n});<\/code><\/pre>\n<h2>Wyprowadzanie zmiennych JavaScript<\/h2>\n<p>Do wyprowadzania zmiennych JavaScript (np. pobierania \u015bcie\u017cek, przet\u0142umaczonych \u0142a\u0144cuch\u00f3w lub innych zmiennych mo\u017cna u\u017cy\u0107 wp_localize_script. Ta funkcja wymaga uchwytu skryptu umieszczonego w kolejce. Drugim parametrem by\u0142aby nazwa zmiennej, a trzecim jej warto\u015b\u0107. Warto\u015b\u0107 mo\u017ce by\u0107 tablic\u0105, tak jak :<\/p>\n<pre><code>add_action('wp_enqueue_scripts', function() {\n    \/\/ wp_enqueue_script('main-script');  \/\/ Must exist!\n    $variable_to_js = [\n        'ajax_url' =&gt; admin_url('admin-ajax.php')\n    ];\n    wp_localize_script('main-script', 'Theme_Variables', $variable_to_js);\n});<\/code><\/pre>\n<p>Wewn\u0105trz skryptu masz dost\u0119p do przekazywanych zmiennych, na przyk\u0142ad:<\/p>\n<pre><code>jQuery(document).ready(function($) { \n    console.log(Theme_Variables.ajax_url);\n});<\/code><\/pre>\n<p>W tym haczyku mo\u017cesz uzyska\u0107 dost\u0119p do zmiennych globalnych <code>$pagenow<\/code>i <code>$post_type<\/code>dok\u0142adniej okre\u015bli\u0107, gdzie chcesz umie\u015bci\u0107 swoje style i skrypty w kolejce.<\/p>\n<h2>Wyprowadzanie styl\u00f3w wbudowanych<\/h2>\n<p>Je\u015bli chcesz wyprowadzi\u0107 style wbudowane, na przyk\u0142ad dla zmiennych motywu skonfigurowanych w programie Customizer (np. za pomoc\u0105 <code>get_theme_mod<\/code>), mo\u017cesz je wyprowadzi\u0107 za pomoc\u0105 <code>wp_add_inline_style<\/code>funkcji. Dzia\u0142a bardzo podobnie do wyprowadzania zmiennych JavaScript, w kt\u00f3rych musisz poda\u0107 uchwyt stylu umieszczonego w kolejce:<\/p>\n<pre><code>add_action('wp_enqueue_scripts', function() {\n    \/\/ wp_enqueue_style('main-style');  \/\/ Must exist!\n\u00a0\n    $color = get_theme_mod('my-custom-color');  \/\/ e.g. #FF0000\n    $custom_css = \"\n        body {\n            background: {$color};\n        }\";\n        wp_add_inline_style('main-style', $custom_css);\n});<\/code><\/pre>\n<h2>Dodawanie tag\u00f3w asynchronicznych do skrypt\u00f3w<\/h2>\n<p>Niestety nie ma bezpo\u015bredniej funkcji ani filtra, kt\u00f3ry mo\u017cna by doda\u0107 <code>async<\/code>do tag\u00f3w skryptu, ale mo\u017cemy to osi\u0105gn\u0105\u0107, manipuluj\u0105c ci\u0105giem znak\u00f3w, kt\u00f3rego WordPress u\u017cywa do wyprowadzania tag\u00f3w skryptu dla wszystkich umieszczonych w kolejce skrypt\u00f3w, tak jak to (pami\u0119taj, aby okre\u015bli\u0107 sw\u00f3j skrypt za pomoc\u0105 jego uchwytu):<\/p>\n<pre><code>add_filter('script_loader_tag', function($tag, $handle, $src) {\n    if ('main-script' != $handle) {\n        return $tag;\n    }\n    return str_replace('&lt;script', '&lt;script async', $tag);\n}, 11, 3);<\/code><\/pre>\n<h2>Przydatne linki do dokumentacji<\/h2>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\/wp_enqueue_scripts\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_enqueue_scripts<\/a> (hak)<\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\/admin_enqueue_scripts\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">admin_enqueue_scripts<\/a> (hak)<\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\/login_enqueue_scripts\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">login_enqueue_scripts<\/a> (hak)<\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_enqueue_style\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_enqueue_style<\/a><\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/wp_dequeue_style\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_dequeue_style<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_enqueue_script\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_enqueue_script<\/a><\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/wp_dequeue_script\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_dequeue_script<\/a><\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/wp_localize_script\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_localize_script<\/a><\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/wp_add_inline_style\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_add_inline_style<\/a><\/li>\n<\/ul>\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 post zawiera szczeg\u00f3\u0142owe informacje z przyk\u0142adami kodu, jak prawid\u0142owo dodawa\u0107 skrypty i style do WordPress, zar\u00f3wno pliki, jak i zmienne wyj\u015bciowe.<\/p>\n","protected":false},"author":1,"featured_media":224083,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[897,721,721,897,1110,805,805,836,836,845,929,929,866,866],"tags":[1169],"class_list":["post-233797","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kod","category-deweloper","category-n-a","category-php-7","category-przewodnik-dla-poczatkujacych","category-samouczki","category-tematy","category-wordpress-7","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/233797","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=233797"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/233797\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/224083"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=233797"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=233797"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=233797"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}