{"id":233487,"date":"2023-02-15T13:11:00","date_gmt":"2023-02-15T10:11:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233487"},"modified":"2022-11-10T23:58:22","modified_gmt":"2022-11-10T20:58:22","slug":"jak-dodac-niestandardowe-ustawienia-do-istniejacego-widzetu-w-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/jak-dodac-niestandardowe-ustawienia-do-istniejacego-widzetu-w-wordpress\/","title":{"rendered":"Jak doda\u0107 niestandardowe ustawienia do istniej\u0105cego wid\u017cetu w WordPress?"},"content":{"rendered":"\n<p>W tym po\u015bcie dowiemy si\u0119, jak doda\u0107 niestandardowy kod HTML i ustawienia do dowolnych standardowych wid\u017cet\u00f3w WordPressa lub innych. Korzystaj\u0105c z tych ustawie\u0144, nauczymy si\u0119 r\u00f3\u017cnych sztuczek, jak odpowiednio manipulowa\u0107 zachowaniem wid\u017cet\u00f3w.<\/p>\n<p>Pierwsza cz\u0119\u015b\u0107; dodawanie i zapisywanie ustawie\u0144 niestandardowych jest do\u015b\u0107 \u0142atwe. Druga cz\u0119\u015b\u0107 zale\u017cy od tego, co konkretnie chcesz zrobi\u0107 i od tego, kt\u00f3rym wid\u017cetem manipulujesz. W tym po\u015bcie zamie\u015bci\u0142em dwa przyk\u0142ady; pomijanie wid\u017cetu w zale\u017cno\u015bci od ustawienia (w celu dodawania ustawie\u0144 w celu kontrolowania widoczno\u015bci wid\u017cetu w niekt\u00f3rych przypadkach) oraz manipulowanie argumentami menu wid\u017cetu nawigacji WordPress. Przyk\u0142ad podany w drugiej cz\u0119\u015bci powinien da\u0107 ci dobr\u0105 wskaz\u00f3wk\u0119, jak poradzi\u0107 sobie z tym, co chcesz zrobi\u0107.<\/p>\n<h2>Dodawanie niestandardowych ustawie\u0144 do dowolnego wid\u017cetu<\/h2>\n<p>Do dodawania w\u0142asnych ustawie\u0144 do istniej\u0105cych wid\u017cet\u00f3w u\u017cywamy akcji o nazwie <code>[in_widget_form](https:\/\/developer.wordpress.org\/reference\/hooks\/in_widget_form\/)<\/code>. Akcja ta dotyczy wszystkich <code>form()<\/code>funkcji wid\u017cet\u00f3w, czyli funkcji odpowiedzialnej za renderowanie cz\u0119\u015bci administracyjnej wid\u017cetu.<\/p>\n<p>Dzi\u0119ki temu filtrowi otrzymujemy trzy parametry, ale tak naprawd\u0119 interesuje nas tylko pierwszy i trzeci. Pierwsz\u0105 z nich jest instancja widgetu, kt\u00f3rej u\u017cyjemy do pobrania odpowiednich nazw p\u00f3l i identyfikator\u00f3w oraz (opcjonalnie) sprawdzenia, do jakiego rodzaju widgetu jeste\u015bmy podpi\u0119ci. Trzeci parametr to tablica zapisanych ustawie\u0144 wid\u017cetu, kt\u00f3rej musimy u\u017cy\u0107 do sprawdzenia poprzedniego zapisanego stanu naszych ustawie\u0144.<\/p>\n<p>Poni\u017cszy kod doda pole wyboru z nazw\u0105 ustawienia \u201e <code>awp-custom-setting<\/code>&quot;. Dostosuj nazw\u0119 i kod HTML do potrzebnych danych wej\u015bciowych. Wa\u017cne jest, <code>$widget-&gt;get_field_name()<\/code>aby doda\u0107 odpowiednie identyfikatory i <code>name<\/code>atrybuty do wszystkich danych wej\u015bciowych. Warto\u015b\u0107 twoich danych wej\u015bciowych powinna by\u0107 wype\u0142niona tym, co zosta\u0142o zapisane wcze\u015bniej, i to jest co\u015b, co znajdziesz w parametrze <code>$instance<\/code>. W przypadku p\u00f3l wyboru mo\u017cesz u\u017cy\u0107 funkcji WordPressa, <code>[checked](https:\/\/developer.wordpress.org\/reference\/functions\/checked\/)()<\/code>aby wyprowadzi\u0107 zaznaczony atrybut.<\/p>\n<pre><code>add_action('in_widget_form', function($widget, $return, $instance) {\n    ?&gt;\n    &lt;p&gt;\n        &lt;input type=\"checkbox\" class=\"checkbox\" name=\"&lt;?php echo $widget-&gt;get_field_name('awp-custom-setting'); ?&gt;\" id=\"&lt;?php echo $widget-&gt;get_field_name('awp-custom-setting'); ?&gt;\" &lt;?php checked(isset($instance['awp-custom-setting'])? $instance['awp-custom-setting']: 0); ?&gt; \/&gt;\n        &lt;label for=\"&lt;?php echo $widget-&gt;get_field_name('awp-custom-setting'); ?&gt;\"&gt;&lt;?php __('Activate something', 'txtdomain'); ?&gt;&lt;\/label&gt;\n    &lt;\/p&gt;\n    &lt;?php\n}, 10, 3);<\/code><\/pre>\n<p>Po dodaniu tego do kodu motywu <code>functions.php<\/code>lub wtyczki, wszystkie wid\u017cety powinny teraz otrzyma\u0107 pole wyboru na ko\u0144cu ich formularza w admin.<\/p>\n<h3>Celuj w okre\u015blone wid\u017cety<\/h3>\n<p>Je\u015bli chcesz zastosowa\u0107 swoje ustawienia tylko do jednego lub kilku okre\u015blonych wid\u017cet\u00f3w, mo\u017cesz por\u00f3wna\u0107 w\u0142a\u015bciwo\u015b\u0107 <code>id_base<\/code>w <code>$widget<\/code>obiekcie. Musisz wiedzie\u0107, jaki jest podstawowy identyfikator \u2014 je\u015bli nie masz pewno\u015bci, po prostu wykonaj <code>var_dump($widget-&gt;id_base)<\/code>hak, zapisz i sprawd\u017a dane wyj\u015bciowe dla ka\u017cdego wid\u017cetu w admin. Na przyk\u0142ad wid\u017cet Nawigacja ma baz\u0119 ID <code>nav_menu<\/code>, a wid\u017cet Archiwa posiada <code>archives<\/code>.<\/p>\n<p>W poni\u017cszym przyk\u0142adzie sprawdzamy, czy wid\u017cet jest wid\u017cetem nawigacyjnym. Je\u015bli tak nie jest, funkcja jest anulowana za pomoc\u0105 <code>return<\/code>. Tylko wid\u017cety nawigacyjne otrzymaj\u0105 niestandardowe pole wyboru:<\/p>\n<pre><code>add_action('in_widget_form', function($widget, $return, $instance) {\n    if ($widget-&gt;id_base != 'nav_menu') {\n        return;\n    }\n\u00a0\n    ?&gt;\n    &lt;p&gt;\n    ...<\/code><\/pre>\n<p>Powiniene\u015b uzyska\u0107 takie ustawienie w admin:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153158-61e509045fded.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-153158-61e509045fded.png\" alt=\"Jak doda\u0107 niestandardowe ustawienia do istniej\u0105cego wid\u017cetu w WordPress?\" ><\/a><\/p>\n<p>Tak wi\u0119c ustawienie zosta\u0142o dodane, jednak w tej chwili ustawienia nie s\u0105 zapisywane. Naprawmy to.<\/p>\n<h2>Zapisywanie w\u0142asnych ustawie\u0144<\/h2>\n<p>Musimy pod\u0142\u0105czy\u0107 si\u0119 do funkcji wid\u017cetu, <code>update()<\/code>aby zaktualizowa\u0107 nasze niestandardowe ustawienia.<\/p>\n<p>Do tego u\u017cywamy filtra <code>[widget_update_callback](https:\/\/developer.wordpress.org\/reference\/hooks\/widget_update_callback\/)<\/code>. Proces zapisywania naszych ustawie\u0144 przebiega dok\u0142adnie tak, jak podczas pisania klasy wid\u017cetu. Filtr udost\u0119pnia trzy parametry; pierwszy to tablica instancji, kt\u00f3ra zostanie zapisana. Drugi parametr to stan, kt\u00f3ry zosta\u0142 wys\u0142any po zapisaniu wid\u017cetu, a trzeci to stary stan. Musimy upewni\u0107 si\u0119, \u017ce pobieramy nowe warto\u015bci z drugiego parametru i dodajemy je do pierwszego.<\/p>\n<p>W ten spos\u00f3b zaktualizowaliby\u015bmy stan naszego pola wyboru; jak chcemy zapisa\u0107 a <code>true<\/code>lub <code>false<\/code>warto\u015b\u0107:<\/p>\n<pre><code>add_filter('widget_update_callback', function($instance, $new_instance, $old_instance) {\n    $instance['awp-custom-setting'] = isset($new_instance['awp-custom-setting']);\n    return $instance;\n}, 10, 3);<\/code><\/pre>\n<p>Pami\u0119taj, aby dostosowa\u0107 nazwy wej\u015b\u0107 do w\u0142asnych nazw ustawie\u0144. Je\u015bli dodajesz kilka wej\u015b\u0107, musisz powt\u00f3rzy\u0107 to dla ka\u017cdego.<\/p>\n<p>Teraz powiniene\u015b zobaczy\u0107, \u017ce twoje niestandardowe ustawienia s\u0105 zapisywane w admin!<\/p>\n<h2>Korzystanie z zapisanych ustawie\u0144 niestandardowych wid\u017cet\u00f3w<\/h2>\n<p>Jak wspomniano wcze\u015bniej, ta cz\u0119\u015b\u0107 naprawd\u0119 zale\u017cy od tego, co chcesz zrobi\u0107 w swoich ustawieniach. Niestety nie jest to takie proste, poniewa\u017c wi\u0119kszo\u015b\u0107 wid\u017cet\u00f3w nie dodaje filtr\u00f3w ani podpi\u0119\u0107 do swoich danych wyj\u015bciowych. Zacznijmy od czego\u015b prostego; unikaj renderowania wid\u017cetu w zale\u017cno\u015bci od ustawie\u0144.<\/p>\n<h3>Zapobiegaj renderowaniu wid\u017cetu w zale\u017cno\u015bci od ustawie\u0144 niestandardowych<\/h3>\n<p>Za\u0142\u00f3\u017cmy, \u017ce dodajesz ustawienia okre\u015blaj\u0105ce, kiedy wid\u017cet powinien by\u0107 widoczny; na przyk\u0142ad ukrywanie go w niekt\u00f3rych szablonach (ukrywanie w szablonie wynik\u00f3w wyszukiwania, ale wy\u015bwietlanie na stronie g\u0142\u00f3wnej i pojedyncze) lub reagowanie na inne stany WordPressa.<\/p>\n<p>Do tego mo\u017cemy wykorzysta\u0107 filtr <code>[widget_display_callback](https:\/\/developer.wordpress.org\/reference\/hooks\/widget_display_callback\/)<\/code>. Wszystko, co musimy zrobi\u0107, to sprawdzi\u0107 podany parametr instancji dla naszego ustawienia i wr\u00f3ci\u0107 <code>false<\/code>, je\u015bli nie chcemy renderowa\u0107 wid\u017cetu.<\/p>\n<p>Ten prosty kod pozwoli unikn\u0105\u0107 renderowania wid\u017cetu, je\u015bli niestandardowe pole wyboru, kt\u00f3re dodali\u015bmy powy\u017cej, jest zaznaczone:<\/p>\n<pre><code>add_filter('widget_display_callback', function($instance, $widget, $args) {\n    if ($instance['awp-custom-setting']) {\n        return false;\n    }\n    return $instance;\n}, 10, 3);<\/code><\/pre>\n<p>Prawdopodobnie chcesz por\u00f3wna\u0107 inne stany. To prosty przyk\u0142ad, w kt\u00f3rym naszym polem wyboru jest pole wyboru \u201eUkryj w widokach pojedynczych post\u00f3w&#8221;. Po prostu sprawdzamy, czy aktualnie znajdujemy si\u0119 w dowolnym widoku pojedynczego posta, <code>[is_singular](https:\/\/developer.wordpress.org\/reference\/functions\/is_singular\/)()<\/code>a je\u015bli pole jest zaznaczone, wracamy <code>false<\/code>.<\/p>\n<pre><code>add_filter('widget_display_callback', function($instance, $widget, $args) {\n    if (is_singular() &amp;&amp; $instance['awp-custom-setting']) {\n        return false;\n    }\n    return $instance;\n}, 10, 3);<\/code><\/pre>\n<h3>Modyfikowanie ustawie\u0144 lub danych wyj\u015bciowych istniej\u0105cego wid\u017cetu<\/h3>\n<p>Pot\u0119\u017cnym filtrem, kt\u00f3ry mo\u017cna wykorzysta\u0107 do zabawy z istniej\u0105cymi wid\u017cetami, jest <code>[dynamic_sidebar_params](https:\/\/developer.wordpress.org\/reference\/hooks\/dynamic_sidebar_params\/)<\/code>. Zajrzyj na stron\u0119 dokumentacji, aby zobaczy\u0107, jakie parametry mo\u017cesz modyfikowa\u0107. Na przyk\u0142ad mo\u017cna doda\u0107 niestandardowe klasy, zmodyfikowa\u0107 ci\u0105gi znak\u00f3w <code>before_widget<\/code>, <code>after_widget<\/code>lub <code>before_title<\/code>i <code>after_title<\/code>HTML. Dotyczy to jednak wszystkich wid\u017cet\u00f3w, tak\u017ce admina i frontendu. A z tym filtrem nie masz dost\u0119pu do instancji wid\u017cetu (zapisane ustawienia) ani do ustawie\u0144 wid\u017cetu (np. typ wid\u017cetu).<\/p>\n<p>Oczywi\u015bcie musimy przynajmniej sprawdzi\u0107 nasze niestandardowe ustawienia. Wi\u0119c musimy zrobi\u0107 ca\u0142kiem sporo kodu, aby pobra\u0107 potrzebne nam warto\u015bci.<\/p>\n<p>Pierwsz\u0105 rzecz\u0105, jak\u0105 mo\u017cemy zrobi\u0107, jest dost\u0119p do zmiennej globalnej <code>$wp_registered_widgets<\/code>. Jest to tablica, kt\u00f3ra zawiera wszystkie zarejestrowane, dost\u0119pne wid\u017cety. Korzystaj\u0105c z tego rejestru, mo\u017cemy u\u017cy\u0107 parametru filtra, aby znale\u017a\u0107 konkretny wid\u017cet, w kt\u00f3rym aktualnie si\u0119 znajdujemy. Po znalezieniu bie\u017c\u0105cego wid\u017cetu mamy dost\u0119p do parametr\u00f3w wid\u017cetu, takich jak <code>id_base<\/code>\u2013 co, jak widzieli\u015bmy wcze\u015bniej, m\u00f3wi nam o typie wid\u017cetu.<\/p>\n<pre><code>add_filter('dynamic_sidebar_params', function($params) {\n    global $wp_registered_widgets;\n\u00a0\n    $this_widget_id = $params[0]['widget_id'];  \/\/ Current widget ID\n    $this_widget = $wp_registered_widgets[$this_widget_id];\n    $widget_object = $this_widget['callback'][0];  \/\/ Current widget object\n\u00a0\n    \/\/ With $widget_object we have access to e.g. id_base for checking type of widget\n    if ($widget_object-&gt;id_base != 'nav_menu') {\n        return $params;\n    }\n\u00a0\n    return $params;\n});<\/code><\/pre>\n<p>Jak wida\u0107 w kolejce <code>#9<\/code>, mo\u017cemy wreszcie sprawdzi\u0107, na jakim typie wid\u017cetu aktualnie si\u0119 znajdujemy. W powy\u017cszym kodzie zwracam uwag\u0119, je\u015bli typ wid\u017cetu nie jest wid\u017cetem nawigacyjnym, poniewa\u017c nasze niestandardowe ustawienie zosta\u0142o dodane tylko dla tych wid\u017cet\u00f3w.<\/p>\n<h3>Pobieranie zapisanych ustawie\u0144 wid\u017cetu<\/h3>\n<p>Ale musimy r\u00f3wnie\u017c pobra\u0107 zapisane ustawienia dla wid\u017cetu (w tym nasze niestandardowe ustawienie). Wszystkie zapisane ustawienia wid\u017cet\u00f3w s\u0105 przechowywane w bazie danych opcji pogrupowanych wed\u0142ug typu wid\u017cetu. Korzystaj\u0105c z w\u0142a\u015bciwo\u015bci w rejestrze wid\u017cet\u00f3w, mo\u017cemy u\u017cy\u0107 <code>[get_option](https:\/\/developer.wordpress.org\/reference\/functions\/get_option\/)()<\/code>do pobrania zapisanych ustawie\u0144 dla bie\u017c\u0105cego typu wid\u017cetu. Zwr\u00f3cony b\u0119dzie tablica indeksowana, w kt\u00f3rej musimy u\u017cy\u0107 jeszcze innego obwodu z filtra, aby znale\u017a\u0107 bie\u017c\u0105cy indeks (poniewa\u017c mo\u017cesz doda\u0107 wiele tego samego typu wid\u017cetu na tych samych lub r\u00f3\u017cnych paskach bocznych). \u0141atwiej jest pokaza\u0107 kodem ni\u017c wyja\u015bnia\u0107:<\/p>\n<pre><code>    ...\n    if ($widget_object-&gt;id_base != 'nav_menu') {\n        return $params;\n    }\n\u00a0\n    $all_settings = get_option($widget_object-&gt;option_name);\n    $saved_settings = $all_settings[$params[1]['number']];\n    if ($saved_settings['my-custom-thing']) {\n        \/\/ Do your thing\n    }\n\u00a0\n    return $params;\n});<\/code><\/pre>\n<p>Wreszcie mamy zapisane ustawienia wid\u017cetu! W powy\u017cszym przyk\u0142adowym kodzie, w linii <code>#9<\/code>, sprawdzamy, czy nasze niestandardowe pole wyboru jest zaznaczone.<\/p>\n<h3>Przyk\u0142ady<\/h3>\n<p>W tym momencie to od Ciebie zale\u017cy, co chcesz zrobi\u0107. Mo\u017cesz na przyk\u0142ad wyrenderowa\u0107 wynik po tytule wid\u017cetu, ale przed tre\u015bci\u0105 wid\u017cetu:<\/p>\n<pre><code>    ...\n    if ($saved_settings['my-custom-thing']) {\n        $params[0]['after_title'] .= '&lt;div&gt;This appears before widget content&lt;\/div&gt;';\n    }\n    ...<\/code><\/pre>\n<p>W przypadku bardziej rzeczywistych przypadk\u00f3w u\u017cycia zwykle rozwi\u0105za\u0142by\u015b wi\u0119kszo\u015b\u0107, dodaj\u0105c okre\u015blone filtry w tym momencie, wywo\u0142uj\u0105c <code>add_filter()<\/code>w tym momencie.<\/p>\n<p>Poni\u017cej znajduje si\u0119 przyk\u0142ad modyfikacji argument\u00f3w menu nawigacyjnego poprzez dodanie filtra, je\u015bli nasze ustawienie zosta\u0142o zaznaczone. Je\u015bli nie by\u0142o zaznaczone, upewniamy si\u0119, \u017ce filtr zosta\u0142 usuni\u0119ty. Filtr s\u0142u\u017c\u0105cy do modyfikowania argument\u00f3w renderowania menu nawigacyjnego to <code>widget_nav_menu_args<\/code>. W poni\u017cszym kodzie zdefiniowa\u0142em funkcj\u0119 do zastosowania do tego filtra, kt\u00f3ra dodaje nowy argument do argument\u00f3w menu; chodzik:<\/p>\n<pre><code>    ...\n    if ($saved_settings['my-custom-thing']) {\n        add_filter('widget_nav_menu_args', 'awp_add_menu_walker', 10, 3);\n    } else {\n        remove_filter('widget_nav_menu_args', 'awp_add_menu_walker', 10);\n    }\n    return $params;\n});\nfunction awp_add_menu_walker($nav_menu_args, $nav_menu, $args) {\n    $nav_menu_args['walker'] = new AWP_Custom_Walker();\n    return $nav_menu_args;\n}<\/code><\/pre>\n<p>Powy\u017cszy kod jest przyk\u0142adem przypadku u\u017cycia, w kt\u00f3rym niestandardowe pole wyboru kontroluje, czy zastosowa\u0107 do menu walker menu. \u015awietnie, je\u015bli chcesz, aby wszystkie menu by\u0142y renderowane normalnie, ale chcesz, aby opcja dla okre\u015blonych wid\u017cet\u00f3w menu by\u0142a renderowana inaczej. To, co walker zrobi z wyj\u015bciem menu, zale\u017cy od Ciebie.<\/p>\n<p>Poni\u017cej znajdziesz pe\u0142ny kod dodawania ustawie\u0144 niestandardowych do wszystkich menu nawigacyjnych, aktualizowania ich i stosowania menu walker.<\/p>\n<p>Mam nadziej\u0119, \u017ce to wystarczy, aby dowiedzie\u0107 si\u0119, jak zakodowa\u0107 to, co chcesz zrobi\u0107. To naprawd\u0119 zale\u017cy od tego, co chcesz zrobi\u0107 i z jakim typem wid\u017cetu pracujesz. Jak wspomniano powy\u017cej, zwykle wi\u0119kszo\u015b\u0107 modyfikacji mo\u017cna rozwi\u0105za\u0107, dodaj\u0105c filtry, aby wykona\u0107 swoje zadanie w programie <code>dynamic_sidebar_params<\/code>.<\/p>\n<h2>Pe\u0142ny przyk\u0142ad: Niestandardowe ustawienie pola wyboru w wid\u017cetach nawigacyjnych do stosowania menu walkera<\/h2>\n<p>Oto pe\u0142ny kod dodawania niestandardowego pola wyboru do wszystkich wid\u017cet\u00f3w menu nawigacyjnego WordPress w celu korzystania z zarejestrowanego chodzika po menu. (Kod chodzika nie jest wliczony w cen\u0119)<\/p>\n<pre><code>\/\/ Add custom setting to menu widgets\nadd_action('in_widget_form', function($widget, $return, $instance) {\n    \/\/ Add setting only to menu widgets\n    if ($widget-&gt;id_base != 'nav_menu') {\n        return;\n    }\n\u00a0\n    ?&gt;\n    &lt;p&gt;\n        &lt;input type=\"checkbox\" class=\"checkbox\" name=\"&lt;?php echo $widget-&gt;get_field_name('activate-walker'); ?&gt;\" id=\"&lt;?php echo $widget-&gt;get_field_name('activate-walker'); ?&gt;\" &lt;?php checked(isset($instance['activate-walker'])? $instance['activate-walker']: 0); ?&gt; \/&gt;\n        &lt;label for=\"&lt;?php echo $widget-&gt;get_field_name('activate-walker'); ?&gt;\"&gt;&lt;?php __('Activate walker', 'txtdomain'); ?&gt;&lt;\/label&gt;\n    &lt;\/p&gt;\n    &lt;?php\n}, 10, 3);\n\u00a0\n\u00a0\n\/\/ Update custom setting\nadd_filter('widget_update_callback', function($instance, $new_instance, $old_instance) {\n    $instance['activate-walker'] = isset($new_instance['activate-walker']);\n    return $instance;\n}, 10, 3);\n\u00a0\n\u00a0\n\/\/ Filter sidebar params to add filter if custom setting was activated\nadd_filter('dynamic_sidebar_params', function($params) {\n    global $wp_registered_widgets;\n\u00a0\n    $this_widget_id = $params[0]['widget_id'];\n    $this_widget = $wp_registered_widgets[$this_widget_id];\n    $widget_object = $this_widget['callback'][0];\n\u00a0\n    \/\/ Bail if not a menu widget\n    if ($widget_object-&gt;id_base != 'nav_menu') {\n        return $params;\n    }\n\u00a0\n    $all_settings = get_option($widget_object-&gt;option_name);\n    $saved_settings = $all_settings[$params[1]['number']];\n\u00a0\n    if ($saved_settings['activate-walker']) {\n        add_filter('widget_nav_menu_args', 'awp_add_menu_walker', 10, 3);\n    } else {\n        remove_filter('widget_nav_menu_args', 'awp_add_menu_walker', 10);\n    }\n\u00a0\n    return $params;\n});\n\u00a0\n\u00a0\n\/\/ Filter nav menu arguments to add walker\nfunction awp_add_menu_walker($nav_menu_args, $nav_menu, $args) {\n    $nav_menu_args['walker'] = new AWP_Custom_Walker();\n    return $nav_menu_args;\n}<\/code><\/pre>\n<h2>Wniosek<\/h2>\n<p>Mam nadziej\u0119, \u017ce ten post by\u0142 pomocny w rozwi\u0105zywaniu twoich potrzeb lub dawa\u0142 ci wskaz\u00f3wki, jak mo\u017cesz zrobi\u0107 to, co musisz zrobi\u0107!<\/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 niestandardowe ustawienia do dowolnego ze standardowych wid\u017cet\u00f3w WordPressa. Dzi\u0119ki tym ustawieniom dowiemy si\u0119, jak odpowiednio manipulowa\u0107 zachowaniem wid\u017cet\u00f3w.<\/p>\n","protected":false},"author":1,"featured_media":223663,"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,845,866,866],"tags":[1169],"class_list":{"0":"post-233487","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","17":"category-tematy","20":"category-wordpress-7","22":"tag-affiai-pl"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/233487","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=233487"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/233487\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/223663"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=233487"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=233487"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=233487"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}