{"id":233840,"date":"2023-02-23T17:44:00","date_gmt":"2023-02-23T14:44:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233840"},"modified":"2022-11-11T12:44:16","modified_gmt":"2022-11-11T09:44:16","slug":"taeydellinen-viite-tarkennettujen-mukautettujen-kenttaeryhmien-ja-kenttien-lisaeaemiseen-koodin-mukaan","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/taeydellinen-viite-tarkennettujen-mukautettujen-kenttaeryhmien-ja-kenttien-lisaeaemiseen-koodin-mukaan\/","title":{"rendered":"T\u00e4ydellinen viite tarkennettujen mukautettujen kentt\u00e4ryhmien ja kenttien lis\u00e4\u00e4miseen koodin mukaan"},"content":{"rendered":"\n<p><a href=\"https:\/\/www.advancedcustomfields.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Advanced Custom Fields<\/a> (ACF) -laajennus tukee t\u00e4ysin kenttien ja ryhmien m\u00e4\u00e4ritt\u00e4mist\u00e4 PHP-koodin mukaan teemassasi tai laajennuksessasi. T\u00e4m\u00e4n tekemisen etuna on, ett\u00e4 kaikki kent\u00e4si ovat k\u00e4ytett\u00e4viss\u00e4 riippumatta WordPress-esiintym\u00e4st\u00e4, jota k\u00e4yt\u00e4t (jos esimerkiksi sinun on vaihdettava paikallisen, testipalvelimen ja live-palvelimen v\u00e4lill\u00e4). Voit m\u00e4\u00e4ritt\u00e4\u00e4 kaikki kent\u00e4t ACF:n j\u00e4rjestelm\u00e4nvalvojassa ja vied\u00e4 ne PHP:hen vientity\u00f6kalulla.<\/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=\"T\u00e4ydellinen viite tarkennettujen mukautettujen kentt\u00e4ryhmien ja kenttien lis\u00e4\u00e4miseen koodin mukaan\" ><\/a><\/p>\n<p>Jos kuitenkin teet t\u00e4m\u00e4n usein, saatat huomata, ett\u00e4 ACF:n PHP-vienti sis\u00e4lt\u00e4\u00e4 paljon koodia, mik\u00e4 tekee PHP-tiedostoistasi tarpeettoman pitki\u00e4. Joissakin tapauksissa on parempi kirjoittaa koodi itse, v\u00e4himm\u00e4ism\u00e4\u00e4r\u00e4ll\u00e4, jotta teemasi tai laajennuksessasi olisi selke\u00e4mpi koodi. T\u00e4m\u00e4n oppaan tarkoituksena on tarjota sinulle t\u00e4ydellinen viite ACF-kenttien ja -ryhmien lis\u00e4\u00e4miseen PHP:ss\u00e4 manuaalisesti. Huomaa, ett\u00e4 siin\u00e4 ei k\u00e4sitell\u00e4 yksityiskohtaisesti jokaista kentt\u00e4tyyppi\u00e4, koska siin\u00e4 oletetaan, ett\u00e4 tunnet jo ACF:ss\u00e4 mahdolliset erilaiset kent\u00e4t.<\/p>\n<h2>Mutta ensin; joitain varotoimia<\/h2>\n<p>S\u00e4ilytt\u00e4\u00e4ksesi hyv\u00e4t koodistandardit ja varmistaaksesi, ett\u00e4 WordPress-sivustosi ei kaatuisi, sinun tulee aina tarkistaa, ovatko koodisi k\u00e4ytt\u00e4m\u00e4t toiminnot tai luokat todella olemassa. Varsinkin kun kyse on laajennuksista, jotka voidaan helposti poistaa k\u00e4yt\u00f6st\u00e4 tai joita ei edes asenneta sivustolle, sinun tulee aina k\u00e4\u00e4ri\u00e4 laajennuskohtainen koodisi if-testiin, joka tarkistaa, ovatko k\u00e4ytt\u00e4m\u00e4si toiminnot olemassa, ennen kuin k\u00e4yt\u00e4t niit\u00e4.<\/p>\n<p>ACF:n osalta voit tehd\u00e4 sen tarkistamalla, onko luokka <code>'acf'<\/code>olemassa tai onko kenttien ja ryhmien lis\u00e4ystoiminto, <code>'acf_add_local_field_group'<\/code>, olemassa. K\u00e4\u00e4ri jompikumpi n\u00e4ist\u00e4 alla olevan koodin ymp\u00e4rille.<\/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>Luurankokoodi<\/h2>\n<p>Metalaatikoiden (ryhmien) ja kenttien lis\u00e4\u00e4miseen k\u00e4yt\u00e4mme koukkua nimelt\u00e4 <code>acf\/init<\/code>. Funktion sis\u00e4ll\u00e4 kutsumme funktiota <code>acf_add_local_field_group()<\/code>, jonka parametrina on taulukko. T\u00e4m\u00e4n taulukon sis\u00e4ll\u00e4 on ryhm\u00e4n ja sen kaikkien kenttien t\u00e4ydellinen asennus. T\u00e4rkeimm\u00e4t ovat taulukkon\u00e4pp\u00e4imet <code>'fields'<\/code>ja <code>'location'<\/code>. Taulukkoavaimelle <code>'fields'<\/code>annat taulukon kaikille kentille ja avaimelle <code>'location'<\/code>m\u00e4\u00e4rit\u00e4t asetukset, miss\u00e4 metalaatikon pit\u00e4isi n\u00e4ky\u00e4. T\u00e4ss\u00e4 viestiss\u00e4 k\u00e4sitell\u00e4\u00e4n yksityiskohtaisesti, mit\u00e4 vaihtoehtoja sinulla on alla kullekin n\u00e4ist\u00e4.<\/p>\n<p>T\u00e4m\u00e4 on v\u00e4himm\u00e4isvaatimus ryhm\u00e4n lis\u00e4\u00e4miseksi kentti\u00e4 ja sijaintia lukuun ottamatta:<\/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>Jokainen ryhm\u00e4 tarvitsee yksil\u00f6llisen avaimen, mutta varsinaisella nimell\u00e4 ei ole paljoa v\u00e4li\u00e4 (meille). Jos lis\u00e4\u00e4t ryhmi\u00e4, \u00e4l\u00e4 unohda vaihtaa <code>'key'<\/code>kentt\u00e4\u00e4. Metalaatikon otsikko voidaan asettaa taulukon avainelementtiin, arvasit sen, <code>'title'<\/code>. Jos lis\u00e4\u00e4t useita metalaatikoita samaan paikkaan (esim. j\u00e4lkimuokkauksessa), voit hallita, mik\u00e4 tulee ensin antamalla eri numerot <code>'menu_order'<\/code>.<\/p>\n<p>Voit hallita metabox-suunnittelua antamalla jommankumman <code>default<\/code>ellerin <code>seamless<\/code>. <code>'style'<\/code>Uudella Gutenberg-editorilla t\u00e4ll\u00e4 on kuitenkin paljon v\u00e4hemm\u00e4n merkityst\u00e4. Sama koskee avainta <code>'position'<\/code>, jossa ennen vanhaan saattoi sijoittaa metalaatikon viestin sis\u00e4ll\u00f6n alle (<code>'normal'<\/code>), sivulle (<code>'side'<\/code>) tai heti viestin otsikon j\u00e4lkeen (<code>'acf_after_title'<\/code>).<\/p>\n<p>Hyv\u00e4 on! Sukellaan kahteen mielenkiintoisempaan taulukon elementtiin; alkaen sijainnista \u2013 joka m\u00e4\u00e4ritt\u00e4\u00e4, miss\u00e4 metalaatikko n\u00e4kyy.<\/p>\n<h2>Sijainti<\/h2>\n<p>T\u00e4m\u00e4 kaikki liittyy siihen, mit\u00e4 laitat avaimeen <code>'location'<\/code>. Mutta ennen kuin tarkastelemme mahdollisia vaihtoehtoja, meid\u00e4n on ymm\u00e4rrett\u00e4v\u00e4 sen taulukkorakenne.<\/p>\n<p><code>'location'<\/code>hyv\u00e4ksyy taulukon, jossa on joukko elementtej\u00e4! Kest\u00e4. Kyll\u00e4, koska on mahdollista tarjota ja yhdist\u00e4\u00e4 AND- ja OR-logiikka sijainnissa (esim. &quot;n\u00e4yt\u00e4 tekstin muokkauksessa, mutta ei, jos viestityyppi on &quot;kirja&quot; tai &quot;n\u00e4yt\u00e4 k\u00e4ytt\u00e4j\u00e4n muokkausn\u00e4yt\u00f6ss\u00e4 ja luo my\u00f6s uusi k\u00e4ytt\u00e4j\u00e4n\u00e4ytt\u00f6, mutta molemmissa tapauksissa ei, jos nykyinen rooli on tekij\u00e4). Tapa, jolla merkitset, onko se AND tai OR, on j\u00e4sent\u00e4\u00e4 taulukoita. Se on paljon helpompi n\u00e4ytt\u00e4\u00e4 kuin selitt\u00e4\u00e4 sanoin:<\/p>\n<p>N\u00e4in yhdist\u00e4t kaksi sijaintielementti\u00e4 JA-logiikalla (molempien on oltava tosia):<\/p>\n<pre><code>'location' =&gt; [\n    [\n        [\n            \/\/ location 1\n        ],\n        [\n            \/\/ location 2\n        ]\n    ]\n]<\/code><\/pre>\n<p>Ja t\u00e4m\u00e4 on tarkoitettu sijaintien yhdist\u00e4miseen OR-logiikalla (vain yhden t\u00e4ytyy olla totta):<\/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>N\u00e4etk\u00f6 eron?<\/p>\n<p>OK, jatketaan. Jokainen sijaintivaihtoehto koostuu kolmen elementin joukosta; <code>'param'<\/code>johon lis\u00e4\u00e4mme kaikki eri sijainnit, <code>'operator'<\/code>ja <code>'value'<\/code>. Operaattori on tapa verrata arvoa, ja se voi olla <code>'=='<\/code>yht\u00e4 suuri tai <code>'!='<\/code>ei yht\u00e4 suuri.<\/p>\n<p>K\u00e4yd\u00e4\u00e4n l\u00e4pi mahdolliset vaihtoehdot yksitellen.<\/p>\n<h3>Sijainti postityypin mukaan<\/h3>\n<pre><code>[\n    'param' =&gt; 'post_type',\n    'operator' =&gt; '==',\n    'value' =&gt; 'post'\n]<\/code><\/pre>\n<p>Aseta haluamasi viestityyppi <code>'value'<\/code>. Muista, ett\u00e4 et voi tarjota useiden viestityyppien joukkoa, vaan sinun on yhdistett\u00e4v\u00e4 useita n\u00e4ist\u00e4 taulukoista JA-kokoonpanossa.<\/p>\n<h3>Sijainti postin tilan mukaan<\/h3>\n<pre><code>[\n    'param' =&gt; 'post_status',\n    'operator' =&gt; '==',\n    'value' =&gt; 'publish'\n]<\/code><\/pre>\n<p>Aseta haluamasi viestin tilaksi <code>'value'<\/code>. Muista j\u00e4lleen, ett\u00e4 et voi antaa joukkoa useiden viestien tiloja, vaan sinun on annettava jokainen haluttu arvo JA- tai TAI-m\u00e4\u00e4rityksess\u00e4.<\/p>\n<h3>Sijainti sivumallin mukaan<\/h3>\n<pre><code>[\n    'param' =&gt; 'page_template',\n    'operator' =&gt; '==',\n    'value' =&gt; 'template-name.php'\n]<\/code><\/pre>\n<p>T\u00e4m\u00e4 n\u00e4kyy vain, jos valittu sivu (tai mukautettu viestityyppi, jossa on sivumallituki) on valinnut toimitetun sivumallin nimen.<\/p>\n<h3>Sijainti m\u00e4\u00e4ritetyn taksonomiatermin mukaan<\/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>T\u00e4m\u00e4 sijainti on tarkoitettu silloin, kun viestiin on m\u00e4\u00e4ritetty tietty termi. Sinun on annettava arvona taksonomian nimi, kaksoispiste ja termin etana.<\/p>\n<h3>Sijainti sivutyypin mukaan<\/h3>\n<p>ACF ryhmittelee sivujen erikoisominaisuudet sivutyypeiksi. Se koskee l\u00e4hinn\u00e4 sit\u00e4, onko nykyinen sivu yl\u00e4- tai alasivu, mutta my\u00f6s kohdistussivuille, jotka on asetettu WordPressin etusivuksi tai blogisivuksi.<\/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>Sijainti: taksonomia<\/h3>\n<p>Paikka, jossa termi\u00e4 muokataan tai lis\u00e4t\u00e4\u00e4n taksonomiaan.<\/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>Anna taksonomian nimi muodossa <code>'value'<\/code>. Muista, ett\u00e4 et voi tarjota joukkoa useita taksonomioita, mutta voit tarjota <code>'all'<\/code>kohdistaaksesi kaikki taksonomiat.<\/p>\n<h3>Sijainti: k\u00e4ytt\u00e4j\u00e4<\/h3>\n<p>T\u00e4m\u00e4 sijainti on tarkoitettu k\u00e4ytt\u00e4j\u00e4profiilin lis\u00e4\u00e4miseen tai muokkaamiseen.<\/p>\n<pre><code>[\n    'param' =&gt; 'user_form',\n    'operator' =&gt; '==',\n    'value' =&gt; 'all'  \/\/ 'edit' || 'register'\n]<\/code><\/pre>\n<p>Anna <code>'edit<\/code>&#8217;, jos haluat kohdistaa vain olemassa olevien k\u00e4ytt\u00e4jien muokkausn\u00e4ytt\u00f6\u00f6n, <code>'register'<\/code>kohdistaaksesi vain lomakkeeseen uuden k\u00e4ytt\u00e4j\u00e4n rekister\u00f6innin yhteydess\u00e4 tai &#8217; <code>all'<\/code>molemmille yll\u00e4 oleville.<\/p>\n<h3>Sijainti: valikkokohta<\/h3>\n<p>ACF 5.6:sta l\u00e4htien voit lis\u00e4t\u00e4 kentt\u00e4ryhmi\u00e4 my\u00f6s valikon kohtiin.<\/p>\n<pre><code>[\n    'param' =&gt; 'nav_menu_item',\n    'operator' =&gt; '==',\n    'value' =&gt; 'all'\n]<\/code><\/pre>\n<p>Voit m\u00e4\u00e4ritt\u00e4\u00e4 <code>value<\/code>k\u00e4ytt\u00e4m\u00e4\u00e4n <code>all<\/code>ryhm\u00e4\u00e4 kaikkiin valikon kohtiin tai voit m\u00e4\u00e4ritt\u00e4\u00e4 valikot joko sijainnin (teeman rekister\u00f6idyt sijainnit) tai valikkotunnuksen mukaan. Sijainnin k\u00e4ytt\u00f6\u00e4 varten <code>'location\/&lt;name&gt;'<\/code>\u2013 joten sijainnille, jonka nimi on &#8217; <code>primary<\/code>&#8217;, voit asettaa arvon k\u00e4ytt\u00e4m\u00e4\u00e4n <code>'location\/primary'<\/code>ryhm\u00e4\u00e4si vain t\u00e4lle sijainnille m\u00e4\u00e4ritettyyn valikkoon. Jos haluat kohdistaa tiettyyn valikon tunnukseen, aseta arvoksi kyseisen tunnuksen merkkijono.<\/p>\n<h3>Sijainti: widget<\/h3>\n<p>ACF tarjoaa jopa sijainnin widget-asetuksissa muuttamatta widgetin ydinkoodia.<\/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>Voit kohdistaa kaikkiin widgeteihin <code>'all'<\/code>nimell\u00e4 <code>'value'<\/code>tai kohdistaa tiettyyn widgetiin. Sinun on tiedett\u00e4v\u00e4 widgetin sis\u00e4inen tunnus, johon ne on rekister\u00f6ity.<\/p>\n<h3>Sijainti: ACF-asetukset-sivu (vain Pro)<\/h3>\n<p>ACF Pron avulla voit m\u00e4\u00e4ritt\u00e4\u00e4 mukautettuja j\u00e4rjestelm\u00e4nvalvojasivuja ACF:n avulla.<\/p>\n<pre><code>[\n    'param' =&gt; 'options_page',\n    'operator' =&gt; '==',\n    'value' =&gt; 'acf-options-myoptionspage'\n]<\/code><\/pre>\n<p>Anna nimi, jonka <code>acf_add_options_page<\/code>m\u00e4\u00e4ritit <code>menu_slug<\/code>nimell\u00e4 <code>'value'<\/code>.<\/p>\n<h3>Sijainti: lohko (vain Pro 5.8+)<\/h3>\n<p>ACF Prossa (5.8+) on ominaisuus Gutenberg-lohkojen lis\u00e4\u00e4miseen ACF:n kentill\u00e4 ja sen tuotoksen ohjaamiseen PHP:ll\u00e4. Melko n\u00e4pp\u00e4r\u00e4 niille, jotka eiv\u00e4t ole viel\u00e4 sukeltaneet mukautettujen Gutenberg-lohkojen ja vaaditun Javascriptin lis\u00e4\u00e4miseen.<\/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>Kent\u00e4t<\/h2>\n<p>Nyt p\u00e4\u00e4st\u00e4\u00e4n mielenkiintoisempaan osaan; itse kent\u00e4t. ACF tarjoaa (todella) laajan valikoiman kentt\u00e4tyyppej\u00e4, ja toistan; T\u00e4m\u00e4 opas ei n\u00e4yt\u00e4 sinulle, mit\u00e4 kukin kent\u00e4t ovat ja miten ne toimivat tai milt\u00e4 ne n\u00e4ytt\u00e4v\u00e4t.<\/p>\n<p>M\u00e4\u00e4ritt\u00e4m\u00e4ss\u00e4si ydintaulukossa annat <code>'fields'<\/code>taulukon <code>acf_add_local_field_group()<\/code>, jossa jokainen kentt\u00e4 on oma taulukkonsa.<\/p>\n<p>Jokaiselle kent\u00e4lle vaadittavat ehdot ovat seuraavat: yksil\u00f6llinen <code>'key'<\/code>, joka voi olla mit\u00e4 tahansa, ja sinun ei todenn\u00e4k\u00f6isesti tarvitse koskaan viitata siihen. Tarvitset my\u00f6s <code>'name'<\/code>, mik\u00e4 on (post, user, term) meta-avain, johon kent\u00e4n arvo tallennetaan \u2013 ja t\u00e4h\u00e4n viittaat kenttien arvoa hakiessasi. Sinun tulisi antaa a <code>'label'<\/code>ja lopuksi ratkaiseva seikka, <code>'type'<\/code>joka m\u00e4\u00e4ritt\u00e4\u00e4, mit\u00e4 kentt\u00e4tyyppi\u00e4 k\u00e4sittelemme. Loput kent\u00e4t riippuvat siit\u00e4, <code>'type'<\/code>kuten n\u00e4emme, kun k\u00e4ymme l\u00e4pi kunkin kentt\u00e4tyypin alla.<\/p>\n<p>T\u00e4m\u00e4 on runkokoodi kent\u00e4n lis\u00e4\u00e4mist\u00e4 varten.<\/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>Muista, ett\u00e4 tarvitset edell\u00e4 mainitun jokaiseen kentt\u00e4\u00e4n, mutta jotta sama koodi ei toistuisi, jokainen alla oleva kentt\u00e4tyyppi sis\u00e4lt\u00e4\u00e4 vain <code>'type'<\/code>ja kaikki muut kyseiselle kentt\u00e4tyypille tarvittavat elementit.<\/p>\n<h3>Kentt\u00e4: Tekstinsy\u00f6tt\u00f6<\/h3>\n<p>Yksinkertaisin kentt\u00e4 kaikista. Kaikki mit\u00e4 todella tarvitsemme on:<\/p>\n<pre><code>[\n    'type' =&gt; 'text',\n]<\/code><\/pre>\n<p>Mutta voit mukauttaa tekstinsy\u00f6tt\u00f6\u00e4si edelleen antamalla jonkin seuraavista:<\/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>Kentt\u00e4: Numeron sy\u00f6tt\u00f6<\/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>Kentt\u00e4: Textarea<\/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>Kentt\u00e4: Alueen liukus\u00e4\u00e4din<\/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>Kentt\u00e4: Salasana<\/h3>\n<p>Sama kuin tekstinsy\u00f6tt\u00f6, paitsi ett\u00e4 kaikki, mit\u00e4 kirjoitat siihen, peitet\u00e4\u00e4n *-merkill\u00e4, kuten voit odottaa salasanakent\u00e4ss\u00e4.<\/p>\n<pre><code>[\n    'type' =&gt; 'password',\n    'prepend' =&gt; 'Prepend text',\n    'append' =&gt; 'Appended text',\n]<\/code><\/pre>\n<h3>Kentt\u00e4: Kuva<\/h3>\n<p>Yhden kuvan valinta.<\/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>Kentt\u00e4: Tiedosto<\/h3>\n<p>Samanlainen kuin yll\u00e4 oleva kuva, paitsi ett\u00e4 se ei esikatsele tiedostoa.<\/p>\n<pre><code>[\n    'type' =&gt; 'file',\n    'return_format' =&gt; 'array',  \/\/ 'id' || 'url'\n]<\/code><\/pre>\n<p>Voit my\u00f6s antaa <code>'mime_types' =&gt; '',<\/code>ja asettaa sen esimerkiksi <code>'pdf,docx'<\/code>sallimaan vain PDF- ja DOCX-tiedostoja.<\/p>\n<h3>Kentt\u00e4: WYSIWYG-editori<\/h3>\n<p>WYSIWYG on &quot;What You See Is What You Get&quot; -editori \u2013 joka oli meille tuttu ennen Gutenbergin tuloa (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>Parametri <code>'media_upload'<\/code>ja <code>'delay'<\/code>voi olla 1 (tosi) tai 0 (ep\u00e4tosi).<\/p>\n<h3>Kentt\u00e4: Valitse<\/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>Kentt\u00e4: valintaruutu<\/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>Huomaa, ett\u00e4 <code>'default_value'<\/code>voi olla useita vaihtoehtoja.<\/p>\n<h3>Kentt\u00e4: Radiopainike<\/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>Tosi- asetus <code>'other_choice'<\/code>lis\u00e4\u00e4 ylim\u00e4\u00e4r\u00e4isen &quot;Muu&quot;-valintanapin, jossa on tekstisy\u00f6te, johon k\u00e4ytt\u00e4j\u00e4 voi kirjoittaa jotain.<\/p>\n<h3>Kentt\u00e4: tosi\/ep\u00e4tosi (vaihda)<\/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>Ja <code>'ui_on_text'<\/code>on <code>'ui_off_text'<\/code>voimassa vain, jos <code>'ui'<\/code>on 1, koska ne m\u00e4\u00e4rittelev\u00e4t, mit\u00e4 k\u00e4ytt\u00f6liittym\u00e4n erityisess\u00e4 vaihtokytkimess\u00e4 pit\u00e4isi n\u00e4ky\u00e4.<\/p>\n<h3>Kentt\u00e4: Linkki<\/h3>\n<p>Antaa sinulle painikkeen linkin sy\u00f6tt\u00e4miseen joko kirjoittamalla tai valitsemalla WordPress-sivustosi sis\u00e4ll\u00f6st\u00e4 (pit\u00e4isi olla tuttua linkin lis\u00e4\u00e4misest\u00e4 tavalliseen WordPress-editoriin).<\/p>\n<pre><code>[\n    'type' =&gt; 'link',\n    'return_format' =&gt; 'url',  \/\/ 'array'\n]<\/code><\/pre>\n<h3>Kentt\u00e4: Viestiobjekti<\/h3>\n<p>Antaa valintaruudun, jossa voit valita WordPress-sis\u00e4ll\u00f6st\u00e4. Valinnan avulla voit etsi\u00e4 kirjoittamalla ja kaikki sis\u00e4lt\u00f6 on jaettu viestityypin mukaan. Voit sallia valita useita julkaisuja tai vain yhden.<\/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>Kentt\u00e4: Suhde<\/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>Kentt\u00e4: Valitse taksonomian termit<\/h3>\n<p>Taksonomiatermivalitsimella on nelj\u00e4 erilaista &quot;tilaa&quot; tai tyyppi\u00e4, joista kaksi mahdollistaa useita valintoja.<\/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>Kentt\u00e4: Valitse k\u00e4ytt\u00e4j\u00e4<\/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>Kentt\u00e4: Google Maps<\/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>Muista, ett\u00e4 sinun on annettava kelvollinen GoogleMaps API -avain ACF:lle, jotta t\u00e4m\u00e4 kentt\u00e4 toimisi seuraavasti:<\/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>Kentt\u00e4: P\u00e4iv\u00e4m\u00e4\u00e4r\u00e4nvalitsin<\/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>Kentt\u00e4: P\u00e4iv\u00e4m\u00e4\u00e4r\u00e4 ja aika -valitsin<\/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>Kentt\u00e4: Aikavalitsin<\/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>Kentt\u00e4: Colorpicker<\/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>Kentt\u00e4: Galleria (vain 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>Erikoistyyppiset kent\u00e4t<\/h3>\n<p>ACF tarjoaa my\u00f6s joitain kentt\u00e4tyyppej\u00e4, jotka eiv\u00e4t sin\u00e4ns\u00e4 tallenna arvoa, mutta ne ovat enemm\u00e4n organisaation tarkoitusperi\u00e4 varten. Aseta kaikille n\u00e4ille <code>'name'<\/code>tyhj\u00e4ksi merkkijonoksi.<\/p>\n<h4>HTML-viesti<\/h4>\n<p>Jos sinun on yksinkertaisesti tulostettava HTML-koodia ilman, ett\u00e4 se tallentaa arvoa, voit k\u00e4ytt\u00e4\u00e4 tyyppi\u00e4 <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>Toistin (vain ACF Pro)<\/h4>\n<p>Toistin sis\u00e4lt\u00e4\u00e4 joukon kentti\u00e4, jotka voidaan toistaa.<\/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>Elementti <code>sub_fields<\/code>odottaa joukon kentti\u00e4, aivan kuten olet m\u00e4\u00e4ritt\u00e4nyt kent\u00e4t yll\u00e4.<\/p>\n<h2>Johtop\u00e4\u00e4t\u00f6s<\/h2>\n<p>T\u00e4m\u00e4 ei suinkaan ole tyhjent\u00e4v\u00e4 opas, koska ACF tarjoaa niin laajan valikoiman vaihtoehtoja ja mukautuksia. Mutta sen pit\u00e4isi kattaa eniten k\u00e4ytetyt vaihtoehdot ja mukautetut k\u00e4ytt\u00f6tapaukset. Itse huomaan viittaavani t\u00e4h\u00e4n melko usein, kun lis\u00e4\u00e4n ACF-kentti\u00e4 asiakkaille. Ja jopa mit\u00e4 kummallisimpiin vaihtoehtoihin t\u00e4m\u00e4 opas riitt\u00e4\u00e4, jotta minun ei tarvitse paisuttaa PHP-tiedostojani ACF:n vientikoodilla. Toivottavasti t\u00e4st\u00e4 oli hy\u00f6ty\u00e4 my\u00f6s sinulle!<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>T\u00e4ydellinen viittaus siihen, kuinka hienosti m\u00e4\u00e4ritet\u00e4\u00e4n Advanced Custom Fields -kent\u00e4t ja -ryhm\u00e4t PHP-koodin mukaan sen sijaan, ett\u00e4 liit\u00e4t paisuneen koodin ACF PHP -vientity\u00f6kalusta.<\/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":[895,719,719,895,813,1110,843,813,843,864,864],"tags":[1166],"class_list":["post-233840","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-koodi","category-kehittaejae","category-laajennuksia","category-n-a","category-opetusohjelmia","category-wordpress-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/233840","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/comments?post=233840"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/233840\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/224889"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=233840"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=233840"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=233840"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}