{"id":233848,"date":"2023-02-23T17:26:00","date_gmt":"2023-02-23T14:26:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233848"},"modified":"2022-11-11T12:47:24","modified_gmt":"2022-11-11T09:47:24","slug":"kompletna-instrukcja-dodawania-grup-i-pol-zaawansowanych-niestandardowych-pol-wedlug-kodu","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/kompletna-instrukcja-dodawania-grup-i-pol-zaawansowanych-niestandardowych-pol-wedlug-kodu\/","title":{"rendered":"Kompletna instrukcja dodawania grup i p\u00f3l zaawansowanych niestandardowych p\u00f3l wed\u0142ug kodu"},"content":{"rendered":"\n<p>Wtyczka <a href=\"https:\/\/www.advancedcustomfields.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Advanced Custom Fields<\/a> (ACF) obs\u0142uguje w pe\u0142ni konfigurowanie p\u00f3l i grup wed\u0142ug kodu PHP w motywie lub wtyczce. Zalet\u0105 tego jest to, \u017ce wszystkie pola b\u0119d\u0105 dost\u0119pne niezale\u017cnie od instancji WordPressa, nad kt\u00f3r\u0105 pracujesz (na przyk\u0142ad, je\u015bli musisz prze\u0142\u0105czy\u0107 si\u0119 mi\u0119dzy serwerem lokalnym, testowym i serwerem na \u017cywo). Mo\u017cesz ustawi\u0107 wszystkie pola w panelu administracyjnym ACF i u\u017cy\u0107 narz\u0119dzia eksportu, aby wyeksportowa\u0107 je do PHP.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151957-61e4d1b8bd642.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-151957-61e4d1b8bd642.png\" alt=\"Kompletna instrukcja dodawania grup i p\u00f3l zaawansowanych niestandardowych p\u00f3l wed\u0142ug kodu\" ><\/a><\/p>\n<p>Jednak\u017ce, je\u015bli robisz to cz\u0119sto, mo\u017cesz zauwa\u017cy\u0107, \u017ce eksport PHP z ACF zawiera du\u017co kodu, przez co twoje pliki PHP s\u0105 niepotrzebnie d\u0142ugie. W niekt\u00f3rych przypadkach lepiej jest napisa\u0107 kod samodzielnie, z niezb\u0119dnym minimum, aby uzyska\u0107 czystszy kod w motywie lub wtyczce. Ten przewodnik ma na celu dostarczenie kompletnych informacji o tym, jak r\u0119cznie napisa\u0107 dodawanie p\u00f3l i grup ACF w PHP. Pami\u0119taj, \u017ce nie b\u0119dzie on szczeg\u00f3\u0142owo omawia\u0142 ka\u017cdego typu pola, poniewa\u017c zak\u0142ada, \u017ce \u200b\u200bznasz ju\u017c r\u00f3\u017cne pola dost\u0119pne w ACF.<\/p>\n<h2>Ale najpierw; pewne \u015brodki ostro\u017cno\u015bci<\/h2>\n<p>Aby zachowa\u0107 dobre standardy kodu i zapewni\u0107, \u017ce Twoja witryna WordPress nie ulegnie awarii, zawsze powiniene\u015b sprawdza\u0107, czy funkcje lub klasy, kt\u00f3rych u\u017cywa Tw\u00f3j kod, rzeczywi\u015bcie istniej\u0105. Zw\u0142aszcza je\u015bli chodzi o wtyczki, kt\u00f3re mo\u017cna \u0142atwo dezaktywowa\u0107 lub nawet nie instalowa\u0107 na stronie, zawsze powiniene\u015b owin\u0105\u0107 kod specyficzny dla wtyczki w te\u015bcie if, kt\u00f3ry sprawdza, czy funkcje, z kt\u00f3rych korzystasz, istniej\u0105, zanim ich u\u017cyjesz.<\/p>\n<p>Je\u015bli chodzi o ACF, mo\u017cesz to zrobi\u0107 sprawdzaj\u0105c, czy klasa <code>'acf'<\/code>istnieje lub czy istnieje funkcja dodawania p\u00f3l i grup, <code>'acf_add_local_field_group'<\/code>. Owi\u0144 jeden z nich wok\u00f3\u0142 poni\u017cszego kodu.<\/p>\n<pre><code>if (function_exists('acf_add_local_field_group')) {\n    \/\/ Your ACF specific code here\n}\n\/\/ OR:\nif (class_exists('acf')) {\n    \/\/ Your ACF specific code here\n}<\/code><\/pre>\n<h2>Kod szkieletu<\/h2>\n<p>Do dodawania meta p\u00f3l (grup) i p\u00f3l u\u017cywamy haczyka o nazwie <code>acf\/init<\/code>. Wewn\u0105trz funkcji wywo\u0142ujemy funkcj\u0119 <code>acf_add_local_field_group()<\/code>z tablic\u0105 jako parametrem. Wewn\u0105trz tej tablicy znajduje si\u0119 kompletna konfiguracja grupy i wszystkich jej p\u00f3l. Najwa\u017cniejsze z nich to klucze tablicy <code>'fields'<\/code>i <code>'location'<\/code>. Dla klucza tablicy <code>'fields'<\/code>podajesz tablic\u0119 dla wszystkich p\u00f3l, a dla klucza <code>'location'<\/code>podajesz ustawienia miejsca, w kt\u00f3rym powinien pojawi\u0107 si\u0119 metabox. W tym po\u015bcie szczeg\u00f3\u0142owo om\u00f3wimy mo\u017cliwe opcje dla ka\u017cdego z poni\u017cszych.<\/p>\n<p>To jest absolutne minimum dodawania grupy, opr\u00f3cz p\u00f3l i lokalizacji:<\/p>\n<pre><code>add_action('acf\/init', function() {\n    acf_add_local_field_group([\n        'key' =&gt; 'group_my_fields',\n        'title' =&gt; __('My fields', 'txtdomain'),\n        'label_placement' =&gt; 'top',\n        'menu_order' =&gt; 0,\n        'style' =&gt; 'default',\n        'position' =&gt; 'normal',\n        'fields' =&gt; [],\n        'location' =&gt; [],\n    ]);\n});<\/code><\/pre>\n<p>Ka\u017cda grupa potrzebuje unikalnego klucza, ale sama nazwa nie ma wi\u0119kszego znaczenia (dla nas). Je\u015bli dodajesz wi\u0119cej grup, nie zapomnij zmieni\u0107 <code>'key'<\/code>pola. Tytu\u0142 metaboksu mo\u017cna ustawi\u0107 w elemencie klucza tablicy, zgad\u0142e\u015b, <code>'title'<\/code>. Je\u015bli dodajesz wiele metaboks\u00f3w w tej samej lokalizacji (np. podczas edycji postu), mo\u017cesz kontrolowa\u0107, kt\u00f3ra pozycja jest pierwsza, podaj\u0105c r\u00f3\u017cne liczby w <code>'menu_order'<\/code>.<\/p>\n<p>Mo\u017cesz kontrolowa\u0107 projekt metaboksu, podaj\u0105c albo <code>default<\/code>eller <code>seamless<\/code>w <code>'style'<\/code>. Jednak w przypadku nowego redaktora Gutenberga ma to znacznie mniejsze znaczenie. To samo dotyczy klucza <code>'position'<\/code>, w kt\u00f3rym w dawnych czasach mo\u017cna by\u0142o umie\u015bci\u0107 metabox pod tre\u015bci\u0105 posta (<code>'normal'<\/code>), z boku (<code>'side'<\/code>) lub tu\u017c za tytu\u0142em posta (<code>'acf_after_title'<\/code>).<\/p>\n<p>W porz\u0105dku! Zanurzmy si\u0119 w dw\u00f3ch bardziej interesuj\u0105cych elementach tablicy; zaczynaj\u0105c od lokalizacji \u2013 kt\u00f3ra okre\u015bla, gdzie pojawia si\u0119 metabox.<\/p>\n<h2>Lokalizacja<\/h2>\n<p>Chodzi o to, co wk\u0142adasz do klucza <code>'location'<\/code>. Ale zanim przyjrzymy si\u0119 mo\u017cliwym opcjom, musimy zrozumie\u0107 struktur\u0119 jego tablicy.<\/p>\n<p><code>'location'<\/code>akceptuje tablic\u0119 z tablic\u0105 element\u00f3w w tablicy! Wstrzyma\u0107. Tak, poniewa\u017c mo\u017cliwe jest podanie i po\u0142\u0105czenie logiki AND i OR w lokalizacji (np. \u201epoka\u017c w edycji posta, ale nie, je\u015bli typ posta to \u201eksi\u0105\u017cka&quot;&#8221; lub \u201epoka\u017c na ekranie edycji u\u017cytkownika, a tak\u017ce utw\u00f3rz nowy ekran u\u017cytkownika, ale w obu przypadkach nie, je\u015bli aktualna rola to autor).<\/p>\n<p>W ten spos\u00f3b \u0142\u0105czysz dwa elementy lokalizacji za pomoc\u0105 logiki AND (obie musz\u0105 by\u0107 prawdziwe):<\/p>\n<pre><code>'location' =&gt; [\n    [\n        [\n            \/\/ location 1\n        ],\n        [\n            \/\/ location 2\n        ]\n    ]\n]<\/code><\/pre>\n<p>A to jest do \u0142\u0105czenia lokalizacji z logik\u0105 OR (tylko jedna musi by\u0107 prawdziwa):<\/p>\n<pre><code>'location' =&gt; [\n    [\n        [\n            \/\/ location 1\n        ]\n    ],\n    [\n        [\n            \/\/ location 2\n        ]\n    ]\n]<\/code><\/pre>\n<p>Zobacz r\u00f3\u017cnic\u0119?<\/p>\n<p>OK, przejd\u017amy dalej. Ka\u017cda opcja lokalizacji sk\u0142ada si\u0119 z tablicy trzech element\u00f3w; <code>'param'<\/code>gdzie dodajemy r\u00f3\u017cne lokalizacje <code>'operator'<\/code>, i <code>'value'<\/code>. Operator to spos\u00f3b por\u00f3wnywania warto\u015bci i mo\u017ce by\u0107 <code>'=='<\/code>r\u00f3wny lub <code>'!='<\/code>nier\u00f3wny.<\/p>\n<p>Przyjrzyjmy si\u0119 kolejno mo\u017cliwym opcjom.<\/p>\n<h3>Lokalizacja wed\u0142ug typu postu<\/h3>\n<pre><code>[\n    'param' =&gt; 'post_type',\n    'operator' =&gt; '==',\n    'value' =&gt; 'post'\n]<\/code><\/pre>\n<p>Ustaw \u017c\u0105dany typ posta w <code>'value'<\/code>. Pami\u0119taj, \u017ce nie mo\u017cesz poda\u0107 tablicy wielu typ\u00f3w post\u00f3w, musisz po\u0142\u0105czy\u0107 wiele z tych tablic w konfiguracji AND.<\/p>\n<h3>Lokalizacja wed\u0142ug statusu poczty<\/h3>\n<pre><code>[\n    'param' =&gt; 'post_status',\n    'operator' =&gt; '==',\n    'value' =&gt; 'publish'\n]<\/code><\/pre>\n<p>Ustaw \u017c\u0105dany status posta jako <code>'value'<\/code>. Ponownie, pami\u0119taj, \u017ce nie mo\u017cesz poda\u0107 tablicy wielu status\u00f3w postu, musisz poda\u0107 ka\u017cd\u0105 \u017c\u0105dan\u0105 warto\u015b\u0107 w konfiguracji AND lub OR.<\/p>\n<h3>Lokalizacja wed\u0142ug szablonu strony<\/h3>\n<pre><code>[\n    'param' =&gt; 'page_template',\n    'operator' =&gt; '==',\n    'value' =&gt; 'template-name.php'\n]<\/code><\/pre>\n<p>Jest to widoczne tylko wtedy, gdy wybrana strona (lub niestandardowy typ postu z obs\u0142ug\u0105 szablon\u00f3w strony) wybra\u0142a podan\u0105 nazw\u0119 szablonu strony.<\/p>\n<h3>Lokalizacja wed\u0142ug przypisanego terminu taksonomii<\/h3>\n<pre><code>\/\/ Post category only\n[\n    'param' =&gt; 'post_category',\n    'operator' =&gt; '==',\n    'value' =&gt; 'category:some-category-slug'\n]\n\/\/ Any taxonomy\n[\n    'param' =&gt; 'post_taxonomy',\n    'operator' =&gt; '==',\n    'value' =&gt; 'my_custom_taxonomy:some-category-slug'  \/\/ &lt;taxonomy name&gt;:&lt;term slug&gt;\n]<\/code><\/pre>\n<p>Ta lokalizacja jest przeznaczona, gdy post ma przypisany okre\u015blony termin. Jako warto\u015b\u0107 musisz poda\u0107 nazw\u0119 taksonomii, dwukropek i fragment terminu.<\/p>\n<h3>Lokalizacja wed\u0142ug typu strony<\/h3>\n<p>ACF grupuje specjalne w\u0142a\u015bciwo\u015bci stron jako \u201etyp strony&#8221;. Dotyczy to g\u0142\u00f3wnie tego, czy bie\u017c\u0105ca strona jest stron\u0105 nadrz\u0119dn\u0105 lub podrz\u0119dn\u0105, ale tak\u017ce w przypadku stron docelowych ustawionych jako strona g\u0142\u00f3wna WordPress lub strona bloga.<\/p>\n<pre><code>\/\/ Front page\n[\n    'param' =&gt; 'page_type',\n    'operator' =&gt; '==',\n    'value' =&gt; 'front_page'\n]\n\/\/ Posts page\n[\n    'param' =&gt; 'page_type',\n    'operator' =&gt; '==',\n    'value' =&gt; 'posts_page'\n]\n\/\/ Top level page only\n[\n    'param' =&gt; 'page_type',\n    'operator' =&gt; '==',\n    'value' =&gt; 'top_level'\n]\n\/\/ Top level page that has children\n[\n    'param' =&gt; 'page_type',\n    'operator' =&gt; '==',\n    'value' =&gt; 'parent'\n]\n\/\/ Children level pages\n[\n    'param' =&gt; 'page_type',\n    'operator' =&gt; '==',\n    'value' =&gt; 'children'\n]<\/code><\/pre>\n<h3>Lokalizacja: taksonomia<\/h3>\n<p>Miejsce do edycji lub dodawania terminu w taksonomii.<\/p>\n<pre><code>[\n    'param' =&gt; 'taxonomy',\n    'operator' =&gt; '==',\n    'value' =&gt; 'category'  \/\/ Or 'all' for all taxonomies\n]<\/code><\/pre>\n<p>Podaj nazw\u0119 taksonomii jako <code>'value'<\/code>. Pami\u0119taj, \u017ce nie mo\u017cesz poda\u0107 tablicy wielu taksonomii, ale mo\u017cesz poda\u0107 <code>'all'<\/code>wszystkie taksonomie.<\/p>\n<h3>Lokalizacja: u\u017cytkownik<\/h3>\n<p>Ta lokalizacja s\u0142u\u017cy do dodawania lub edytowania profilu u\u017cytkownika.<\/p>\n<pre><code>[\n    'param' =&gt; 'user_form',\n    'operator' =&gt; '==',\n    'value' =&gt; 'all'  \/\/ 'edit' || 'register'\n]<\/code><\/pre>\n<p>Podaj <code>'edit<\/code>&#8217;, aby kierowa\u0107 tylko ekran edycji istniej\u0105cych u\u017cytkownik\u00f3w, <code>'register'<\/code>aby kierowa\u0107 tylko formularz podczas rejestrowania nowego u\u017cytkownika, lub &#8217; <code>all'<\/code>dla obu powy\u017cszych.<\/p>\n<h3>Lokalizacja: pozycja menu<\/h3>\n<p>Od wersji ACF 5.6 mo\u017cna r\u00f3wnie\u017c dodawa\u0107 grupy p\u00f3l do element\u00f3w menu.<\/p>\n<pre><code>[\n    'param' =&gt; 'nav_menu_item',\n    'operator' =&gt; '==',\n    'value' =&gt; 'all'\n]<\/code><\/pre>\n<p>Mo\u017cesz ustawi\u0107 <code>value<\/code>na, <code>all<\/code>aby zastosowa\u0107 grup\u0119 do wszystkich element\u00f3w menu, lub mo\u017cesz okre\u015bli\u0107 menu wed\u0142ug lokalizacji (zarejestrowane lokalizacje w motywie) lub wed\u0142ug identyfikatora menu. Do u\u017cytku w lokalizacji <code>'location\/&lt;name&gt;'<\/code>\u2014 wi\u0119c dla lokalizacji o nazwie \u201e <code>primary<\/code>&#8221; mo\u017cna ustawi\u0107 warto\u015b\u0107 na, <code>'location\/primary'<\/code>aby zastosowa\u0107 grup\u0119 do menu przypisanego tylko do tej lokalizacji. Je\u015bli chcesz kierowa\u0107 reklamy na okre\u015blony identyfikator menu, ustaw warto\u015b\u0107 na ci\u0105g o tym identyfikatorze.<\/p>\n<h3>Lokalizacja: wid\u017cet<\/h3>\n<p>ACF zapewnia nawet lokalizacj\u0119 w ustawieniach wid\u017cetu bez modyfikowania podstawowego kodu wid\u017cetu.<\/p>\n<pre><code>[\n    'param' =&gt; 'widget',\n    'operator' =&gt; '==',\n    'value' =&gt; 'tag_cloud'  \/\/ or 'all' for all widgets\n]<\/code><\/pre>\n<p>Mo\u017cesz kierowa\u0107 reklamy na wszystkie wid\u017cety <code>'all'<\/code>jako <code>'value'<\/code>lub kierowa\u0107 na okre\u015blony wid\u017cet. Musisz zna\u0107 \u201ewewn\u0119trzny identyfikator&#8221; wid\u017cetu, z kt\u00f3rym s\u0105 zarejestrowane.<\/p>\n<h3>Lokalizacja: strona opcji ACF (tylko Pro)<\/h3>\n<p>Dzi\u0119ki ACF Pro mo\u017cesz u\u017cy\u0107 ACF do skonfigurowania niestandardowych stron administracyjnych.<\/p>\n<pre><code>[\n    'param' =&gt; 'options_page',\n    'operator' =&gt; '==',\n    'value' =&gt; 'acf-options-myoptionspage'\n]<\/code><\/pre>\n<p><code>acf_add_options_page<\/code>Podaj nazw\u0119, kt\u00f3r\u0105 ustawi\u0142e\u015b <code>menu_slug<\/code>jako <code>'value'<\/code>.<\/p>\n<h3>Lokalizacja: blok (tylko Pro 5.8+)<\/h3>\n<p>ACF Pro (5.8+) posiada funkcj\u0119 dodawania blok\u00f3w Gutenberga z polami z ACF i kontrolowania jego wyj\u015bcia za pomoc\u0105 PHP. Ca\u0142kiem fajnie dla tych, kt\u00f3rzy jeszcze nie zag\u0142\u0119bili si\u0119 w dodawanie niestandardowych blok\u00f3w Gutenberga i wymaganego JavaScript.<\/p>\n<pre><code>[\n    'param' =&gt; 'block',\n    'operator' =&gt; '==',\n    'value' =&gt; 'acf\/cta'  \/\/ or 'all' for all ACF blocks\n]<\/code><\/pre>\n<hr \/>\n<h2>Pola<\/h2>\n<p>Teraz przechodzimy do bardziej interesuj\u0105cej cz\u0119\u015bci; same pola. ACF oferuje (naprawd\u0119) szeroki zakres typ\u00f3w p\u00f3l i powt\u00f3rz\u0119; ten przewodnik nie pokazuje, czym s\u0105 poszczeg\u00f3lne pola i jak one dzia\u0142aj\u0105 lub wygl\u0105daj\u0105.<\/p>\n<p>W tablicy podstawowej, kt\u00f3r\u0105 udost\u0119pniasz <code>'fields'<\/code>, <code>acf_add_local_field_group()<\/code>podajesz tablic\u0119, w kt\u00f3rej ka\u017cde pole jest w\u0142asn\u0105 tablic\u0105.<\/p>\n<p>Absolutne minimum wymagane dla ka\u017cdego pola jest nast\u0119puj\u0105ce: unikat <code>'key'<\/code>, kt\u00f3ry mo\u017ce by\u0107 czymkolwiek zechcesz i prawdopodobnie nigdy nie b\u0119dziesz musia\u0142 si\u0119 do niego odwo\u0142ywa\u0107. Potrzebny <code>'name'<\/code>jest r\u00f3wnie\u017c klucz meta (post, u\u017cytkownik, termin), w kt\u00f3rym warto\u015b\u0107 pola jest zapisana jako \u2013 i to jest ten, do kt\u00f3rego b\u0119dziesz si\u0119 odwo\u0142ywa\u0107 podczas pobierania warto\u015bci p\u00f3l. Powiniene\u015b poda\u0107 <code>'label'<\/code>i wreszcie klucz <code>'type'<\/code>, kt\u00f3ry okre\u015bla, z jakim typem pola mamy do czynienia. Reszta p\u00f3l zale\u017cy od <code>'type'<\/code>tego, co zobaczymy, gdy przejdziemy przez ka\u017cdy typ pola poni\u017cej.<\/p>\n<p>To jest szkielet kodu do dodawania pola.<\/p>\n<pre><code>'fields' = [\n    [\n        'key' =&gt; 'field_my_field',\n        'label' =&gt; __('My field', 'txtdomain'),\n        'name' =&gt; 'my_field',\n        'type' =&gt; 'text',\n    ]\n]<\/code><\/pre>\n<p>Pami\u0119taj, \u017ce b\u0119dziesz potrzebowa\u0107 powy\u017cszego dla ka\u017cdego pola, ale aby nie powtarza\u0107 tego samego kodu, ka\u017cdy typ pola poni\u017cej b\u0119dzie zawiera\u0142 tylko <code>'type'<\/code>i wszelkie inne elementy potrzebne dla tego typu pola.<\/p>\n<h3>Pole: Wprowadzanie tekstu<\/h3>\n<p>Najprostsze pole ze wszystkich. Wszystko, czego naprawd\u0119 potrzebujemy, to:<\/p>\n<pre><code>[\n    'type' =&gt; 'text',\n]<\/code><\/pre>\n<p>Ale aby jeszcze bardziej dostosowa\u0107 wprowadzanie tekstu, mo\u017cesz r\u00f3wnie\u017c poda\u0107 dowolne z poni\u017cszych:<\/p>\n<pre><code>[\n    'default_value' =&gt; 'Default value',\n    'prepend' =&gt; 'Prepend text',\n    'append' =&gt; 'Appended text',\n]<\/code><\/pre>\n<h3>Pole: Wprowad\u017a numer<\/h3>\n<pre><code>[\n    'type' =&gt; 'number',\n    'min' =&gt; 0,\n    'max' =&gt; 100,\n    'step' =&gt; 1,\n    'default_value' =&gt; 'Default value',\n    'prepend' =&gt; 'Prepend text',\n    'append' =&gt; 'Appended text',\n]<\/code><\/pre>\n<h3>Pole: Obszar tekstowy<\/h3>\n<pre><code>[\n    'type' =&gt; 'textarea',\n    'rows' =&gt; 5,\n    'new_lines' =&gt; 'wpautop',  \/\/ 'br' || ''\n    'default_value' =&gt; 'Default value',\n]<\/code><\/pre>\n<h3>Pole: suwak zakresu<\/h3>\n<pre><code>[\n    'type' =&gt; 'range',\n    'min' =&gt; 0,\n    'max' =&gt; 100,\n    'step' =&gt; 1,\n    'default_value' =&gt; 50,\n    'prepend' =&gt; 'Prepend text',\n    'append' =&gt; 'Appended text',\n]<\/code><\/pre>\n<h3>Pole: Has\u0142o<\/h3>\n<p>To samo, co wprowadzanie tekstu, z t\u0105 r\u00f3\u017cnic\u0105, \u017ce wszystko, co w nim wpiszesz, b\u0119dzie oznaczone *, jak mo\u017cna si\u0119 spodziewa\u0107 w polu has\u0142a.<\/p>\n<pre><code>[\n    'type' =&gt; 'password',\n    'prepend' =&gt; 'Prepend text',\n    'append' =&gt; 'Appended text',\n]<\/code><\/pre>\n<h3>Pole: Obraz<\/h3>\n<p>Wybierz jeden obraz.<\/p>\n<pre><code>[\n    'type' =&gt; 'image',\n    'return_format' =&gt; 'array',  \/\/ 'id' || 'url'\n    'preview_size' =&gt; 'thumbnail',\n]<\/code><\/pre>\n<h3>Pole: Plik<\/h3>\n<p>Podobny do powy\u017cszego obrazu, z t\u0105 r\u00f3\u017cnic\u0105, \u017ce nie wy\u015bwietla podgl\u0105du pliku.<\/p>\n<pre><code>[\n    'type' =&gt; 'file',\n    'return_format' =&gt; 'array',  \/\/ 'id' || 'url'\n]<\/code><\/pre>\n<p>Mo\u017cesz r\u00f3wnie\u017c poda\u0107 <code>'mime_types' =&gt; '',<\/code>i ustawi\u0107 go na np. <code>'pdf,docx'<\/code>do zezwalania tylko na pliki PDF i DOCX.<\/p>\n<h3>Pole: Edytor WYSIWYG<\/h3>\n<p>WYSIWYG to edytor \u201eTo, co widzisz, jest tym, co dostajesz&#8221; \u2013 ten, kt\u00f3ry znali\u015bmy przed pojawieniem si\u0119 Gutenberga (TinyMCE).<\/p>\n<pre><code>[\n    'type' =&gt; 'wysiwyg',\n    'tabs' =&gt; 'all',  \/\/ 'visual' || 'text'\n    'toolbar' =&gt; 'full',  \/\/ 'basic'\n    'media_upload' =&gt; 1,\n    'delay' =&gt; 0,\n]<\/code><\/pre>\n<p>Parametr <code>'media_upload'<\/code>i <code>'delay'<\/code>mo\u017ce mie\u0107 warto\u015b\u0107 1 (prawda) lub 0 (fa\u0142sz).<\/p>\n<h3>Pole: Wybierz<\/h3>\n<pre><code>[\n    'type' =&gt; 'select',\n    'allow_null' =&gt; 1,\n    'multiple' =&gt; 0,\n    'ui' =&gt; 1,\n    'return_format' =&gt; 'value',  \/\/ 'array' || 'label'\n    'choices' =&gt; [\n        'red' =&gt; __('Red color', 'txtdomain'),\n        'blue' =&gt; __('Blue color', 'txtdomain')\n    ],\n    'default_value' =&gt; 'red',\n]<\/code><\/pre>\n<h3>Pole: Pole wyboru<\/h3>\n<pre><code>[\n    'type' =&gt; 'checkbox',\n    'layout' =&gt; 'horizontal',  \/\/ 'vertical'\n    'toggle' =&gt; 0,\n    'return_format' =&gt; 'value',  \/\/ 'array' || 'label'\n    'choices' =&gt; [\n        'red' =&gt; __('Red color', 'txtdomain'),\n        'blue' =&gt; __('Blue color', 'txtdomain')\n    ],\n    'default_value' =&gt; ['red'],\n    'allow_custom' =&gt; 1,\n    'save_custom' =&gt; 0,\n]<\/code><\/pre>\n<p>Zauwa\u017c, \u017ce <code>'default_value'<\/code>mo\u017ce to by\u0107 tablica wielu wybor\u00f3w.<\/p>\n<h3>Pole: przycisk radiowy<\/h3>\n<pre><code>[\n    'type' =&gt; 'radio',\n    'layout' =&gt; 'horizontal',  \/\/ 'vertical'\n    'allow_null' =&gt; 0,\n    'return_format' =&gt; 'value',  \/\/ 'array' || 'label'\n    'choices' =&gt; [\n        'red' =&gt; __('Red color', 'txtdomain'),\n        'blue' =&gt; __('Blue color', 'txtdomain')\n    ],\n    'default_value' =&gt; 'red',\n    'other_choice' =&gt; 1,\n    'save_other_choice' =&gt; 0,\n]<\/code><\/pre>\n<p>Ustawienie <code>'other_choice'<\/code>na true dodaje dodatkowy przycisk radiowy oznaczony \u201eInne&#8221; z tekstem, w kt\u00f3rym u\u017cytkownik mo\u017ce co\u015b wpisa\u0107.<\/p>\n<h3>Pole: Prawda\/fa\u0142sz (prze\u0142\u0105cz)<\/h3>\n<pre><code>[\n    'type' =&gt; 'true_false',\n    'message' =&gt; __('Text after toggler', 'txtdomain'),\n    'default_value' =&gt; 1,\n    'ui' =&gt; 1,\n    'ui_on_text' =&gt; __('Yes', 'txtdomain'),\n    'ui_off_text' =&gt; __('No', 'txtdomain'),\n]<\/code><\/pre>\n<p>Warto\u015b\u0107 <code>'ui_on_text'<\/code>i <code>'ui_off_text'<\/code>jest poprawna tylko wtedy, gdy <code>'ui'<\/code>wynosi 1, poniewa\u017c okre\u015blaj\u0105, co powinno pojawi\u0107 si\u0119 na specjalnym prze\u0142\u0105czniku interfejsu u\u017cytkownika.<\/p>\n<h3>Pole: Link<\/h3>\n<p>Daje przycisk do wprowadzenia linku, wpisuj\u0105c lub wybieraj\u0105c zawarto\u015b\u0107 w witrynie WordPress (powinno by\u0107 zaznajomione z dodawaniem linku w normalnym edytorze WordPress).<\/p>\n<pre><code>[\n    'type' =&gt; 'link',\n    'return_format' =&gt; 'url',  \/\/ 'array'\n]<\/code><\/pre>\n<h3>Pole: obiekt postu<\/h3>\n<p>Daje pole wyboru, w kt\u00f3rym mo\u017cesz wybra\u0107 zawarto\u015b\u0107 WordPress. Wybierz umo\u017cliwia wyszukiwanie przez wpisanie, a ca\u0142a tre\u015b\u0107 jest podzielona wed\u0142ug typu posta. Mo\u017cesz zezwoli\u0107 na wyb\u00f3r wielu post\u00f3w lub tylko jednego.<\/p>\n<pre><code>[\n    'type' =&gt; 'post_object',\n    'allow_null' =&gt; 1,\n    'multiple' =&gt; 0,\n    'return_format' =&gt; 'object',  \/\/ 'id'\n    'post_type' =&gt; '',  \/\/ or array of post types e.g. ['post', 'page']\n    'taxonomy' =&gt; '',  \/\/ or array of terms e.g. ['category:term-slug']\n]<\/code><\/pre>\n<h3>Pole: Zwi\u0105zek<\/h3>\n<pre><code>[\n    'type' =&gt; 'relationship',\n    'return_format' =&gt; 'object',  \/\/ 'id'\n    'post_type' =&gt; '',  \/\/ or array of post types e.g. ['post', 'page']\n    'taxonomy' =&gt; '',  \/\/ or array of terms e.g. ['category:term-slug']\n    'elements' =&gt; ['featured_image'],  \/\/ or ''\n    'filters' =&gt; ['search', 'post_type', 'taxonomy'],\n]<\/code><\/pre>\n<h3>Pole: Wybierz terminy w taksonomii<\/h3>\n<p>Selektor termin\u00f3w taksonomicznych ma cztery r\u00f3\u017cne \u201etryby&#8221; lub typy, z kt\u00f3rych dwa pozwalaj\u0105 na wielokrotny wyb\u00f3r.<\/p>\n<pre><code>[\n    'type' =&gt; 'taxonomy',\n    'return_format' =&gt; 'object',  \/\/ 'id'\n    'taxonomy' =&gt; 'category',\n    'field_type' =&gt; 'select',  \/\/ 'checkbox' || 'radio' || 'multi_select'\n    'add_term' =&gt; 0,\n    'save_terms' =&gt; 0,\n]<\/code><\/pre>\n<h3>Pole: Wybierz u\u017cytkownika<\/h3>\n<pre><code>[\n    'type' =&gt; 'user',\n    'return_format' =&gt; 'array',  \/\/ 'object' || 'id\n    'role' =&gt; '',  \/\/ or array of roles, e.g. ['author']\n    'allow_null' =&gt; 1,\n    'multiple' =&gt; 0,\n]<\/code><\/pre>\n<h3>Pole: Mapy Google<\/h3>\n<pre><code>[\n    'type' =&gt; 'google_map',\n    'center_lat' =&gt; '59.917',\n    'center_lng' =&gt; '10.727',\n    'zoom' =&gt; 14,\n    'height' =&gt; 350,\n]<\/code><\/pre>\n<p>Pami\u0119taj, \u017ce aby to pole dzia\u0142a\u0142o, musisz poda\u0107 prawid\u0142owy klucz GoogleMaps API do ACF, na przyk\u0142ad:<\/p>\n<pre><code>add_filter('acf\/fields\/google_map\/api', function($api) {\n    $api['key'] = 'YOURAPIKEY';\n    return $api;\n});<\/code><\/pre>\n<h3>Pole: Selektor dat<\/h3>\n<pre><code>[\n    'type' =&gt; 'date_picker',\n    'display_format' =&gt; 'd\/m\/Y',\n    'return_format' =&gt; 'Y-m-d',\n    'first_day' =&gt; 1,\n]<\/code><\/pre>\n<h3>Pole: Selektor daty i godziny<\/h3>\n<pre><code>[\n    'type' =&gt; 'date_time_picker',\n    'display_format' =&gt; 'd\/m\/Y H:i:s',\n    'return_format' =&gt; 'Y-m-d H:i:s',\n    'first_day' =&gt; 1,\n]<\/code><\/pre>\n<h3>Pole: Selektor czasu<\/h3>\n<pre><code>[\n    'type' =&gt; 'time_picker',\n    'display_format' =&gt; 'H:i',\n    'return_format' =&gt; H:i',\n]<\/code><\/pre>\n<h3>Pole: Pr\u00f3bnik kolor\u00f3w<\/h3>\n<pre><code>[\n    'type' =&gt; 'color_picker',\n    'default_value' =&gt; '',  \/\/ or any hex code, e.g. '#FFFFFF'\n]<\/code><\/pre>\n<h3>Pole: Galeria (tylko ACF Pro)<\/h3>\n<pre><code>[\n    'type' =&gt; 'gallery',\n    'return_format' =&gt; 'array',  \/\/ 'id' || 'url'\n    'preview_size' =&gt; 'thumbnail',\n    'insert' =&gt; 'append',  \/\/ 'prepend'\n]<\/code><\/pre>\n<h3>Specjalne typy p\u00f3l<\/h3>\n<p>ACF oferuje r\u00f3wnie\u017c niekt\u00f3re typy p\u00f3l, kt\u00f3re same w sobie nie zapisuj\u0105 warto\u015bci, ale s\u0105 bardziej do cel\u00f3w organizacyjnych. Dla wszystkich tych ustaw <code>'name'<\/code>na pusty ci\u0105g.<\/p>\n<h4>Wiadomo\u015b\u0107 HTML<\/h4>\n<p>Je\u015bli chcesz po prostu wydrukowa\u0107 kod HTML bez faktycznego zapisywania warto\u015bci, mo\u017cesz u\u017cy\u0107 type <code>'message'<\/code>.<\/p>\n<pre><code>[\n    'type' =&gt; 'message',\n    'message' =&gt; '&lt;p&gt;Your HTML here&lt;\/p&gt;',\n    'new_lines' =&gt; 'wpautop',\n    'esc_html' =&gt; 0,\n]<\/code><\/pre>\n<h4>Wzmacniacz (tylko ACF Pro)<\/h4>\n<p>Repeater przechowuje tablic\u0119 p\u00f3l, kt\u00f3re mog\u0105 si\u0119 powtarza\u0107.<\/p>\n<pre><code>[\n    'type' =&gt; 'repeater',\n    'layout' =&gt; 'table',  \/\/ 'block' || 'row'\n    'button_label' =&gt; __('Add new', 'txtdomain'),\n    'sub_fields' =&gt; [],\n]<\/code><\/pre>\n<p>Element <code>sub_fields<\/code>oczekuje tablicy p\u00f3l, tak jak skonfigurowa\u0142e\u015b pola powy\u017cej.<\/p>\n<h2>Wniosek<\/h2>\n<p>W \u017cadnym wypadku nie jest to wyczerpuj\u0105cy przewodnik, poniewa\u017c ACF oferuje tak szeroki zakres opcji i dostosowa\u0144. Powinien jednak obejmowa\u0107 najcz\u0119\u015bciej u\u017cywane opcje i niestandardowe przypadki u\u017cycia. Osobi\u015bcie cz\u0119sto odnosz\u0119 si\u0119 do tego, gdy dodaj\u0119 pola ACF dla klient\u00f3w. I nawet w przypadku najdziwniejszych opcji ten przewodnik jest wystarczaj\u0105cy, abym nie musia\u0142 rozpycha\u0107 moich plik\u00f3w PHP kodem eksportu ACF. Mam nadziej\u0119, \u017ce tobie te\u017c si\u0119 przyda\u0142o!<\/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>Kompletne informacje o tym, jak \u0142adnie skonfigurowa\u0107 zaawansowane pola i grupy niestandardowe za pomoc\u0105 kodu PHP zamiast wklejania nad\u0119tego kodu z narz\u0119dzia do eksportu ACF PHP.<\/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,815,845,845,866,866,815],"tags":[1169],"class_list":{"0":"post-233848","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-wtyczki","13":"category-samouczki","15":"category-wordpress-7","18":"tag-affiai-pl"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/233848","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=233848"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/233848\/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=233848"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=233848"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=233848"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}