{"id":233510,"date":"2023-02-16T16:49:00","date_gmt":"2023-02-16T13:49:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233510"},"modified":"2022-11-11T00:05:42","modified_gmt":"2022-11-10T21:05:42","slug":"jak-dodac-fontawesome-ikony-do-pozycji-menu-za-pomoca-zaawansowanych-pol-niestandardowych","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/jak-dodac-fontawesome-ikony-do-pozycji-menu-za-pomoca-zaawansowanych-pol-niestandardowych\/","title":{"rendered":"Jak doda\u0107 Fontawesome ikony do pozycji menu za pomoc\u0105 zaawansowanych p\u00f3l niestandardowych?"},"content":{"rendered":"\n<p>W tym po\u015bcie dowiesz si\u0119, jak u\u017cywa\u0107 zaawansowanych p\u00f3l niestandardowych (ACF), aby umo\u017cliwi\u0107 dodawanie ikon do menu. W tym przyk\u0142adzie dodamy ikon\u0119 <a href=\"https:\/\/fontawesome.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Fontawesome<\/a>, ale mo\u017cesz zmodyfikowa\u0107 kod, aby dopasowa\u0107 go do swoich potrzeb. Zamiast tego mo\u017cesz doda\u0107 selektor plik\u00f3w dla plik\u00f3w SVG lub co\u015b innego.<\/p>\n<p>Ten przewodnik b\u0119dzie dzia\u0142a\u0142 z <a href=\"https:\/\/wordpress.org\/plugins\/advanced-custom-fields\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">bezp\u0142atn\u0105 wersj\u0105 zaawansowanych p\u00f3l niestandardowych<\/a>, ale upewnij si\u0119, \u017ce masz wersj\u0119 5.6 lub nowsz\u0105.<\/p>\n<h2>Dodawanie grupy i pola ACF<\/h2>\n<p>Pierwszym krokiem jest dodanie samego pola do element\u00f3w menu. Ten przewodnik doda tekst wej\u015bciowy, aby wpisa\u0107 nazw\u0119 klasy dla ikony Fontawesome, ale je\u015bli potrzebujesz innego rozwi\u0105zania (np. Selektora plik\u00f3w dla pliku SVG), zmodyfikuj pola wej\u015bciowe.<\/p>\n<p>Upewnij si\u0119, \u017ce lokalizacja grupy Zaawansowane pole niestandardowe jest ustawiona na \u201ePozycja menu&quot;. Mo\u017cesz ustawi\u0107 j\u0105 na \u201eWszystko&#8221; lub mo\u017cesz okre\u015bli\u0107 wed\u0142ug lokalizacji menu lub okre\u015blonych menu.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153055-61e506fa60c76.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-153055-61e506fa60c76.png\" alt=\"Jak doda\u0107 Fontawesome ikony do pozycji menu za pomoc\u0105 zaawansowanych p\u00f3l niestandardowych?\" ><\/a><\/p>\n<p>Je\u015bli dodajesz pola i grupujesz wed\u0142ug kodu, ustaw parametr lokalizacji na \u201e <code>nav_menu_item<\/code>&#8222;. Aby dowiedzie\u0107 si\u0119 wi\u0119cej, zapoznaj si\u0119 z moim <a href=\"https:\/\/awhitepixel.com\/blog\/complete-reference-for-adding-advanced-custom-fields-acf-fields-and-groups-by-code\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">pe\u0142nym dokumentem dotycz\u0105cym dodawania p\u00f3l ACF wed\u0142ug kodu .<\/a><\/p>\n<pre><code>acf_add_local_field_group([\n    ...\n    'location' =&gt; [\n        [\n            [\n                'param' =&gt; 'nav_menu_item',\n                'operator' =&gt; '==',\n                'value' =&gt; 'all'\n            ]\n        ]\n    ]\n]);<\/code><\/pre>\n<p>Je\u015bli chodzi o samo pole, dodamy prosty tekst o nazwie \u201e <code>fontawesome_icon<\/code>&#8222;.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153055-61e506fd705e6.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-153055-61e506fd705e6.png\" alt=\"Jak doda\u0107 Fontawesome ikony do pozycji menu za pomoc\u0105 zaawansowanych p\u00f3l niestandardowych?\" ><\/a><\/p>\n<p>Lub wed\u0142ug kodu dodaj pole w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<pre><code>[\n    'key' =&gt; 'field_fontawesome_icon',\n    'label' =&gt; __('Fontawesome icon class', 'txtdomain'),\n    'name' =&gt; 'fontawesome_icon',\n    'instructions' =&gt; __('Type the name of a &lt;a href=\"https:\/\/fontawesome.com\/icons?d=gallery&amp;m=free\" target=\"_blank\"&gt;Fontawesome icon&lt;\/a&gt; class. Example: \"fab fa-facebook\".', 'txtdomain'),\n    'type' =&gt; 'text',\n]<\/code><\/pre>\n<p>Aby uczyni\u0107 go bardziej przyjaznym dla u\u017cytkownika, dobrym pomys\u0142em jest dodanie opisu z linkiem do <a href=\"https:\/\/fontawesome.com\/icons?d=gallery&#038;m=free\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">przegl\u0105du dost\u0119pnych ikon Fontawesome<\/a>. Dodaj\u0119 link, aby pokaza\u0107 tylko darmowe ikony, a nie wszystkie Pro, poniewa\u017c jest to biblioteka, kt\u00f3r\u0105 mam w moim motywie.<\/p>\n<p>Po zapisaniu pola w adminie lub w kodzie, powiniene\u015b teraz otrzyma\u0107 dodatkowe pole, gdy rozwiniesz element menu:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153055-61e507009e5b9.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-153055-61e507009e5b9.png\" alt=\"Jak doda\u0107 Fontawesome ikony do pozycji menu za pomoc\u0105 zaawansowanych p\u00f3l niestandardowych?\" ><\/a><\/p>\n<h2>Uwaga na temat zaj\u0119\u0107 z Fontawesome<\/h2>\n<p>W \u201estarszych czasach&#8221;, przed Fontawesome 5, dostarczanie klasy Fontawesome mog\u0142o by\u0107 nieco uproszczone dla u\u017cytkownika. Do koszyka mo\u017cna by\u0142o po prostu napisa\u0107 \u201ekoszyk&#8221; iw naszym kodzie mo\u017cemy doda\u0107 klas\u0119 \u201e <code>fa fa-<\/code>&#8222;, a nast\u0119pnie podan\u0105 klas\u0119 (w wyniku \u201e <code>fa fa-shopping-cart<\/code>&#8222;). Ale od czasu Fontawesome 5 klasy s\u0105 nieco skomplikowane.<\/p>\n<p>Klasa \u201eglobalna&#8221; \u201e <code>fa<\/code>&#8221; zosta\u0142a zast\u0105piona kategoriami specyficznymi dla typu ikony. Na przyk\u0142ad media spo\u0142eczno\u015bciowe lub logo znajduj\u0105 si\u0119 w kategorii marek i wymagaj\u0105 klasy \u201e <code>fab<\/code>&#8222;, pe\u0142ne ikony wymagaj\u0105 klasy \u201e <code>fas<\/code>&#8222;, podczas gdy zwyk\u0142e ikony wymagaj\u0105 \u201e <code>far<\/code>&#8222;, i tak dalej. Dlatego teraz musimy wymaga\u0107 od u\u017cytkownika motywu, aby wpisa\u0142 obie klasy Fontawesome. Znalezienie odpowiedniej klasy powinno by\u0107 \u0142atwe, poniewa\u017c jest to wyra\u017anie pokazane w ka\u017cdej ikonie na stronie Fontawesome:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153055-61e50702d0f82.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-153055-61e50702d0f82.png\" alt=\"Jak doda\u0107 Fontawesome ikony do pozycji menu za pomoc\u0105 zaawansowanych p\u00f3l niestandardowych?\" ><\/a><\/p>\n<p>Jako przyk\u0142ad musisz wpisa\u0107 \u201e <code>fas fa-shopping-cart<\/code>&#8221; w naszym polu niestandardowym w elemencie menu dla ikony koszyka.<\/p>\n<h2>Wy\u015bwietlanie ikony w menu<\/h2>\n<p>Nast\u0119pnym i ostatnim krokiem jest renderowanie ikony w menu, je\u015bli jest ustawiona. W tym celu korzystamy z filtra WordPressa <code>[wp_nav_menu_objects](https:\/\/developer.wordpress.org\/reference\/hooks\/wp_nav_menu_objects\/)<\/code>. Ten filtr jest stosowany do ka\u017cdego menu we wszystkich renderowanych menu tu\u017c przed wygenerowaniem kodu HTML, co pozwala nam modyfikowa\u0107 wynik tekstowy, klasy i nie tylko.<\/p>\n<p>To, jak chcesz wy\u015bwietli\u0107 ikon\u0119, zale\u017cy od Ciebie. Czy chcesz zast\u0105pi\u0107 tekst linku ikon\u0105, czy chcesz wy\u015bwietli\u0107 ikon\u0119 przed linkiem tekstowym lub za nim? B\u0119dziemy pod\u0105\u017ca\u0107 za niestandardowym Fontawesome, wy\u015bwietlaj\u0105c <code>&lt;i&gt;<\/code>tag z podan\u0105 klas\u0105.<\/p>\n<pre><code>add_filter('wp_nav_menu_objects', function($items) {\n    foreach ($items as &amp;$item) {\n        $icon = get_field('fontawesome_icon', $item);     \n        if ($icon) {\n            $item-&gt;title = '&lt;i class=\"'. $icon. '\"&gt;&lt;\/i&gt;'. $item-&gt;title;\n        }\n    }\n    return $items;\n});<\/code><\/pre>\n<p>Spos\u00f3b, w jaki modyfikujemy elementy menu, polega na przechodzeniu przez elementy menu w p\u0119tli przy u\u017cyciu polecenia pass by reference (dodanie a <code>&amp;<\/code>przed zmienn\u0105). Oznacza to, \u017ce ka\u017cda zmiana, kt\u00f3r\u0105 wprowadzimy w elemencie, zostanie zastosowana do obiektu element\u00f3w nadrz\u0119dnych.<\/p>\n<p>Dla ka\u017cdego elementu u\u017cywamy <code>get_field()<\/code>funkcji Advanced Custom Field, aby uzyska\u0107 warto\u015b\u0107 naszego pola \u201e <code>fontawesome_icon<\/code>&#8222;. Je\u015bli jest ustawiony, dobrze jest i\u015b\u0107. Powy\u017cszy przyk\u0142ad kodu doda ikon\u0119 przed tekstem. Je\u015bli chcesz doda\u0107 ikon\u0119 po tek\u015bcie, zamie\u0144 wiersz <code>#6<\/code>na:<\/p>\n<pre><code>$item-&gt;title .= '&lt;i class=\"'. $icon. '\"&gt;&lt;\/i&gt;';<\/code><\/pre>\n<p>Lub je\u015bli chcesz zast\u0105pi\u0107 tekst ikon\u0105 \u2013 nie wy\u015bwietlaj\u0105c w og\u00f3le tekstu, zamie\u0144 lini\u0119 <code>#6<\/code>na:<\/p>\n<pre><code>$item-&gt;title = '&lt;i class=\"'. $icon. '\" title=\"'. $item-&gt;title. '\"&gt;&lt;\/i&gt;';<\/code><\/pre>\n<p>Doda\u0142em <code>title<\/code>atrybut, aby by\u0142 troch\u0119 bardziej informacyjny dla u\u017cytkownika frontendu. Poniewa\u017c tekst jest usuwany, czasami mo\u017ce by\u0107 myl\u0105ce dla u\u017cytkownika ko\u0144cowego, do czego s\u0142u\u017cy dany element menu. Ale <code>title<\/code>atrybut zapewnia, \u017ce \u200b\u200bu\u017cytkownik otrzyma podpowied\u017a z tekstem elementu menu po najechaniu na ikon\u0119. Jest to oczywi\u015bcie ca\u0142kowicie opcjonalne.<\/p>\n<p>Je\u015bli u\u017cywasz pola innego typu, np. selektora plik\u00f3w dla plik\u00f3w SVG, musisz odpowiednio dostosowa\u0107 wyj\u015bcie.<\/p>\n<p>I to wszystko! Powiniene\u015b teraz wy\u015bwietla\u0107 ikon\u0119 Fontawesome w ka\u017cdym miejscu, w kt\u00f3rym jest renderowane menu. Ale prawdopodobnie musisz doda\u0107 do tego troch\u0119 stylizacji. Na przyk\u0142ad dodanie przestrzeni mi\u0119dzy ikon\u0105 a tekstem.<\/p>\n<h3>Dodanie zaj\u0119\u0107 dla \u0142atwiejszej stylizacji<\/h3>\n<p>Mo\u017cesz doda\u0107 niestandardowe klasy do <code>&lt;i&gt;<\/code>tagu lub doda\u0107 wi\u0119cej kodu HTML, je\u015bli to konieczne.<\/p>\n<p>Je\u015bli potrzebujesz doda\u0107 klas\u0119 do elementu zawijania menu (<code>li<\/code>elementu), masz pe\u0142ny dost\u0119p do klas element\u00f3w menu, kt\u00f3re zostan\u0105 zastosowane w powy\u017cszym filtrze. Dodaj niestandardow\u0105 klas\u0119 elementu menu dla element\u00f3w menu ikon, takich jak:<\/p>\n<pre><code>        ...\n        if ($icon) {\n            $item-&gt;title = '&lt;i class=\"'. $icon. '\"&gt;&lt;\/i&gt;'. $item-&gt;title;\n            $item-&gt;classes[] = 'menu-with-icon';\n        }\n        ...<\/code><\/pre>\n<p>Menu powinno wygl\u0105da\u0107 tak:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153055-61e507050aa94.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-153055-61e507050aa94.png\" alt=\"Jak doda\u0107 Fontawesome ikony do pozycji menu za pomoc\u0105 zaawansowanych p\u00f3l niestandardowych?\" ><\/a><\/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>Jak doda\u0107 ikony Fontawesome do element\u00f3w menu. U\u017cywamy zaawansowanych p\u00f3l niestandardowych, aby umo\u017cliwi\u0107 definiowanie klas. \u0141atwo jest dostosowa\u0107 kod do ikon SVG lub podobnych.<\/p>\n","protected":false},"author":1,"featured_media":224889,"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,845,866,866],"tags":[1169],"class_list":{"0":"post-233510","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-kod","8":"category-deweloper","11":"category-n-a","12":"category-php-7","14":"category-przewodnik-dla-poczatkujacych","16":"category-samouczki","18":"category-wordpress-7","20":"tag-affiai-pl"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/233510","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=233510"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/233510\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/224889"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=233510"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=233510"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=233510"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}