{"id":113082,"date":"2026-05-18T18:38:06","date_gmt":"2026-05-18T16:38:06","guid":{"rendered":"https:\/\/allkeystore.pl\/?p=113082"},"modified":"2026-05-18T18:38:39","modified_gmt":"2026-05-18T16:38:39","slug":"acf-fur-anfanger-eine-vollstandige-schritt-fur-schritt-anleitung-fur-benutzerdefinierte-felder-in-wordpress","status":"publish","type":"post","link":"https:\/\/allkeystore.pl\/de\/acf-dla-poczatkujacych-kompletny-przewodnik-do-pol-wlasnych-w-wordpress-krok-po-kroku\/","title":{"rendered":"ACF f\u00fcr Anf\u00e4nger: Eine vollst\u00e4ndige Schritt-f\u00fcr-Schritt-Anleitung zu benutzerdefinierten Feldern in WordPress"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>Czas czytania:<\/strong> ~12 min \u00b7 <strong>Poziom:<\/strong> \u015brednio zaawansowany<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Natywny edytor WordPressa ko\u0144czy si\u0119 na tytule, tre\u015bci i obrazku wyr\u00f3\u017cniaj\u0105cym. Chcesz dorzuci\u0107 podtytu\u0142 wpisu, cen\u0119 promocyjn\u0105 produktu albo logo marki przypi\u0119te do taksonomii? Klikalne opcje si\u0119 sko\u0144czy\u0142y. Advanced Custom Fields rozwi\u0105zuje ten problem od ponad dekady \u2014 ponad 2 mln aktywnych instalacji w repozytorium WordPress.org m\u00f3wi samo za siebie. Ten przewodnik prowadzi od fundamentu \u2014 czym s\u0105 surowe Custom Fields \u2014 przez instalacj\u0119 ACF i pierwsz\u0105 grup\u0119 p\u00f3l, a\u017c po scenariusze ACF PRO, WooCommerce i rejestracj\u0119 Custom Post Types bez dodatkowych wtyczek. Aktualizuj\u0119 te\u017c kontekst 2026 roku: WordPress 6.5\u20137.0, PHP 8.x, fork Secure Custom Fields i konsekwencje, kt\u00f3re z niego wynikaj\u0105 dla aktualizacji.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>ACF zast\u0119puje surowe Custom Fields graficznym interfejsem do p\u00f3l tekstowych, obraz\u00f3w, dat, galerii i relacji \u2014 bez pisania w\u0142asnej wtyczki.<\/li>\n\n\n\n<li>Dane z ACF l\u0105duj\u0105 w tabeli <code>wp_postmeta<\/code>. Po dezaktywacji wtyczki zostaj\u0105 w bazie \u2014 tracisz tylko wygodne API.<\/li>\n\n\n\n<li>Od wersji 6.1 ACF (Free i PRO) rejestruje Custom Post Types oraz taksonomie z panelu \u2014 bez Custom Post Type UI.<\/li>\n\n\n\n<li>ACF PRO (od 49 USD\/rok) dok\u0142ada Repeater, Flexible Content, Gallery, Clone, Options Pages i ACF Blocks pod w\u0142asne bloki Gutenberga.<\/li>\n\n\n\n<li>\u015arodowisko 2026: WordPress 6.5\u20137.0, PHP 7.4 minimum, w praktyce 8.3, ACF 6.1+. Pami\u0119taj o forku Secure Custom Fields w repozytorium WordPress.org.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"czym-sa-pola-wlasne-w-wordpress-i-dlaczego-natywny\">Czym s\u0105 pola w\u0142asne w WordPress i dlaczego natywny mechanizm nie wystarcza?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pola w\u0142asne (Custom Fields) to wbudowany mechanizm WordPressa \u2014 zapisuje pary klucz\u2013warto\u015b\u0107 przypi\u0119te do posta, strony albo innego typu tre\u015bci. Dane l\u0105duj\u0105 w tabeli <code>wp_postmeta<\/code> jako metadane, a w motywie odczytujesz je funkcj\u0105 <code>get_post_meta()<\/code>. Mechanizm istnieje od najwcze\u015bniejszych wersji WordPressa. Dzi\u015b jest zbyt surowy dla redaktora, kt\u00f3ry nie chce klepa\u0107 kluczy meta z palca.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Jak w\u0142\u0105czy\u0107 natywny panel Custom Fields w edytorze Gutenberg i klasycznym?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">W edytorze blokowym Gutenberg panel Custom Fields jest domy\u015blnie ukryty. W\u0142\u0105czysz go w trzech klikni\u0119ciach: trzy kropki w prawym g\u00f3rnym rogu edytora, \u201ePreferences&#8221;, zak\u0142adka \u201eGeneral&#8221;, sekcja \u201eAdvanced&#8221;, prze\u0142\u0105cznik \u201eCustom fields&#8221;, przycisk \u201eEnable &amp; Reload Page&#8221;. Strona si\u0119 prze\u0142aduje i pod tre\u015bci\u0105 pojawi si\u0119 klasyczny panel klucz\u2013warto\u015b\u0107.<\/p>\n\n\n\n<div style=\"max-width:950px; margin:2em auto; text-align:center;\">\n<svg viewBox=\"0 0 950 140\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"title-breadcrumb-custom-fields\" style=\"max-width:100%; height:auto;\">\n  <title id=\"title-breadcrumb-custom-fields\">\u015acie\u017cka w\u0142\u0105czania panelu Custom Fields w Gutenbergu: Trzy kropki, Preferences, General, Advanced, Custom fields<\/title>\n\n  <defs>\n    <marker id=\"arrow\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\"\n            markerWidth=\"8\" markerHeight=\"8\" orient=\"auto-start-reverse\">\n      <path d=\"M 0 0 L 10 5 L 0 10 z\" fill=\"currentColor\" fill-opacity=\"0.5\"\/>\n    <\/marker>\n  <\/defs>\n\n  <style>\n    .bc-block { fill: #f3f5f7; stroke: currentColor; stroke-opacity: 0.2; stroke-width: 1; }\n    .bc-block-active { fill: #009434; }\n    .bc-text { fill: currentColor; font-family: 'Roboto', sans-serif; font-size: 13px; font-weight: 500; }\n    .bc-text-active { fill: #ffffff; font-family: 'Roboto', sans-serif; font-size: 13px; font-weight: 600; }\n    .bc-arrow { stroke: currentColor; stroke-opacity: 0.5; stroke-width: 1.5; fill: none; }\n    html[data-neve-theme=\"dark\"] .bc-block { fill: #2b2b2b; }\n  <\/style>\n\n  <!-- Strza\u0142ki najpierw -->\n  <line class=\"bc-arrow\" x1=\"145\" y1=\"70\" x2=\"195\" y2=\"70\" marker-end=\"url(#arrow)\"\/>\n  <line class=\"bc-arrow\" x1=\"345\" y1=\"70\" x2=\"395\" y2=\"70\" marker-end=\"url(#arrow)\"\/>\n  <line class=\"bc-arrow\" x1=\"545\" y1=\"70\" x2=\"595\" y2=\"70\" marker-end=\"url(#arrow)\"\/>\n  <line class=\"bc-arrow\" x1=\"745\" y1=\"70\" x2=\"795\" y2=\"70\" marker-end=\"url(#arrow)\"\/>\n\n  <!-- Bloki -->\n  <rect class=\"bc-block\" x=\"10\" y=\"45\" width=\"120\" height=\"50\" rx=\"4\"\/>\n  <rect class=\"bc-block\" x=\"210\" y=\"45\" width=\"120\" height=\"50\" rx=\"4\"\/>\n  <rect class=\"bc-block\" x=\"410\" y=\"45\" width=\"120\" height=\"50\" rx=\"4\"\/>\n  <rect class=\"bc-block\" x=\"610\" y=\"45\" width=\"120\" height=\"50\" rx=\"4\"\/>\n  <rect class=\"bc-block bc-block-active\" x=\"810\" y=\"45\" width=\"130\" height=\"50\" rx=\"4\"\/>\n\n  <!-- Teksty blok\u00f3w -->\n  <text class=\"bc-text\" x=\"70\" y=\"75\" text-anchor=\"middle\">Trzy kropki<\/text>\n  <text class=\"bc-text\" x=\"270\" y=\"75\" text-anchor=\"middle\">Preferences<\/text>\n  <text class=\"bc-text\" x=\"470\" y=\"75\" text-anchor=\"middle\">General<\/text>\n  <text class=\"bc-text\" x=\"670\" y=\"75\" text-anchor=\"middle\">Advanced<\/text>\n  <text class=\"bc-text-active\" x=\"875\" y=\"75\" text-anchor=\"middle\">Custom fields<\/text>\n<\/svg>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">W klasycznym edytorze TinyMCE \u015bcie\u017cka jest kr\u00f3tsza. Kliknij \u201eScreen Options&#8221; w prawym g\u00f3rnym rogu i zaznacz checkbox \u201eCustom Fields&#8221;. Panel pojawi si\u0119 pod edytorem tekstu od razu, bez prze\u0142adowania strony.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Jakie s\u0105 ograniczenia surowych Custom Fields dla redaktora tre\u015bci?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Surowe Custom Fields to dwa pola tekstowe: \u201eName&#8221; i \u201eValue&#8221;. Wszystko jest tekstem. Bez walidacji, bez typ\u00f3w, bez podpowiedzi. Redaktor musi pami\u0119ta\u0107 dok\u0142adn\u0105 nazw\u0119 meta key (np. <code>subtitle<\/code>), wpisa\u0107 j\u0105 bez liter\u00f3wki, a warto\u015b\u0107 traktowa\u0107 jak zwyk\u0142y string \u2014 nawet wtedy, gdy to ma by\u0107 data albo URL.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Cz\u0119sty b\u0142\u0105d:<\/strong> redaktor wpisuje warto\u015b\u0107 pod kluczem <code>subTitle<\/code> z du\u017c\u0105 liter\u0105, a motyw oczekuje <code>subtitle<\/code>. Pole istnieje w bazie, ale na froncie nigdy si\u0119 nie wy\u015bwietli \u2014 bo nazwa meta jest case-sensitive. Surowy panel nic Ci nie podpowie.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Brakuje p\u00f3l typu image picker, date picker, select, gallery, relacji do innych post\u00f3w. Brakuje grupowania w logiczne sekcje \u2014 \u201eDane SEO&#8221; oddzielnie od \u201eDane CTA&#8221;. Brakuje regu\u0142 warunkowych w stylu \u201epoka\u017c to pole tylko dla typu produktu&#8221;. Wszystko to dok\u0142ada ACF.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"czym-jest-advanced-custom-fields-i-jak-rozszerza\">Czym jest Advanced Custom Fields i jak rozszerza mo\u017cliwo\u015bci WordPressa?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Advanced Custom Fields to wtyczka, kt\u00f3ra dok\u0142ada do WordPressa graficzny interfejs do tworzenia grup p\u00f3l w\u0142asnych. Ka\u017cda grupa (Field Group) to logiczny zestaw p\u00f3l, kt\u00f3ry przypisujesz do konkretnych ekran\u00f3w edycji \u2014 post\u00f3w, stron, produkt\u00f3w WooCommerce, taksonomii albo Options Pages.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Advanced Custom Fields is a WordPress plugin which allows you to add extra content fields to your WordPress edit screens.<\/p>\n<cite><a href=\"https:\/\/www.advancedcustomfields.com\/resources\/getting-started-with-acf\/\" rel=\"nofollow noopener\" target=\"_blank\">Oficjalna dokumentacja ACF \u2014 Getting Started with ACF<\/a><\/cite><\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Czym r\u00f3\u017cni si\u0119 ACF Free od ACF PRO?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">ACF Free to wersja z repozytorium WordPress.org. Darmowa, z podstawowymi typami p\u00f3l: Text, Textarea, Number, Email, Image, File, Select, Checkbox, Radio, True\/False, Page Link, Post Object, Taxonomy, User, Date Picker, Color Picker. Od wersji 6.1 obs\u0142uguje te\u017c rejestracj\u0119 Custom Post Types i taksonomii \u2014 wcze\u015bniej by\u0142a to wy\u0142\u0105czna funkcja PRO.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/allkeystore.pl\/produkt\/wtyczka-advanced-custom-fields-afc-pro\/\">ACF PRO<\/a> dok\u0142ada pola, kt\u00f3rych nie da si\u0119 sensownie zast\u0105pi\u0107: Repeater (powtarzalne wiersze), Flexible Content (modu\u0142owe layouty), Gallery, Clone (kopiowanie definicji p\u00f3l), Options Pages (globalne ustawienia witryny) oraz ACF Blocks (w\u0142asne bloki Gutenberga oparte o pola ACF).<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Cecha<\/th><th>ACF Free<\/th><th>ACF PRO<\/th><\/tr><\/thead><tbody><tr><td>Cena<\/td><td>0 USD<\/td><td>od 49 USD\/rok (Personal, 1 strona)<\/td><\/tr><tr><td>Podstawowe pola (Text, Image, Select, Date)<\/td><td>tak<\/td><td>tak<\/td><\/tr><tr><td>Repeater<\/td><td>nie<\/td><td>tak<\/td><\/tr><tr><td>Flexible Content<\/td><td>nie<\/td><td>tak<\/td><\/tr><tr><td>Gallery<\/td><td>nie<\/td><td>tak<\/td><\/tr><tr><td>Clone Field<\/td><td>nie<\/td><td>tak<\/td><\/tr><tr><td>Options Pages<\/td><td>nie<\/td><td>tak<\/td><\/tr><tr><td>ACF Blocks (Gutenberg)<\/td><td>nie<\/td><td>tak<\/td><\/tr><tr><td>CPT i taksonomie (od 6.1)<\/td><td>tak<\/td><td>tak<\/td><\/tr><tr><td>Wsparcie i aktualizacje<\/td><td>spo\u0142eczno\u015b\u0107<\/td><td>oficjalne wsparcie producenta<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Dlaczego ACF sta\u0142o si\u0119 standardem rozszerzania edytora WordPress?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ponad 2 mln aktywnych instalacji w repozytorium WordPress.org to twardy dow\u00f3d spo\u0142eczny. Powody s\u0105 trzy. Po pierwsze, dane zapisuj\u0105 si\u0119 w natywnej tabeli <code>wp_postmeta<\/code> \u2014 \u017cadnego vendor lock-in, \u017cadnego w\u0142asnego formatu. Po drugie, API front-endowe (<code>get_field()<\/code>, <code>the_field()<\/code>) jest sp\u00f3jne i przewidywalne. Dzia\u0142a identycznie w klasycznym motywie i w blokach Gutenberga. Po trzecie, dokumentacja i przyk\u0142ady s\u0105 obszerne, a spo\u0142eczno\u015b\u0107 rozwi\u0105za\u0142a wi\u0119kszo\u015b\u0107 typowych problem\u00f3w na forach i Stack Overflow.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Czym jest Secure Custom Fields (SCF) i co oznacza konflikt z 2024 roku dla u\u017cytkownika?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Secure Custom Fields to fork ACF utrzymywany od jesieni 2024 w ramach projektu WordPress.org. Powsta\u0142 na fali konfliktu mi\u0119dzy Automattic a WP Engine \u2014 WordPress.org tymczasowo przej\u0119\u0142o repozytorium ACF i podstawi\u0142o w aktualizacjach forka pod t\u0105 sam\u0105 nazw\u0105 wtyczki w panelu admina. Po wyroku s\u0105du WP Engine odzyska\u0142o kontrol\u0119 nad orygina\u0142em, ale SCF zosta\u0142 jako r\u00f3wnoleg\u0142a wtyczka pod adresem <code>developer.wordpress.org\/secure-custom-fields\/<\/code>.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Pu\u0142apka:<\/strong> je\u015bli aktualizowa\u0142e\u015b ACF z poziomu panelu WordPressa jesieni\u0105 2024, mo\u017cliwe \u017ce masz teraz zainstalowanego forka SCF, a nie oryginalny ACF. Sprawd\u017a w \u201eWtyczki&#8221; \u2014 je\u015bli widnieje \u201eSecure Custom Fields&#8221; zamiast \u201eAdvanced Custom Fields&#8221;, to fork. Dane p\u00f3l s\u0105 zgodne, ale aktualizacje funkcji id\u0105 innym torem.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"jakie-sa-wymagania-srodowiska-dla-acf-w-2026-roku\">Jakie s\u0105 wymagania \u015brodowiska dla ACF w 2026 roku?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Wymagania \u015brodowiska dla ACF s\u0105 pochodn\u0105 wymaga\u0144 WordPressa. WordPress 6.5+ wymaga PHP 7.4 jako minimum, a WordPress 7.0 (planowany na maj 2026) podnosi rekomendacj\u0119 do PHP 8.3. ACF w aktualnych wydaniach 6.x wymaga WordPressa 6.2+ i nie podaje sztywnego minimum PHP w changelogach. W praktyce trzymaj si\u0119 rekomendacji WordPressa.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Jak\u0105 wersj\u0119 PHP rekomendowa\u0107 dla ACF 6.x?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">W 2026 roku PHP 8.3 to bezpieczny standard dla produkcyjnej instalacji z ACF. PHP 7.4 wystarczy do startu, ale od listopada 2022 nie dostaje ju\u017c \u0142atek bezpiecze\u0144stwa \u2014 u\u017cywaj go tylko na hostingu, na kt\u00f3rym nie masz wyboru. PHP 8.0 i 8.1 dzia\u0142aj\u0105 stabilnie. PHP 8.3 daje najlepsz\u0105 wydajno\u015b\u0107 i najd\u0142u\u017csz\u0105 perspektyw\u0119 wsparcia.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wersj\u0119 PHP sprawdzisz w panelu admina: \u201eNarz\u0119dzia &gt; Stan witryny &gt; Informacje &gt; Serwer &gt; Wersja PHP&#8221;. Zmian\u0119 robisz po stronie hostingu \u2014 w cPanelu, DirectAdminie albo panelu hostera (Cloudways, SiteGround, Kinsta).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Co zmienia nadchodz\u0105cy WordPress 7.0 dla u\u017cytkownik\u00f3w ACF?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress 7.0 (maj 2026) przynosi wsp\u00f3\u0142prac\u0119 w czasie rzeczywistym w edytorze, zmiany w panelach admina i od\u015bwie\u017cone API blok\u00f3w. Dla ACF to potencjalne przesuni\u0119cia w UI Gutenberga \u2014 \u015bcie\u017cka w\u0142\u0105czania panelu \u201eCustom Fields&#8221; przez \u201ePreferences&#8221; mo\u017ce si\u0119 zmieni\u0107, a ACF Blocks zyskaj\u0105 lepsz\u0105 integracj\u0119 z Block API v3. Aktualne instrukcje (w tym ten artyku\u0142) odnosz\u0105 si\u0119 do WordPressa 6.5\u20136.6. Po stabilnym wydaniu 7.0 sprawd\u017a \u015bcie\u017cki menu na w\u0142asnej instalacji.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"jak-zainstalowac-i-aktywowac-acf-krok-po-kroku\">Jak zainstalowa\u0107 i aktywowa\u0107 ACF krok po kroku?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Instalacja ACF to standardowa procedura wtyczki WordPress \u2014 z repozytorium dla wersji Free albo z pliku ZIP dla PRO. Ca\u0142y proces zajmuje 2\u20133 minuty.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Jak zainstalowa\u0107 darmowy ACF z repozytorium WordPress.org?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Wejd\u017a w \u201eWtyczki &gt; Dodaj now\u0105&#8221;, w wyszukiwarce wpisz \u201eAdvanced Custom Fields&#8221; lub \u201eACF&#8221;. Pierwszy wynik to wtyczka od WP Engine \u2014 kliknij \u201eZainstaluj&#8221;, po chwili \u201eW\u0142\u0105cz&#8221;. W menu bocznym pojawi si\u0119 nowa pozycja \u201eACF&#8221; (w starszych wersjach \u201eCustom Fields&#8221;) z podstronami \u201eField Groups&#8221;, \u201ePost Types&#8221;, \u201eTaxonomies&#8221; i \u201eTools&#8221;.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Pro tip:<\/strong> je\u015bli widzisz w wyszukiwarce wyniki \u201eAdvanced Custom Fields&#8221; i \u201eSecure Custom Fields&#8221; obok siebie \u2014 to pozosta\u0142o\u015b\u0107 po konflikcie z 2024 roku. Wybierz \u201eAdvanced Custom Fields&#8221; autorstwa WP Engine, chyba \u017ce \u015bwiadomie chcesz forka.<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Jak zainstalowa\u0107 ACF PRO z pliku ZIP i wprowadzi\u0107 klucz licencyjny?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">ACF PRO kupujesz na <code>advancedcustomfields.com<\/code>. Po zakupie w panelu klienta zobaczysz link do pliku ZIP i klucz licencyjny. Pobierz ZIP, wejd\u017a w \u201eWtyczki &gt; Dodaj now\u0105 &gt; Wy\u015blij wtyczk\u0119&#8221;, wska\u017c plik, kliknij \u201eZainstaluj teraz&#8221;, potem \u201eW\u0142\u0105cz&#8221;. Je\u015bli wcze\u015bniej mia\u0142e\u015b darmowe ACF, instalator zast\u0105pi je wersj\u0105 PRO bez utraty danych p\u00f3l.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Klucz licencyjny wprowadzasz w \u201eACF &gt; Updates&#8221; \u2014 wklej klucz w pole \u201eLicense Key&#8221; i kliknij \u201eActivate License&#8221;. Bez aktywacji wtyczka dzia\u0142a, ale automatyczne aktualizacje nie przyjd\u0105.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Jak bezpiecznie zdefiniowa\u0107 klucz PRO w <code>wp-config.php<\/code>?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Klucz licencyjny PRO mo\u017cesz zdefiniowa\u0107 jako sta\u0142\u0105 w <code>wp-config.php<\/code> zamiast wpisywa\u0107 go w panelu admina. Wygodne przy wielu \u015brodowiskach (staging, produkcja) z tego samego kodu \u2014 klucz trzymasz w pliku konfiguracyjnym, nie w bazie. Dodaj poni\u017csz\u0105 lini\u0119 nad komentarzem <code>\/* That's all, stop editing! *\/<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>define( 'ACF_PRO_LICENSE', 'twoj-klucz-licencyjny-tutaj' );<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Po zapisaniu pliku wejd\u017a w \u201eACF &gt; Updates&#8221;. W polu \u201eLicense Key&#8221; zobaczysz informacj\u0119, \u017ce klucz pochodzi z <code>wp-config.php<\/code> i nie da si\u0119 go edytowa\u0107 z poziomu panelu. To intencjonalne zachowanie.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"jak-utworzyc-pierwsza-grupe-pol-field-group-w-acf\">Jak utworzy\u0107 pierwsz\u0105 grup\u0119 p\u00f3l (Field Group) w ACF?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Field Group to podstawowa jednostka konfiguracji w ACF \u2014 kontener na pola, przypi\u0119ty do konkretnych ekran\u00f3w edycji przez regu\u0142y Location. Pojedyncze pole nie istnieje samodzielnie. Zawsze jest cz\u0119\u015bci\u0105 grupy.<\/p>\n\n\n\n<div style=\"max-width:700px; margin:2em auto; text-align:center;\">\n<svg viewBox=\"0 0 700 830\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"title-acf-lifecycle\" style=\"max-width:100%; height:auto;\">\n  <title id=\"title-acf-lifecycle\">Cykl \u017cycia pola ACF: od Add Field w panelu po render na froncie<\/title>\n\n  <defs>\n    <marker id=\"arrow\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\"\n            markerWidth=\"8\" markerHeight=\"8\" orient=\"auto-start-reverse\">\n      <path d=\"M 0 0 L 10 5 L 0 10 z\" fill=\"currentColor\" fill-opacity=\"0.4\"\/>\n    <\/marker>\n  <\/defs>\n\n  <style>\n    .st-block { fill: #f3f5f7; stroke: currentColor; stroke-opacity: 0.2; stroke-width: 1; }\n    .st-block-accent { fill: #009434; }\n    .st-num { fill: #009434; font-family: 'Roboto Slab', serif; font-size: 22px; font-weight: 700; }\n    .st-num-on-accent { fill: #ffffff; font-family: 'Roboto Slab', serif; font-size: 22px; font-weight: 700; }\n    .st-label { fill: currentColor; font-family: 'Roboto', sans-serif; font-size: 15px; font-weight: 600; }\n    .st-label-on-accent { fill: #ffffff; font-family: 'Roboto', sans-serif; font-size: 15px; font-weight: 600; }\n    .st-desc { fill: currentColor; opacity: 0.7; font-family: 'Roboto', sans-serif; font-size: 12px; }\n    .st-desc-on-accent { fill: #ffffff; opacity: 0.9; font-family: 'Roboto', sans-serif; font-size: 12px; }\n    .st-arrow { stroke: currentColor; stroke-opacity: 0.4; stroke-width: 1.5; fill: none; }\n    html[data-neve-theme=\"dark\"] .st-block { fill: #2b2b2b; }\n  <\/style>\n\n  <!-- Strza\u0142ki najpierw (6 strza\u0142ek pionowych mi\u0119dzy 7 blokami) -->\n  <line class=\"st-arrow\" x1=\"350\" y1=\"100\" x2=\"350\" y2=\"128\" marker-end=\"url(#arrow)\"\/>\n  <line class=\"st-arrow\" x1=\"350\" y1=\"220\" x2=\"350\" y2=\"248\" marker-end=\"url(#arrow)\"\/>\n  <line class=\"st-arrow\" x1=\"350\" y1=\"340\" x2=\"350\" y2=\"368\" marker-end=\"url(#arrow)\"\/>\n  <line class=\"st-arrow\" x1=\"350\" y1=\"460\" x2=\"350\" y2=\"488\" marker-end=\"url(#arrow)\"\/>\n  <line class=\"st-arrow\" x1=\"350\" y1=\"580\" x2=\"350\" y2=\"608\" marker-end=\"url(#arrow)\"\/>\n  <line class=\"st-arrow\" x1=\"350\" y1=\"700\" x2=\"350\" y2=\"728\" marker-end=\"url(#arrow)\"\/>\n\n  <!-- Bloki -->\n  <!-- 1. Add Field (start - akcent) -->\n  <rect class=\"st-block st-block-accent\" x=\"50\" y=\"20\" width=\"600\" height=\"70\" rx=\"4\"\/>\n  <!-- 2. Field Group -->\n  <rect class=\"st-block\" x=\"50\" y=\"140\" width=\"600\" height=\"70\" rx=\"4\"\/>\n  <!-- 3. Field Name -->\n  <rect class=\"st-block\" x=\"50\" y=\"260\" width=\"600\" height=\"70\" rx=\"4\"\/>\n  <!-- 4. Location Rule -->\n  <rect class=\"st-block\" x=\"50\" y=\"380\" width=\"600\" height=\"70\" rx=\"4\"\/>\n  <!-- 5. wp_postmeta -->\n  <rect class=\"st-block\" x=\"50\" y=\"500\" width=\"600\" height=\"70\" rx=\"4\"\/>\n  <!-- 6. get_field() -->\n  <rect class=\"st-block\" x=\"50\" y=\"620\" width=\"600\" height=\"70\" rx=\"4\"\/>\n  <!-- 7. Render na froncie (akcent - koniec) -->\n  <rect class=\"st-block st-block-accent\" x=\"50\" y=\"740\" width=\"600\" height=\"70\" rx=\"4\"\/>\n\n  <!-- Teksty -->\n  <!-- 1. Add Field -->\n  <text class=\"st-num-on-accent\" x=\"80\" y=\"55\">1<\/text>\n  <text class=\"st-label-on-accent\" x=\"120\" y=\"50\">Add Field<\/text>\n  <text class=\"st-desc-on-accent\" x=\"120\" y=\"73\">Klikasz \u201e+ Add Field&#8221; w panelu ACF \u2014 start konfiguracji<\/text>\n  <!-- 2. Field Group -->\n  <text class=\"st-num\" x=\"80\" y=\"175\">2<\/text>\n  <text class=\"st-label\" x=\"120\" y=\"170\">Field Group<\/text>\n  <text class=\"st-desc\" x=\"120\" y=\"193\">Kontener \u0142\u0105cz\u0105cy pola z regu\u0142ami Location<\/text>\n  <!-- 3. Field Name -->\n  <text class=\"st-num\" x=\"80\" y=\"295\">3<\/text>\n  <text class=\"st-label\" x=\"120\" y=\"290\">Field Name<\/text>\n  <text class=\"st-desc\" x=\"120\" y=\"313\">Klucz programistyczny (np. subtitle) \u2014 case-sensitive<\/text>\n  <!-- 4. Location Rule -->\n  <text class=\"st-num\" x=\"80\" y=\"415\">4<\/text>\n  <text class=\"st-label\" x=\"120\" y=\"410\">Location Rule<\/text>\n  <text class=\"st-desc\" x=\"120\" y=\"433\">Decyduje, na jakich ekranach pole si\u0119 pojawi<\/text>\n  <!-- 5. wp_postmeta -->\n  <text class=\"st-num\" x=\"80\" y=\"535\">5<\/text>\n  <text class=\"st-label\" x=\"120\" y=\"530\">wp_postmeta<\/text>\n  <text class=\"st-desc\" x=\"120\" y=\"553\">Warto\u015b\u0107 zapisuje si\u0119 w natywnej tabeli WordPressa<\/text>\n  <!-- 6. get_field() -->\n  <text class=\"st-num\" x=\"80\" y=\"655\">6<\/text>\n  <text class=\"st-label\" x=\"120\" y=\"650\">get_field() w szablonie<\/text>\n  <text class=\"st-desc\" x=\"120\" y=\"673\">Motyw odczytuje warto\u015b\u0107 przez funkcj\u0119 API ACF<\/text>\n  <!-- 7. Render -->\n  <text class=\"st-num-on-accent\" x=\"80\" y=\"775\">7<\/text>\n  <text class=\"st-label-on-accent\" x=\"120\" y=\"770\">Render na froncie<\/text>\n  <text class=\"st-desc-on-accent\" x=\"120\" y=\"793\">Warto\u015b\u0107 pojawia si\u0119 w HTML strony dla odwiedzaj\u0105cych<\/text>\n<\/svg>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Wejd\u017a w \u201eACF &gt; Field Groups &gt; Add New&#8221;. Nadaj grupie nazw\u0119 widoczn\u0105 tylko w panelu admina \u2014 np. \u201ePost Subtitle&#8221;. Kliknij \u201e+ Add Field&#8221; i wype\u0142nij minimum dwa pola: \u201eField Label&#8221; (etykieta widoczna dla redaktora, np. \u201ePodtytu\u0142&#8221;) i \u201eField Name&#8221; (klucz programistyczny, np. <code>subtitle<\/code>). Wybierz typ pola \u2014 dla podtytu\u0142u wystarczy \u201eText&#8221;.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Jak nazwa\u0107 pole, \u017ceby unikn\u0105\u0107 problem\u00f3w na froncie?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Field Name to klucz, kt\u00f3rym identyfikujesz pole w kodzie. Trzy regu\u0142y, kt\u00f3re oszcz\u0119dz\u0105 Ci godzin debugowania:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>tylko ma\u0142e litery, cyfry i podkre\u015blenia \u2014 bez spacji, my\u015blnik\u00f3w, polskich znak\u00f3w,<\/li>\n\n\n\n<li>kr\u00f3tko i opisowo: <code>subtitle<\/code>, <code>hero_image<\/code>, <code>price_promo<\/code>. Nie <code>field_1<\/code>, nie <code>moje_pole_do_podtytulu<\/code>,<\/li>\n\n\n\n<li>bez prefiks\u00f3w ACF (typu <code>acf_<\/code>) \u2014 ACF dokleja swoje wewn\u0119trznie, podwojenie rozjedzie baz\u0119 z wywo\u0142aniem <code>get_field()<\/code>.<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Uwaga:<\/strong> Field Name jest case-sensitive i niezmienialny po zapisie. Je\u015bli zmienisz <code>subtitle<\/code> na <code>Subtitle<\/code> po publikacji, wszystkie warto\u015bci zapisane wcze\u015bniej w bazie zostan\u0105 pod starym kluczem i znikn\u0105 z edytora. Planuj nazw\u0119 od pocz\u0105tku.<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Jakie regu\u0142y Location pozwalaj\u0105 precyzyjnie umie\u015bci\u0107 pola w edytorze?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Sekcja Location w edytorze Field Group decyduje, na jakich ekranach pole si\u0119 pojawi. Domy\u015blna regu\u0142a brzmi \u201ePost Type is equal to Post&#8221; \u2014 pole pojawia si\u0119 przy ka\u017cdym wpisie blogowym. Dorzucisz AND i OR, \u017ceby precyzyjnie zaw\u0119zi\u0107 zasi\u0119g.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Post Type is equal to Product<\/strong> \u2014 pola pokazuj\u0105 si\u0119 tylko przy produktach WooCommerce.<\/li>\n\n\n\n<li><strong>Taxonomy is equal to Category<\/strong> \u2014 pola pokazuj\u0105 si\u0119 przy edycji kategorii (np. dla pola \u201eopis SEO kategorii&#8221;).<\/li>\n\n\n\n<li><strong>Page Template is equal to page-landing.php<\/strong> \u2014 pola tylko dla stron u\u017cywaj\u0105cych konkretnego szablonu.<\/li>\n\n\n\n<li><strong>User Role is equal to Editor<\/strong> \u2014 pola widoczne tylko dla redaktor\u00f3w, ukryte dla autor\u00f3w.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Jakie s\u0105 najpopularniejsze typy p\u00f3l i kiedy ich u\u017cywa\u0107?<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Typ pola<\/th><th>Kiedy u\u017cywa\u0107<\/th><th>Wymaga PRO?<\/th><\/tr><\/thead><tbody><tr><td>Text<\/td><td>kr\u00f3tkie warto\u015bci tekstowe (podtytu\u0142, slogan, jedna linia)<\/td><td>nie<\/td><\/tr><tr><td>Textarea<\/td><td>d\u0142u\u017csze teksty bez formatowania (opis kr\u00f3tki)<\/td><td>nie<\/td><\/tr><tr><td>WYSIWYG<\/td><td>tre\u015b\u0107 z formatowaniem (akapity, listy, linki) \u2014 drugi edytor TinyMCE<\/td><td>nie<\/td><\/tr><tr><td>Image<\/td><td>pojedynczy obraz z biblioteki medi\u00f3w (ikona, hero, miniatura)<\/td><td>nie<\/td><\/tr><tr><td>Gallery<\/td><td>wiele obraz\u00f3w uporz\u0105dkowanych w galerii<\/td><td>tak<\/td><\/tr><tr><td>Select \/ Radio<\/td><td>wyb\u00f3r z listy predefiniowanych warto\u015bci<\/td><td>nie<\/td><\/tr><tr><td>Date Picker<\/td><td>data wydarzenia, deadline, data wa\u017cno\u015bci<\/td><td>nie<\/td><\/tr><tr><td>Post Object \/ Relationship<\/td><td>relacja do innego posta lub strony (powi\u0105zany artyku\u0142)<\/td><td>nie<\/td><\/tr><tr><td>Repeater<\/td><td>powtarzalne wiersze (FAQ, lista funkcji, cz\u0142onkowie zespo\u0142u)<\/td><td>tak<\/td><\/tr><tr><td>Flexible Content<\/td><td>modu\u0142owy \u201epage builder&#8221; z layoutami do wyboru<\/td><td>tak<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"jak-wyswietlic-wartosci-pol-acf-w-motywie-wordpress\">Jak wy\u015bwietli\u0107 warto\u015bci p\u00f3l ACF w motywie WordPress?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Field Group masz, warto\u015bci w edytorze wype\u0142nione \u2014 pora pokaza\u0107 je na froncie. ACF daje do tego dwie g\u0142\u00f3wne funkcje: <code>get_field()<\/code> i <code>the_field()<\/code>. Obie wywo\u0142ujesz z motywu \u2014 najlepiej z motywu potomnego, \u017ceby aktualizacja motywu rodzica nie nadpisa\u0142a Twoich zmian.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Czym r\u00f3\u017cni si\u0119 <code>get_field()<\/code> od <code>the_field()<\/code>?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">R\u00f3\u017cnica jest semantyczna i identyczna jak mi\u0119dzy <code>get_the_title()<\/code> a <code>the_title()<\/code> w core WordPressa. <code>get_field( 'subtitle' )<\/code> zwraca warto\u015b\u0107 pola \u2014 przypiszesz j\u0105 do zmiennej, sprawdzisz warunkiem, przekszta\u0142cisz. <code>the_field( 'subtitle' )<\/code> od razu wypisuje warto\u015b\u0107 na ekran, bez mo\u017cliwo\u015bci obs\u0142ugi pustej warto\u015bci.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">The get_field() and the_field() functions are some of the most important parts of the ACF API.<\/p>\n<cite><a href=\"https:\/\/wplake.org\/blog\/acf-get-field-function\/\" rel=\"nofollow noopener\" target=\"_blank\">WPLake \u2014 ACF get_field() and the_field() Functions: Detailed Explanation<\/a><\/cite><\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Jak bezpiecznie wy\u015bwietla\u0107 pola z walidacj\u0105 pustej warto\u015bci?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Warto\u015b\u0107 pola bywa pusta \u2014 bo redaktor jej nie wype\u0142ni\u0142, bo pole jest opcjonalne, bo post tego pola nie ma. Pisz kod, kt\u00f3ry to przewiduje. Wzorzec jest prosty: pobierz warto\u015b\u0107, sprawd\u017a warunek, escapuj przed wypisaniem. Wklej poni\u017cszy snippet do <code>single.php<\/code> motywu potomnego, w miejscu gdzie podtytu\u0142 ma si\u0119 pojawi\u0107 (np. tu\u017c pod <code>the_title()<\/code>):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\/\/ Pobierz warto\u015b\u0107 pola \"subtitle\" dla aktualnego wpisu.\n$subtitle = get_field( 'subtitle' );\n\n\/\/ Wypisz tylko je\u015bli pole zosta\u0142o wype\u0142nione.\nif ( ! empty( $subtitle ) ) {\n    echo '&lt;p class=\"post-subtitle\"&gt;' . esc_html( $subtitle ) . '&lt;\/p&gt;';\n}\n?&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Trzy elementy s\u0105 krytyczne: <code>get_field()<\/code> (pobranie), <code>! empty()<\/code> (warunek na pust\u0105 warto\u015b\u0107), <code>esc_html()<\/code> (escape przed XSS). Pomi\u0144 kt\u00f3rykolwiek i albo dostaniesz pusty tag <code>&lt;p&gt;&lt;\/p&gt;<\/code> w HTML, albo luk\u0119 bezpiecze\u0144stwa, gdy warto\u015b\u0107 zawiera HTML.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Jak dzia\u0142a relacja ACF z <code>get_post_meta()<\/code> i czemu to wa\u017cne?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">ACF nie tworzy w\u0142asnej tabeli. Wszystko l\u0105duje w natywnej <code>wp_postmeta<\/code>. Warto\u015b\u0107 pola <code>subtitle<\/code> dla posta o ID 42 znajdziesz w SQL pod kluczem meta <code>subtitle<\/code>. To znaczy, \u017ce <code>get_post_meta( 42, 'subtitle', true )<\/code> zwr\u00f3ci t\u0119 sam\u0105 warto\u015b\u0107 co <code>get_field( 'subtitle', 42 )<\/code> \u2014 z drobn\u0105 r\u00f3\u017cnic\u0105.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Drobna r\u00f3\u017cnica wygl\u0105da tak: <code>get_field()<\/code> dodatkowo przetwarza warto\u015b\u0107 zgodnie z typem pola (np. dla pola Image zwraca obiekt z URL, alt, sizes; dla Date Picker formatuje dat\u0119). <code>get_post_meta()<\/code> zwraca surowy string. Dla p\u00f3l prostych (Text, Textarea) wynik jest identyczny. Dla p\u00f3l z\u0142o\u017conych u\u017cywaj <code>get_field()<\/code>.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Pro tip:<\/strong> je\u015bli dezaktywujesz ACF, dane w <code>wp_postmeta<\/code> zostaj\u0105. Odczytasz je natywnym <code>get_post_meta()<\/code> i przepiszesz motyw bez ACF. To gwarancja, \u017ce nie wpadasz w lock-in \u2014 wtyczka jest opcjonalna, nie obowi\u0105zkowa dla Twoich danych.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"jak-acf-integruje-sie-z-woocommerce-i-custom-post\">Jak ACF integruje si\u0119 z WooCommerce i Custom Post Types?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">WooCommerce i CPT to dwa najcz\u0119stsze scenariusze u\u017cycia ACF poza zwyk\u0142ymi postami. Oba opieraj\u0105 si\u0119 na regule Location \u201ePost Type is equal to \u2026&#8221; i dzia\u0142aj\u0105 z minimaln\u0105 konfiguracj\u0105.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Jak doda\u0107 dodatkowe pole do produktu WooCommerce krok po kroku?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Za\u0142\u00f3\u017cmy, \u017ce chcesz doda\u0107 do produkt\u00f3w pole \u201eBrand&#8221; (marka). Procedura:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Wejd\u017a w \u201eACF &gt; Field Groups &gt; Add New&#8221;, nadaj grupie nazw\u0119 \u201eProduct Brand&#8221;.<\/li>\n\n\n\n<li>Kliknij \u201e+ Add Field&#8221;. Label: \u201eMarka&#8221;. Name: <code>brand<\/code>. Typ: \u201eText&#8221;.<\/li>\n\n\n\n<li>W sekcji Location ustaw regu\u0142\u0119 \u201ePost Type is equal to Product&#8221;.<\/li>\n\n\n\n<li>Zapisz grup\u0119. Wejd\u017a w \u201eProdukty &gt; Wszystkie produkty&#8221; i otw\u00f3rz dowolny produkt \u2014 pod opisem zobaczysz now\u0105 sekcj\u0119 \u201eProduct Brand&#8221; z polem \u201eMarka&#8221;.<\/li>\n\n\n\n<li>Wype\u0142nij pole i zapisz produkt.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Wy\u015bwietlenie pola na froncie produktu wymaga edycji szablonu \u2014 najlepiej przez hook WooCommerce, \u017ceby nie nadpisywa\u0107 <code>single-product.php<\/code>. Dodaj poni\u017cszy snippet do <code>functions.php<\/code> motywu potomnego:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>add_action( 'woocommerce_single_product_summary', 'akst_show_product_brand', 25 );\n\nfunction akst_show_product_brand() {\n    $brand = get_field( 'brand' );\n    if ( ! empty( $brand ) ) {\n        echo '&lt;p class=\"product-brand\"&gt;&lt;strong&gt;Marka:&lt;\/strong&gt; ' . esc_html( $brand ) . '&lt;\/p&gt;';\n    }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Priorytet 25 wstawia pole mi\u0119dzy cen\u0105 (priorytet 10) a przyciskiem dodaj do koszyka (priorytet 30). Od\u015bwie\u017c stron\u0119 produktu \u2014 marka pojawi si\u0119 w opisanym miejscu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Jak zarejestrowa\u0107 Custom Post Type w ACF 6.1+ bez osobnej wtyczki?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Do wersji 6.1 rejestracja CPT wymaga\u0142a kodu w <code>functions.php<\/code> albo dedykowanej wtyczki <a href=\"https:\/\/allkeystore.pl\/produkt\/custom-post-type-ui-extended-wordpress-plugin\/\">Custom Post Type UI<\/a>. Od 6.1 zrobisz to bezpo\u015brednio w panelu ACF \u2014 bez kodu i bez dodatkowej wtyczki.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Registering custom taxonomies and post types can be done in both the free and PRO versions of ACF.<\/p>\n<cite><a href=\"https:\/\/wpengine.com\/blog\/acf-version-6-1\/\" rel=\"nofollow noopener\" target=\"_blank\">WP Engine \u2014 Custom Post Types and Taxonomies in ACF 6.1<\/a><\/cite><\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Procedura dla CPT \u201eProject&#8221; (portfolio):<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u201eACF &gt; Post Types &gt; Add New&#8221;.<\/li>\n\n\n\n<li>Plural Label: \u201eProjects&#8221;. Singular Label: \u201eProject&#8221;. Post Type Key: <code>project<\/code>.<\/li>\n\n\n\n<li>W zak\u0142adce \u201eAdvanced Configuration&#8221; zaznacz \u201eHierarchical: no&#8221;, \u201eHas Archive: yes&#8221;, \u201eShow in REST: yes&#8221; (dla Gutenberga).<\/li>\n\n\n\n<li>Zapisz. W menu bocznym pojawi si\u0119 nowa pozycja \u201eProjects&#8221;.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Jak po\u0142\u0105czy\u0107 CPT z w\u0142asn\u0105 taksonomi\u0105 i polami opisuj\u0105cymi taksonomi\u0119?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Realny scenariusz: katalog produkt\u00f3w B2B z taksonomi\u0105 \u201eBrand&#8221;. Ka\u017cda marka ma logo, rok za\u0142o\u017cenia i lokalizacj\u0119 HQ. Procedura:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u201eACF &gt; Taxonomies &gt; Add New&#8221;. Plural: \u201eBrands&#8221;, Singular: \u201eBrand&#8221;, Key: <code>brand<\/code>. Przypisz do Post Type \u201eProduct&#8221;.<\/li>\n\n\n\n<li>\u201eACF &gt; Field Groups &gt; Add New&#8221;. Nazwa: \u201eBrand Meta&#8221;.<\/li>\n\n\n\n<li>Dodaj 3 pola: <code>brand_logo<\/code> (typ Image), <code>founded_year<\/code> (typ Number), <code>headquarters<\/code> (typ Text).<\/li>\n\n\n\n<li>W Location: \u201eTaxonomy is equal to Brand&#8221;.<\/li>\n\n\n\n<li>Zapisz. Wejd\u017a w \u201eProducts &gt; Brands &gt; Add New&#8221; \u2014 przy formularzu dodawania marki zobaczysz 3 nowe pola.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Na froncie warto\u015bci taksonomii odczytujesz przez <code>get_field( 'brand_logo', 'brand_' . $term_id )<\/code>. Drugi argument to nie ID posta, tylko prefiks <code>brand_<\/code> (nazwa taksonomii) + ID terma. To r\u00f3\u017cnica w stosunku do p\u00f3l na po\u015bcie.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"jakie-zaawansowane-funkcje-oferuje-acf-pro\">Jakie zaawansowane funkcje oferuje ACF PRO?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">ACF PRO dodaje funkcje, kt\u00f3rych nie da si\u0119 sensownie zast\u0105pi\u0107 w wersji Free. Najwa\u017cniejsze trzy to Repeater, Flexible Content i ACF Blocks \u2014 ka\u017cde rozwi\u0105zuje inn\u0105 klas\u0119 problem\u00f3w.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Do czego s\u0142u\u017cy pole Repeater i kiedy ma sens?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Repeater to powtarzalne wiersze p\u00f3l. Definiujesz raz struktur\u0119 (np. \u201epytanie + odpowied\u017a&#8221; dla sekcji FAQ), a redaktor dodaje tyle wierszy, ile chce. Bez Repeatera musia\u0142by\u015b klepa\u0107 10 osobnych p\u00f3l <code>faq_1_question<\/code>, <code>faq_1_answer<\/code>, <code>faq_2_question<\/code>\u2026 i godzi\u0107 si\u0119 na sztywny limit z g\u00f3ry.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Snippet wy\u015bwietlaj\u0105cy Repeater \u201efaq&#8221; w szablonie:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php if ( have_rows( 'faq' ) ) : ?&gt;\n    &lt;dl class=\"faq-list\"&gt;\n    &lt;?php while ( have_rows( 'faq' ) ) : the_row(); ?&gt;\n        &lt;dt&gt;&lt;?php echo esc_html( get_sub_field( 'question' ) ); ?&gt;&lt;\/dt&gt;\n        &lt;dd&gt;&lt;?php echo esc_html( get_sub_field( 'answer' ) ); ?&gt;&lt;\/dd&gt;\n    &lt;?php endwhile; ?&gt;\n    &lt;\/dl&gt;\n&lt;?php endif; ?&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">P\u0119tla <code>have_rows()<\/code> + <code>the_row()<\/code> + <code>get_sub_field()<\/code> to wzorzec, kt\u00f3ry zobaczysz przy ka\u017cdym Repeaterze i Flexible Content. Zapami\u0119taj raz, u\u017cywaj wsz\u0119dzie.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Jak Flexible Content zast\u0119puje page buildery w prostych projektach?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Flexible Content to Repeater na sterydach. Zamiast jednej powtarzalnej struktury definiujesz kilka \u201elayout\u00f3w&#8221; do wyboru. Redaktor sk\u0142ada stron\u0119 z blok\u00f3w: \u201eHero Section&#8221;, \u201eText + Image&#8221;, \u201eTestimonials&#8221;, \u201eCTA Banner&#8221;. Ka\u017cdy layout ma w\u0142asne pod-pola.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">W prostszych projektach to pe\u0142noprawna alternatywa dla page builder\u00f3w typu <a href=\"https:\/\/allkeystore.pl\/produkt\/wtyczka-addon-plugin-elementor-pro-wordpress-plugin\/\">Elementor <\/a>czy <a href=\"https:\/\/allkeystore.pl\/produkt\/wtyczka-addon-plugin-divi-elegant-themes-kazdy-szablon\/\">Divi<\/a>. Plusy: pe\u0142na kontrola nad HTML (sam piszesz template part dla ka\u017cdego layoutu), zerowe zale\u017cno\u015bci od ci\u0119\u017ckich framework\u00f3w front-endowych, dane w natywnym <code>wp_postmeta<\/code>. Minusy: redaktor nie widzi \u201epodgl\u0105du na \u017cywo&#8221; \u2014 zapisz i sprawd\u017a na froncie.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">P\u0119tla w szablonie wygl\u0105da tak:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php if ( have_rows( 'page_builder' ) ) : ?&gt;\n    &lt;?php while ( have_rows( 'page_builder' ) ) : the_row();\n        $layout = get_row_layout();\n        get_template_part( 'template-parts\/blocks\/' . $layout );\n    endwhile; ?&gt;\n&lt;?php endif; ?&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ka\u017cdy layout to osobny plik w <code>template-parts\/blocks\/<\/code> \u2014 np. <code>hero-section.php<\/code>, <code>text-image.php<\/code>. Nowy layout dodajesz w dw\u00f3ch ruchach: stworzenie pliku + rejestracja layoutu w polu Flexible Content w panelu ACF.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Czym s\u0105 ACF Blocks i jak buduj\u0105 w\u0142asne bloki Gutenberga?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">ACF Blocks to mechanizm rejestrowania blok\u00f3w Gutenberga opartych o pola ACF, a nie o React i Block API. Redaktor wstawia blok w edytorze, wype\u0142nia pola po prawej, widzi podgl\u0105d na \u017cywo \u2014 wszystko bez znajomo\u015bci JavaScriptu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Workflow wygl\u0105da tak: utw\u00f3rz Field Group z regu\u0142\u0105 Location \u201eBlock is equal to [nazwa bloku]&#8221;, zarejestruj blok przez <code>acf_register_block_type()<\/code> w <code>functions.php<\/code>, napisz template (PHP), kt\u00f3ry renderuje warto\u015bci p\u00f3l. Od ACF 6.x mechanizm jest kompatybilny z Block API v3 core WordPressa.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Rejestracja prostego bloku \u201etestimonial&#8221;:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>add_action( 'acf\/init', 'akst_register_blocks' );\n\nfunction akst_register_blocks() {\n    if ( ! function_exists( 'acf_register_block_type' ) ) {\n        return;\n    }\n\n    acf_register_block_type( array(\n        'name'            =&gt; 'testimonial',\n        'title'           =&gt; 'Testimonial',\n        'description'     =&gt; 'Pojedynczy testimonial klienta.',\n        'render_template' =&gt; 'template-parts\/blocks\/testimonial.php',\n        'category'        =&gt; 'formatting',\n        'icon'            =&gt; 'format-quote',\n        'keywords'        =&gt; array( 'testimonial', 'opinia', 'cytat' ),\n        'mode'            =&gt; 'preview',\n    ) );\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dodaj kod, stw\u00f3rz plik <code>template-parts\/blocks\/testimonial.php<\/code> \u2014 blok pojawi si\u0119 w wyszukiwarce blok\u00f3w Gutenberga w kategorii \u201eFormatting&#8221;.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"jakie-sa-najczestsze-bledy-poczatkujacych-i-jak-je\">Jakie s\u0105 najcz\u0119stsze b\u0142\u0119dy pocz\u0105tkuj\u0105cych i jak je rozwi\u0105za\u0107?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Wi\u0119kszo\u015b\u0107 problem\u00f3w z ACF sprowadza si\u0119 do trzech kategorii: konfiguracja (Location, nazwa pola), kontekst (z\u0142y <code>$post_id<\/code>) i \u015brodowisko (cache, konflikt wtyczek). Poni\u017csza tabela diagnostyczna pomo\u017ce Ci szybko zlokalizowa\u0107 przyczyn\u0119.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Co widzisz<\/th><th>Co to znaczy<\/th><th>Co zrobi\u0107<\/th><\/tr><\/thead><tbody><tr><td>Pole puste na froncie mimo wpisanej warto\u015bci w edytorze<\/td><td>liter\u00f3wka w Field Name lub z\u0142y <code>$post_id<\/code><\/td><td>sprawd\u017a dok\u0142adn\u0105 nazw\u0119 w \u201eACF &gt; Field Groups&#8221; i por\u00f3wnaj z wywo\u0142aniem w kodzie<\/td><\/tr><tr><td>Pole nie pojawia si\u0119 w edytorze posta<\/td><td>b\u0142\u0119dna regu\u0142a Location lub niezapisana Field Group<\/td><td>sprawd\u017a \u201eLocation&#8221; \u2014 czy \u201ePost Type&#8221; pasuje do edytowanego typu tre\u015bci<\/td><\/tr><tr><td>Pole pojawia si\u0119, ale warto\u015b\u0107 nie zapisuje si\u0119<\/td><td>brak uprawnie\u0144 lub konflikt z wtyczk\u0105 cache<\/td><td>wy\u0142\u0105cz wtyczki cache, sprawd\u017a rol\u0119 u\u017cytkownika<\/td><\/tr><tr><td>Funkcja <code>get_field()<\/code> zwraca <code>null<\/code> w szablonie taksonomii<\/td><td>drugi argument musi by\u0107 w formacie <code>'category_' . $term_id<\/code><\/td><td>u\u017cyj <code>get_field( 'name', get_queried_object() )<\/code><\/td><\/tr><tr><td>Pole Image zwraca tylko ID liczbowe, nie URL<\/td><td>ustawienie \u201eReturn Format&#8221; w polu Image to \u201eImage ID&#8221;<\/td><td>zmie\u0144 \u201eReturn Format&#8221; na \u201eImage Array&#8221; lub \u201eImage URL&#8221;<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Dlaczego moje pole jest puste w <code>the_field()<\/code> mimo \u017ce wpisa\u0142em warto\u015b\u0107?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Trzy najcz\u0119stsze przyczyny:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Liter\u00f3wka w Field Name.<\/strong> Wpisa\u0142e\u015b w kodzie <code>the_field( 'subTitle' )<\/code>, a w panelu nazwa to <code>subtitle<\/code>. Field Name jest case-sensitive. Skopiuj dok\u0142adn\u0105 nazw\u0119 z panelu.<\/li>\n\n\n\n<li><strong>Edytujesz inny post ni\u017c my\u015blisz.<\/strong> Wywo\u0142ujesz <code>the_field()<\/code> w p\u0119tli archive zamiast w <code>single.php<\/code>? ACF czyta wtedy dane g\u0142\u00f3wnego query, a nie aktualnej iteracji. Przeka\u017c jawnie <code>get_the_ID()<\/code> jako drugi argument.<\/li>\n\n\n\n<li><strong>Cache motywu lub strony.<\/strong> Wtyczki cache <a href=\"https:\/\/allkeystore.pl\/produkt\/wtyczka-wp-rocket\/\">WP Rocket<\/a> i LiteSpeed Cache potrafi\u0105 zacache&#8217;owa\u0107 pust\u0105 wersj\u0119 strony. Wyczy\u015b\u0107 cache po wprowadzeniu warto\u015bci pola.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Dlaczego pola nie pojawiaj\u0105 si\u0119 w edytorze posta lub produktu?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Najcz\u0119\u015bciej winna jest regu\u0142a Location. Sprawd\u017a w \u201eACF &gt; Field Groups &gt; [nazwa grupy] &gt; Location&#8221; \u2014 je\u015bli regu\u0142a brzmi \u201ePost Type is equal to Post&#8221;, a edytujesz produkt WooCommerce, pole si\u0119 nie pojawi. Zmie\u0144 na \u201ePost Type is equal to Product&#8221; albo dodaj drug\u0105 regu\u0142\u0119 z OR.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Druga mo\u017cliwo\u015b\u0107: Field Group ma status \u201eInactive&#8221; \u2014 w li\u015bcie grup p\u00f3l po prawej stronie jest prze\u0142\u0105cznik. Aktywuj grup\u0119 i od\u015bwie\u017c edytor.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Jak rozwi\u0105zywa\u0107 konflikty ACF z page builderami i cache?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Page buildery (Elementor, Divi, Bricks) maj\u0105 w\u0142asne mechanizmy dynamicznego pobierania p\u00f3l ACF. Konflikt pojawia si\u0119, gdy builder cache&#8217;uje warto\u015b\u0107 pola i nie od\u015bwie\u017ca jej po edycji. Rozwi\u0105zanie: w ustawieniach buildera w\u0142\u0105cz \u201eregeneruj CSS po zapisie&#8221; i wyczy\u015b\u0107 cache buildera po zmianie warto\u015bci pola.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Konflikt z cache czy\u015bcisz sekwencyjnie: <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">1) wyczy\u015b\u0107 cache wtyczki cache, <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2) wyczy\u015b\u0107 cache hostingu (Cloudways i Kinsta maj\u0105 osobny), <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">3) wyczy\u015b\u0107 cache CDN (Cloudflare), <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">4) hard refresh przegl\u0105darki (Ctrl+Shift+R). <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pole nadal jest puste? Problem nie le\u017cy w cache.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"jakie-jest-podsumowanie-kluczowych-informacji\">Jakie jest podsumowanie kluczowych informacji?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Najwa\u017cniejsze punkty z ca\u0142ego artyku\u0142u \u2014 zwi\u0119\u017ale:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ACF zast\u0119puje surowe Custom Fields graficznym interfejsem \u2014 bez kodowania w\u0142asnej wtyczki.<\/li>\n\n\n\n<li>Dane l\u0105duj\u0105 w <code>wp_postmeta<\/code> i zostaj\u0105 po dezaktywacji wtyczki \u2014 \u017cadnego vendor lock-in.<\/li>\n\n\n\n<li>Instalacja: \u201eWtyczki &gt; Dodaj now\u0105 &gt; Advanced Custom Fields&#8221; (Free) lub upload ZIP (PRO).<\/li>\n\n\n\n<li>Field Group + Field Name + Location to trzy filary ka\u017cdej konfiguracji ACF.<\/li>\n\n\n\n<li>W motywie: <code>get_field()<\/code> (do logiki) lub <code>the_field()<\/code> (do prostego wypisania), zawsze z <code>esc_html()<\/code>.<\/li>\n\n\n\n<li>PRO daje Repeater, Flexible Content, Gallery, Options Pages i ACF Blocks \u2014 kupuj, gdy potrzebujesz modu\u0142owych layout\u00f3w.<\/li>\n\n\n\n<li>Najcz\u0119stsze b\u0142\u0119dy: liter\u00f3wka w Field Name, z\u0142a regu\u0142a Location, cache. Diagnostyka w kolejno\u015bci: nazwa \u2192 Location \u2192 cache.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Pe\u0142na dokumentacja ACF jest pod <a href=\"https:\/\/www.advancedcustomfields.com\/resources\/\" rel=\"nofollow noopener\" target=\"_blank\">advancedcustomfields.com\/resources<\/a>. Dla forka Secure Custom Fields osobna \u015bcie\u017cka: <a href=\"https:\/\/developer.wordpress.org\/secure-custom-fields\/\" rel=\"nofollow noopener\" target=\"_blank\">developer.wordpress.org\/secure-custom-fields<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"jakie-sa-najczesciej-zadawane-pytania-faq\">Jakie s\u0105 najcz\u0119\u015bciej zadawane pytania (FAQ)?<\/h2>\n\n\n\n<div class=\"aks-art-faq\">\n  <details class=\"aks-art-faq__item\">\n    <summary class=\"aks-art-faq__question\">\n      <h3 class=\"aks-art-faq__question-title\">Czy ACF jest darmowy i czym r\u00f3\u017cni si\u0119 od ACF PRO?<\/h3>\n      <span class=\"aks-art-faq__icon\" aria-hidden=\"true\"><\/span>\n    <\/summary>\n    <div class=\"aks-art-faq__answer\">\n      <p>Tak, ACF Free pobierzesz za darmo z repozytorium WordPress.org. PRO startuje od 49 USD\/rok (plan Personal, 1 strona) i dok\u0142ada pola Repeater, Flexible Content, Gallery, Clone, Options Pages oraz ACF Blocks. Od wersji 6.1 obie wersje obs\u0142uguj\u0105 rejestracj\u0119 Custom Post Types i taksonomii.<\/p>\n    <\/div>\n  <\/details>\n  <details class=\"aks-art-faq__item\">\n    <summary class=\"aks-art-faq__question\">\n      <h3 class=\"aks-art-faq__question-title\">Czy po wy\u0142\u0105czeniu ACF strac\u0119 wszystkie dane z p\u00f3l?<\/h3>\n      <span class=\"aks-art-faq__icon\" aria-hidden=\"true\"><\/span>\n    <\/summary>\n    <div class=\"aks-art-faq__answer\">\n      <p>Nie. ACF zapisuje wszystkie warto\u015bci p\u00f3l w natywnej tabeli <code>wp_postmeta<\/code> WordPressa. Po dezaktywacji wtyczki dane zostaj\u0105 w bazie \u2014 odczytasz je natywnym <code>get_post_meta()<\/code>. Tracisz tylko wygodny interfejs do edycji i funkcje <code>get_field()<\/code> oraz <code>the_field()<\/code> w motywie.<\/p>\n    <\/div>\n  <\/details>\n  <details class=\"aks-art-faq__item\">\n    <summary class=\"aks-art-faq__question\">\n      <h3 class=\"aks-art-faq__question-title\">Czy ACF dzia\u0142a z motywami klasycznymi i blokowymi (FSE)?<\/h3>\n      <span class=\"aks-art-faq__icon\" aria-hidden=\"true\"><\/span>\n    <\/summary>\n    <div class=\"aks-art-faq__answer\">\n      <p>Tak, ACF radzi sobie z oboma typami motyw\u00f3w. W motywach klasycznych u\u017cywasz <code>get_field()<\/code> w plikach PHP (<code>single.php<\/code>, <code>page.php<\/code>). W motywach blokowych (FSE) si\u0119gasz po ACF Blocks (PRO) do tworzenia w\u0142asnych blok\u00f3w Gutenberga albo po wtyczk\u0119 Blocks for ACF Fields <span style=\"color:#cc0000\">[LINK PRODUKT: Blocks for ACF Fields]<\/span> do wy\u015bwietlania p\u00f3l bez pisania kodu.<\/p>\n    <\/div>\n  <\/details>\n  <details class=\"aks-art-faq__item\">\n    <summary class=\"aks-art-faq__question\">\n      <h3 class=\"aks-art-faq__question-title\">Co to jest Secure Custom Fields i czy musz\u0119 si\u0119 przesiada\u0107?<\/h3>\n      <span class=\"aks-art-faq__icon\" aria-hidden=\"true\"><\/span>\n    <\/summary>\n    <div class=\"aks-art-faq__answer\">\n      <p>Secure Custom Fields (SCF) to fork ACF utrzymywany w ramach projektu WordPress.org, powsta\u0142y w 2024 roku w wyniku konfliktu Automattic kontra WP Engine. Przesiadka nie jest konieczna \u2014 oryginalny ACF wr\u00f3ci\u0142 do repozytorium po wyroku s\u0105du. Sprawd\u017a w \u201eWtyczki&#8221;, kt\u00f3r\u0105 wersj\u0119 masz zainstalowan\u0105. Je\u015bli \u201eSecure Custom Fields&#8221; \u2014 dane s\u0105 zgodne z ACF, ale dalsze aktualizacje funkcji id\u0105 innym torem.<\/p>\n    <\/div>\n  <\/details>\n  <details class=\"aks-art-faq__item\">\n    <summary class=\"aks-art-faq__question\">\n      <h3 class=\"aks-art-faq__question-title\">Jak\u0105 wersj\u0119 PHP zaleca si\u0119 dla ACF w 2026 roku?<\/h3>\n      <span class=\"aks-art-faq__icon\" aria-hidden=\"true\"><\/span>\n    <\/summary>\n    <div class=\"aks-art-faq__answer\">\n      <p>PHP 8.3 to bezpieczna rekomendacja dla produkcyjnej instalacji w 2026 roku. PHP 7.4 wystarczy formalnie (WordPress 7.0 wymaga 7.4 jako minimum), ale od listopada 2022 nie dostaje ju\u017c \u0142atek bezpiecze\u0144stwa. PHP 8.0 i 8.1 dzia\u0142aj\u0105 stabilnie z ACF 6.x \u2014 wybierz 8.3, je\u015bli hosting daje tak\u0105 opcj\u0119.<\/p>\n    <\/div>\n  <\/details>\n<\/div>\n\n\n\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Czy ACF jest darmowy i czym r\u00f3\u017cni si\u0119 od ACF PRO?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Tak, ACF Free pobierzesz za darmo z repozytorium WordPress.org. PRO startuje od 49 USD\/rok (plan Personal, 1 strona) i dok\u0142ada pola Repeater, Flexible Content, Gallery, Clone, Options Pages oraz ACF Blocks. Od wersji 6.1 obie wersje obs\u0142uguj\u0105 rejestracj\u0119 Custom Post Types i taksonomii.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Czy po wy\u0142\u0105czeniu ACF strac\u0119 wszystkie dane z p\u00f3l?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Nie. ACF zapisuje wszystkie warto\u015bci p\u00f3l w natywnej tabeli wp_postmeta WordPressa. Po dezaktywacji wtyczki dane zostaj\u0105 w bazie \u2014 odczytasz je natywnym get_post_meta(). Tracisz tylko wygodny interfejs do edycji i funkcje get_field() oraz the_field() w motywie.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Czy ACF dzia\u0142a z motywami klasycznymi i blokowymi (FSE)?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Tak, ACF radzi sobie z oboma typami motyw\u00f3w. W motywach klasycznych u\u017cywasz get_field() w plikach PHP (single.php, page.php). W motywach blokowych (FSE) si\u0119gasz po ACF Blocks (PRO) do tworzenia w\u0142asnych blok\u00f3w Gutenberga albo po wtyczk\u0119 Blocks for ACF Fields do wy\u015bwietlania p\u00f3l bez pisania kodu.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Co to jest Secure Custom Fields i czy musz\u0119 si\u0119 przesiada\u0107?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Secure Custom Fields (SCF) to fork ACF utrzymywany w ramach projektu WordPress.org, powsta\u0142y w 2024 roku w wyniku konfliktu Automattic kontra WP Engine. Przesiadka nie jest konieczna \u2014 oryginalny ACF wr\u00f3ci\u0142 do repozytorium po wyroku s\u0105du. Sprawd\u017a w Wtyczki, kt\u00f3r\u0105 wersj\u0119 masz zainstalowan\u0105. Je\u015bli widnieje Secure Custom Fields, dane s\u0105 zgodne z ACF, ale dalsze aktualizacje funkcji id\u0105 innym torem.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Jak\u0105 wersj\u0119 PHP zaleca si\u0119 dla ACF w 2026 roku?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"PHP 8.3 to bezpieczna rekomendacja dla produkcyjnej instalacji w 2026 roku. PHP 7.4 wystarczy formalnie (WordPress 7.0 wymaga 7.4 jako minimum), ale od listopada 2022 nie dostaje ju\u017c \u0142atek bezpiecze\u0144stwa. PHP 8.0 i 8.1 dzia\u0142aj\u0105 stabilnie z ACF 6.x \u2014 wybierz 8.3, je\u015bli hosting daje tak\u0105 opcj\u0119.\"\n      }\n    }\n  ]\n}\n<\/script>\n\n\n\n<!--TOC-DATA\n[\n  {\"id\":\"czym-sa-pola-wlasne-w-wordpress-i-dlaczego-natywny\",\"title\":\"Czym s\u0105 pola w\u0142asne w WordPress i dlaczego natywny mechanizm nie wystarcza?\"},\n  {\"id\":\"czym-jest-advanced-custom-fields-i-jak-rozszerza\",\"title\":\"Czym jest Advanced Custom Fields i jak rozszerza mo\u017cliwo\u015bci WordPressa?\"},\n  {\"id\":\"jakie-sa-wymagania-srodowiska-dla-acf-w-2026-roku\",\"title\":\"Jakie s\u0105 wymagania \u015brodowiska dla ACF w 2026 roku?\"},\n  {\"id\":\"jak-zainstalowac-i-aktywowac-acf-krok-po-kroku\",\"title\":\"Jak zainstalowa\u0107 i aktywowa\u0107 ACF krok po kroku?\"},\n  {\"id\":\"jak-utworzyc-pierwsza-grupe-pol-field-group-w-acf\",\"title\":\"Jak utworzy\u0107 pierwsz\u0105 grup\u0119 p\u00f3l (Field Group) w ACF?\"},\n  {\"id\":\"jak-wyswietlic-wartosci-pol-acf-w-motywie-wordpress\",\"title\":\"Jak wy\u015bwietli\u0107 warto\u015bci p\u00f3l ACF w motywie WordPress?\"},\n  {\"id\":\"jak-acf-integruje-sie-z-woocommerce-i-custom-post\",\"title\":\"Jak ACF integruje si\u0119 z WooCommerce i Custom Post Types?\"},\n  {\"id\":\"jakie-zaawansowane-funkcje-oferuje-acf-pro\",\"title\":\"Jakie zaawansowane funkcje oferuje ACF PRO?\"},\n  {\"id\":\"jakie-sa-najczestsze-bledy-poczatkujacych-i-jak-je\",\"title\":\"Jakie s\u0105 najcz\u0119stsze b\u0142\u0119dy pocz\u0105tkuj\u0105cych i jak je rozwi\u0105za\u0107?\"},\n  {\"id\":\"jakie-jest-podsumowanie-kluczowych-informacji\",\"title\":\"Jakie jest podsumowanie kluczowych informacji?\"},\n  {\"id\":\"jakie-sa-najczesciej-zadawane-pytania-faq\",\"title\":\"Jakie s\u0105 najcz\u0119\u015bciej zadawane pytania (FAQ)?\"}\n]\n-->\n","protected":false},"excerpt":{"rendered":"<p>Lesezeit: ca. 12 Minuten Schwierigkeitsgrad: Mittel Der WordPress-Editor beschr\u00e4nkt sich auf Titel, Inhalt und Beitragsbild. M\u00f6chten Sie einen Untertitel, einen Produktpreis oder ein Markenlogo hinzuf\u00fcgen, das einer Taxonomie zugeordnet ist? Anklickbare Optionen fehlen. Advanced Custom Fields l\u00f6st dieses Problem seit \u00fcber einem Jahrzehnt \u2013 \u00fcber 2 Millionen aktive Installationen auf WordPress.org sprechen f\u00fcr sich\u2026&nbsp;<a href=\"https:\/\/allkeystore.pl\/de\/acf-dla-poczatkujacych-kompletny-przewodnik-do-pol-wlasnych-w-wordpress-krok-po-kroku\/\" rel=\"bookmark\">Mehr lesen &quot;<span class=\"screen-reader-text\">ACF f\u00fcr Anf\u00e4nger: Eine vollst\u00e4ndige Schritt-f\u00fcr-Schritt-Anleitung zu benutzerdefinierten Feldern in WordPress<\/span><\/a><\/p>","protected":false},"author":22,"featured_media":113091,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"neve_meta_sidebar":"left","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":70,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"[\"title\",\"meta\",\"content\",\"tags\",\"comments\"]","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","neve_meta_reading_time":"","footnotes":""},"categories":[1537],"tags":[],"class_list":["post-113082","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"acf":[],"_links":{"self":[{"href":"https:\/\/allkeystore.pl\/de\/wp-json\/wp\/v2\/posts\/113082","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/allkeystore.pl\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/allkeystore.pl\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/allkeystore.pl\/de\/wp-json\/wp\/v2\/users\/22"}],"replies":[{"embeddable":true,"href":"https:\/\/allkeystore.pl\/de\/wp-json\/wp\/v2\/comments?post=113082"}],"version-history":[{"count":5,"href":"https:\/\/allkeystore.pl\/de\/wp-json\/wp\/v2\/posts\/113082\/revisions"}],"predecessor-version":[{"id":113089,"href":"https:\/\/allkeystore.pl\/de\/wp-json\/wp\/v2\/posts\/113082\/revisions\/113089"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/allkeystore.pl\/de\/wp-json\/wp\/v2\/media\/113091"}],"wp:attachment":[{"href":"https:\/\/allkeystore.pl\/de\/wp-json\/wp\/v2\/media?parent=113082"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/allkeystore.pl\/de\/wp-json\/wp\/v2\/categories?post=113082"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/allkeystore.pl\/de\/wp-json\/wp\/v2\/tags?post=113082"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}