{"id":233800,"date":"2023-02-23T17:18:00","date_gmt":"2023-02-23T14:18:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233800"},"modified":"2022-11-11T12:29:50","modified_gmt":"2022-11-11T09:29:50","slug":"komplett-referens-foer-att-laegga-till-avancerade-anpassade-faeltgrupper-och-faelt-efter-kod","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/komplett-referens-foer-att-laegga-till-avancerade-anpassade-faeltgrupper-och-faelt-efter-kod\/","title":{"rendered":"Komplett referens f\u00f6r att l\u00e4gga till avancerade anpassade f\u00e4ltgrupper och f\u00e4lt efter kod"},"content":{"rendered":"\n<p>Insticksprogrammet <a href=\"https:\/\/www.advancedcustomfields.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Advanced Custom Fields<\/a> (ACF) st\u00f6der fullst\u00e4ndig inst\u00e4llning av f\u00e4lt och grupper efter PHP-kod i ditt tema eller plugin. F\u00f6rdelarna med att g\u00f6ra detta \u00e4r att alla dina f\u00e4lt kommer att vara tillg\u00e4ngliga oavsett vilken WordPress-instans du arbetar med (till exempel om du beh\u00f6ver v\u00e4xla mellan lokal, testserver och liveserver). Du kan st\u00e4lla in alla f\u00e4lt i ACF:s admin och anv\u00e4nda exportverktyget f\u00f6r att exportera det till 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=\"Komplett referens f\u00f6r att l\u00e4gga till avancerade anpassade f\u00e4ltgrupper och f\u00e4lt efter kod\" ><\/a><\/p>\n<p>Men om du g\u00f6r detta ofta kanske du m\u00e4rker att ACF:s PHP-export inneh\u00e5ller mycket kod som g\u00f6r dina PHP-filer on\u00f6digt l\u00e5nga. I vissa fall \u00e4r det b\u00e4ttre att skriva koden sj\u00e4lv, med det absoluta minimum som beh\u00f6vs, f\u00f6r renare kod i ditt tema eller plugin. Den h\u00e4r guiden syftar till att ge dig en fullst\u00e4ndig referens f\u00f6r hur du manuellt skriver ut l\u00e4gga till ACF-f\u00e4lt och grupper i PHP. Observera att det inte kommer att g\u00e5 in i detalj om varje f\u00e4lttyp eftersom det f\u00f6ruts\u00e4tter att du redan \u00e4r bekant med de olika f\u00e4lten som \u00e4r m\u00f6jliga i ACF.<\/p>\n<h2>Men f\u00f6rst; vissa f\u00f6rsiktighets\u00e5tg\u00e4rder<\/h2>\n<p>F\u00f6r att uppr\u00e4tth\u00e5lla bra kodstandarder och s\u00e4kerst\u00e4lla att din WordPress-webbplats inte kraschar b\u00f6r du alltid kontrollera om funktionerna eller klasserna som din kod anv\u00e4nder faktiskt existerar. Speciellt n\u00e4r det kommer till plugins som enkelt kan avaktiveras eller inte ens installeras p\u00e5 en sida b\u00f6r du alltid sl\u00e5 in din plugin-specifika kod i ett if-test som kontrollerar om funktionerna du anv\u00e4nder finns, innan du anv\u00e4nder dem.<\/p>\n<p>N\u00e4r det g\u00e4ller ACF kan du g\u00f6ra det genom att kontrollera om klassen <code>'acf'<\/code>finns eller om funktionen f\u00f6r att l\u00e4gga till f\u00e4lt och grupper, <code>'acf_add_local_field_group'<\/code>, finns. Linda n\u00e5gon av dem runt koden nedan.<\/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>Skelettkod<\/h2>\n<p>F\u00f6r att l\u00e4gga till metaboxar (grupper) och f\u00e4lt anv\u00e4nder vi kroken som heter <code>acf\/init<\/code>. Inuti funktionen anropar vi funktionen <code>acf_add_local_field_group()<\/code>med en array som parameter. Inuti den arrayen finns den fullst\u00e4ndiga inst\u00e4llningen f\u00f6r gruppen och alla dess f\u00e4lt. De viktigaste \u00e4r array-nycklarna <code>'fields'<\/code>och <code>'location'<\/code>. F\u00f6r arraynyckel <code>'fields'<\/code>anger du arrayen f\u00f6r alla f\u00e4lt, och f\u00f6r nyckeln <code>'location'<\/code>anger du inst\u00e4llningarna f\u00f6r var metaboxen ska visas. Det h\u00e4r inl\u00e4gget kommer att g\u00e5 in i detalj om vilka m\u00f6jliga alternativ du har f\u00f6r var och en av dessa nedan.<\/p>\n<p>Detta \u00e4r det absoluta minimum f\u00f6r att l\u00e4gga till en grupp, f\u00f6rutom f\u00e4lten och platsen:<\/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>Varje grupp beh\u00f6ver en unik nyckel, men sj\u00e4lva namnet spelar inte s\u00e5 stor roll (f\u00f6r oss). Om du l\u00e4gger till fler grupper, gl\u00f6m inte att \u00e4ndra <code>'key'<\/code>f\u00e4ltet. Metabox-titeln kan st\u00e4llas in i array-nyckelelementet, du gissade r\u00e4tt, <code>'title'<\/code>. Om du l\u00e4gger till flera metaboxar p\u00e5 samma plats (t.ex. i postredigering), kan du styra vilken som kommer f\u00f6rst genom att ange olika nummer i <code>'menu_order'<\/code>.<\/p>\n<p>Du kan styra metabox-designen genom att tillhandah\u00e5lla antingen <code>default<\/code>eller <code>seamless<\/code>i <code>'style'<\/code>. Men med den nya Gutenberg-redakt\u00f6ren har detta en mycket mindre betydelse. Detsamma g\u00e4ller nyckeln <code>'position'<\/code>d\u00e4r man f\u00f6rr i tiden kunde placera metaboxen under inl\u00e4ggets inneh\u00e5ll (<code>'normal'<\/code>), p\u00e5 sidan (<code>'side'<\/code>) eller direkt efter inl\u00e4ggets titel (<code>'acf_after_title'<\/code>).<\/p>\n<p>OK! L\u00e5t oss dyka in i de tv\u00e5 mer intressanta delarna av arrayen; b\u00f6rjar med platsen \u2013 som definierar var metaboxen visas.<\/p>\n<h2>Plats<\/h2>\n<p>Det h\u00e4r handlar om vad du l\u00e4gger i nyckeln <code>'location'<\/code>. Men innan vi unders\u00f6ker de m\u00f6jliga alternativen m\u00e5ste vi f\u00f6rst\u00e5 dess arraystruktur.<\/p>\n<p><code>'location'<\/code>accepterar en array med en array av element i en array! V\u00e4nta. Ja, eftersom det \u00e4r m\u00f6jligt att tillhandah\u00e5lla och kombinera OCH- och ELLER-logik p\u00e5 plats (t.ex. &quot;visa i postredigering men inte om inl\u00e4ggstypen \u00e4r &#8217;bok&#8217;&quot;, eller &quot;visa i anv\u00e4ndarredigeringssk\u00e4rm och \u00e4ven skapa ny anv\u00e4ndarsk\u00e4rm men f\u00f6r b\u00e5da fallen inte om den nuvarande rollen \u00e4r f\u00f6rfattare&quot;). S\u00e4ttet du betecknar om det \u00e4r ett OCH eller ett ELLER \u00e4r genom att strukturera arrayerna. Det \u00e4r mycket l\u00e4ttare att visa \u00e4n att f\u00f6rklara med ord:<\/p>\n<p>S\u00e5 h\u00e4r kombinerar du tv\u00e5 platselement med OCH-logik (b\u00e5da dessa m\u00e5ste vara sanna):<\/p>\n<pre><code>'location' =&gt; [\n    [\n        [\n            \/\/ location 1\n        ],\n        [\n            \/\/ location 2\n        ]\n    ]\n]<\/code><\/pre>\n<p>Och det h\u00e4r \u00e4r f\u00f6r att kombinera platser med ELLER-logik (bara en beh\u00f6ver vara sann):<\/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>Se skillnaden?<\/p>\n<p>Okej, l\u00e5t oss g\u00e5 vidare. Varje platsalternativ best\u00e5r av en upps\u00e4ttning av tre element; <code>'param'<\/code>det \u00e4r d\u00e4r vi l\u00e4gger till alla olika platser, <code>'operator'<\/code>, och <code>'value'<\/code>. Operat\u00f6r \u00e4r hur man j\u00e4mf\u00f6r v\u00e4rdet, och det kan vara <code>'=='<\/code>f\u00f6r lika med eller <code>'!='<\/code>f\u00f6r inte lika med.<\/p>\n<p>L\u00e5t oss g\u00e5 igenom de m\u00f6jliga alternativen en efter en.<\/p>\n<h3>Plats efter posttyp<\/h3>\n<pre><code>[\n    'param' =&gt; 'post_type',\n    'operator' =&gt; '==',\n    'value' =&gt; 'post'\n]<\/code><\/pre>\n<p>St\u00e4ll in \u00f6nskad inl\u00e4ggstyp i <code>'value'<\/code>. T\u00e4nk p\u00e5 att du inte kan tillhandah\u00e5lla en array med flera inl\u00e4ggstyper, du m\u00e5ste kombinera flera av dessa arrayer i en AND-konfiguration.<\/p>\n<h3>Plats efter poststatus<\/h3>\n<pre><code>[\n    'param' =&gt; 'post_status',\n    'operator' =&gt; '==',\n    'value' =&gt; 'publish'\n]<\/code><\/pre>\n<p>St\u00e4ll in \u00f6nskad poststatus som <code>'value'<\/code>. \u00c5terigen, kom ih\u00e5g att du inte kan tillhandah\u00e5lla en upps\u00e4ttning av flera inl\u00e4ggsstatusar, du m\u00e5ste ange varje \u00f6nskat v\u00e4rde i en OCH- eller ELLER-konfiguration.<\/p>\n<h3>Plats efter sidmall<\/h3>\n<pre><code>[\n    'param' =&gt; 'page_template',\n    'operator' =&gt; '==',\n    'value' =&gt; 'template-name.php'\n]<\/code><\/pre>\n<p>Detta visas endast om den valda sidan (eller anpassad inl\u00e4ggstyp med st\u00f6d f\u00f6r sidmall) har valt det angivna sidmallsnamnet.<\/p>\n<h3>Plats efter tilldelad taxonomiterm<\/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>Den h\u00e4r platsen \u00e4r till f\u00f6r n\u00e4r ett inl\u00e4gg har en specifik term tilldelad. Du m\u00e5ste ange taxonominamnet, ett kolon och termens snigel som v\u00e4rde.<\/p>\n<h3>Plats efter sidtyp<\/h3>\n<p>ACF grupperar speciella egenskaper f\u00f6r sidor som &quot;sidtyp&quot;. Det handlar mest om huruvida den aktuella sidan \u00e4r en f\u00f6r\u00e4lder- eller barnsida eller inte, men ocks\u00e5 f\u00f6r inriktning p\u00e5 sidor som \u00e4r inst\u00e4llda som WordPress-startsida eller bloggsida.<\/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>Plats: taxonomi<\/h3>\n<p>En plats f\u00f6r n\u00e4r man redigerar eller l\u00e4gger till en term i en taxonomi.<\/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>Ange taxonominamnet som <code>'value'<\/code>. T\u00e4nk p\u00e5 att du inte kan tillhandah\u00e5lla en upps\u00e4ttning av flera taxonomier, men du kan tillhandah\u00e5lla <code>'all'<\/code>f\u00f6r att rikta in dig p\u00e5 alla taxonomier.<\/p>\n<h3>Plats: anv\u00e4ndare<\/h3>\n<p>Denna plats \u00e4r till f\u00f6r att l\u00e4gga till eller redigera en anv\u00e4ndarprofil.<\/p>\n<pre><code>[\n    'param' =&gt; 'user_form',\n    'operator' =&gt; '==',\n    'value' =&gt; 'all'  \/\/ 'edit' || 'register'\n]<\/code><\/pre>\n<p>Ange <code>'edit<\/code>&#8217; f\u00f6r att endast rikta in sig p\u00e5 sk\u00e4rmen f\u00f6r redigering av befintliga anv\u00e4ndare, <code>'register'<\/code>f\u00f6r att endast rikta in formul\u00e4ret n\u00e4r du registrerar en ny anv\u00e4ndare, eller &#8217; <code>all'<\/code>f\u00f6r b\u00e5da ovanst\u00e5ende.<\/p>\n<h3>Plats: menyalternativ<\/h3>\n<p>Sedan ACF 5.6 kan du ocks\u00e5 l\u00e4gga till f\u00e4ltgrupper till menyalternativ.<\/p>\n<pre><code>[\n    'param' =&gt; 'nav_menu_item',\n    'operator' =&gt; '==',\n    'value' =&gt; 'all'\n]<\/code><\/pre>\n<p>Du kan st\u00e4lla <code>value<\/code>in f\u00f6r <code>all<\/code>att till\u00e4mpa gruppen p\u00e5 alla menyalternativ, eller s\u00e5 kan du ange menyer antingen efter plats (registrerade platser i ditt tema) eller efter meny-ID. F\u00f6r platsanv\u00e4ndning <code>'location\/&lt;name&gt;'<\/code>\u2013 s\u00e5 f\u00f6r en plats som heter &#8217; <code>primary<\/code>&#8217; kan du st\u00e4lla in v\u00e4rdet till <code>'location\/primary'<\/code>f\u00f6r att till\u00e4mpa din grupp p\u00e5 en meny som endast \u00e4r tilldelad denna plats. Om du vill rikta in dig p\u00e5 ett specifikt meny-ID, st\u00e4ll in v\u00e4rdet p\u00e5 en str\u00e4ng av det ID:t.<\/p>\n<h3>Plats: widget<\/h3>\n<p>ACF ger dig till och med en plats i widgetinst\u00e4llningarna utan att \u00e4ndra widgetens k\u00e4rnkod.<\/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>Du kan rikta in dig p\u00e5 alla widgetar med <code>'all'<\/code>som <code>'value'<\/code>eller rikta in dig p\u00e5 en specifik widget. Du m\u00e5ste k\u00e4nna till det &quot;interna ID&quot; f\u00f6r widgeten som de \u00e4r registrerade med.<\/p>\n<h3>Plats: ACF-alternativsida (endast Pro)<\/h3>\n<p>Med ACF Pro kan du anv\u00e4nda ACF f\u00f6r att skapa anpassade adminsidor.<\/p>\n<pre><code>[\n    'param' =&gt; 'options_page',\n    'operator' =&gt; '==',\n    'value' =&gt; 'acf-options-myoptionspage'\n]<\/code><\/pre>\n<p>Ange namnet du st\u00e4llt <code>acf_add_options_page<\/code>in <code>menu_slug<\/code>som <code>'value'<\/code>.<\/p>\n<h3>Plats: block (endast Pro 5.8+)<\/h3>\n<p>ACF Pro (5.8+) har en funktion f\u00f6r att l\u00e4gga till Gutenberg-block med f\u00e4lt fr\u00e5n ACF och styra dess utdata med PHP. Ganska snyggt f\u00f6r dem som inte har dykt in i att l\u00e4gga till anpassade Gutenberg-block och det n\u00f6dv\u00e4ndiga Javascriptet \u00e4nnu.<\/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>F\u00e4lt<\/h2>\n<p>Nu kommer vi in \u200b\u200bp\u00e5 den mer intressanta delen; sj\u00e4lva f\u00e4lten. ACF erbjuder ett (riktigt) brett utbud av f\u00e4lttyper, och jag upprepar; den h\u00e4r guiden visar dig inte vad varje f\u00e4lt \u00e4r och hur de fungerar eller ser ut.<\/p>\n<p>I k\u00e4rnmatrisen du tillhandah\u00e5ller tillhandah\u00e5ller <code>'fields'<\/code>du <code>acf_add_local_field_group()<\/code>en matris d\u00e4r varje f\u00e4lt \u00e4r sin egen matris.<\/p>\n<p>Det absoluta minimum som kr\u00e4vs f\u00f6r varje f\u00e4lt \u00e4r f\u00f6ljande: ett unikt <code>'key'<\/code>som kan vara vad du vill och du kommer f\u00f6rmodligen aldrig beh\u00f6va h\u00e4nvisa till det. Du beh\u00f6ver ocks\u00e5 <code>'name'<\/code>vilken som \u00e4r meta-nyckeln (inl\u00e4gg, anv\u00e4ndare, term) d\u00e4r v\u00e4rdet p\u00e5 f\u00e4ltet sparas som \u2013 och det \u00e4r den du kommer att referera till n\u00e4r du f\u00e5r v\u00e4rdet p\u00e5 f\u00e4lten. Du b\u00f6r ge ett <code>'label'<\/code>och slutligen det avg\u00f6rande <code>'type'<\/code>som definierar vilken f\u00e4lttyp vi hanterar. Resten av f\u00e4lten beror p\u00e5 <code>'type'<\/code>som vi kommer att se n\u00e4r vi g\u00e5r igenom varje f\u00e4lttyp nedan.<\/p>\n<p>Detta \u00e4r skelettkoden f\u00f6r att l\u00e4gga till ett f\u00e4lt.<\/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>T\u00e4nk p\u00e5 att du beh\u00f6ver ovanst\u00e5ende f\u00f6r varje f\u00e4lt, men f\u00f6r att inte upprepa samma kod kommer varje f\u00e4lttyp nedan endast att inkludera <code>'type'<\/code>och alla andra element som beh\u00f6vs f\u00f6r den f\u00e4lttypen.<\/p>\n<h3>F\u00e4lt: Textinmatning<\/h3>\n<p>Det enklaste f\u00e4ltet av alla. Allt vi egentligen beh\u00f6ver \u00e4r:<\/p>\n<pre><code>[\n    'type' =&gt; 'text',\n]<\/code><\/pre>\n<p>Men f\u00f6r att ytterligare anpassa din textinmatning kan du ocks\u00e5 tillhandah\u00e5lla n\u00e5got av f\u00f6ljande:<\/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>F\u00e4lt: Nummerinmatning<\/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>F\u00e4lt: 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>F\u00e4lt: R\u00e4ckviddsreglage<\/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>F\u00e4lt: L\u00f6senord<\/h3>\n<p>Samma som textinmatning, f\u00f6rutom att allt du skriver i den kommer att t\u00e4ckas med * som du kan f\u00f6rv\u00e4nta dig i ett l\u00f6senordsf\u00e4lt.<\/p>\n<pre><code>[\n    'type' =&gt; 'password',\n    'prepend' =&gt; 'Prepend text',\n    'append' =&gt; 'Appended text',\n]<\/code><\/pre>\n<h3>F\u00e4lt: Bild<\/h3>\n<p>V\u00e4lj en bild.<\/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>F\u00e4lt: Fil<\/h3>\n<p>Liknar bilden ovan, f\u00f6rutom att den inte f\u00f6rhandsgranskar filen.<\/p>\n<pre><code>[\n    'type' =&gt; 'file',\n    'return_format' =&gt; 'array',  \/\/ 'id' || 'url'\n]<\/code><\/pre>\n<p>Du kan ocks\u00e5 tillhandah\u00e5lla <code>'mime_types' =&gt; '',<\/code>och st\u00e4lla in den till att t.ex. <code>'pdf,docx'<\/code>endast till\u00e5ta PDF- och DOCX-filer.<\/p>\n<h3>F\u00e4lt: WYSIWYG Editor<\/h3>\n<p>WYSIWYG \u00e4r en &quot;What You See Is What You Get&quot;-redakt\u00f6r \u2013 den vi var bekanta med innan Gutenberg kom (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>Parametern <code>'media_upload'<\/code>och <code>'delay'<\/code>kan vara 1 (sant) eller 0 (falskt).<\/p>\n<h3>F\u00e4lt: V\u00e4lj<\/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>F\u00e4lt: Kryssruta<\/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>Observera att det <code>'default_value'<\/code>kan vara en rad med flera val.<\/p>\n<h3>F\u00e4lt: Radioknapp<\/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>Inst\u00e4llningen <code>'other_choice'<\/code>till true l\u00e4gger till en extra alternativknapp m\u00e4rkt &quot;\u00d6vrigt&quot; med en textinmatning d\u00e4r anv\u00e4ndaren kan skriva n\u00e5got.<\/p>\n<h3>F\u00e4lt: Sant\/falskt (v\u00e4xla)<\/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><code>'ui_on_text'<\/code>och <code>'ui_off_text'<\/code>\u00e4r bara giltig om \u00e4r 1, eftersom de <code>'ui'<\/code>definierar vad som ska visas p\u00e5 den speciella UI-v\u00e4xeln.<\/p>\n<h3>F\u00e4lt: L\u00e4nk<\/h3>\n<p>Ger dig en knapp f\u00f6r att ange en l\u00e4nk, antingen genom att skriva eller v\u00e4lja fr\u00e5n inneh\u00e5ll p\u00e5 din WordPress-webbplats (b\u00f6r vara bekant fr\u00e5n att l\u00e4gga till en l\u00e4nk i den vanliga WordPress-redigeraren).<\/p>\n<pre><code>[\n    'type' =&gt; 'link',\n    'return_format' =&gt; 'url',  \/\/ 'array'\n]<\/code><\/pre>\n<h3>F\u00e4lt: Post Object<\/h3>\n<p>Ger en valruta d\u00e4r du kan v\u00e4lja bland WordPress-inneh\u00e5ll. Select l\u00e5ter dig s\u00f6ka genom att skriva in och allt inneh\u00e5ll \u00e4r uppdelat efter inl\u00e4ggstyp. Du kan till\u00e5ta att flera inl\u00e4gg v\u00e4ljs eller bara ett.<\/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>F\u00e4lt: Relation<\/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>F\u00e4lt: V\u00e4lj termer i en taxonomi<\/h3>\n<p>Taxonomy term selector har fyra olika &quot;l\u00e4gen&quot; eller typer d\u00e4r tv\u00e5 av dem till\u00e5ter flera val.<\/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>F\u00e4lt: V\u00e4lj anv\u00e4ndare<\/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>F\u00e4lt: 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>T\u00e4nk p\u00e5 att du m\u00e5ste tillhandah\u00e5lla en giltig GoogleMaps API-nyckel till ACF f\u00f6r att det h\u00e4r f\u00e4ltet ska fungera, s\u00e5 h\u00e4r:<\/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>F\u00e4lt: Datumv\u00e4ljare<\/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>F\u00e4lt: V\u00e4ljare f\u00f6r datum och tid<\/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>F\u00e4lt: Tidsv\u00e4ljare<\/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>F\u00e4lt: 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>F\u00e4lt: Galleri (endast 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>Specialtyper av f\u00e4lt<\/h3>\n<p>ACF erbjuder ocks\u00e5 vissa f\u00e4lttyper som inte sparar ett v\u00e4rde i sig, men de \u00e4r mer f\u00f6r organisatoriska \u00e4ndam\u00e5l. F\u00f6r alla dessa st\u00e4lls <code>'name'<\/code>in p\u00e5 en tom str\u00e4ng.<\/p>\n<h4>HTML-meddelande<\/h4>\n<p>Om du bara beh\u00f6ver skriva ut lite HTML utan att det faktiskt sparar ett v\u00e4rde kan du anv\u00e4nda typ <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>Repeater (endast ACF Pro)<\/h4>\n<p>En repeater inneh\u00e5ller en rad f\u00e4lt som kan upprepas.<\/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>Elementet <code>sub_fields<\/code>f\u00f6rv\u00e4ntar sig en array av f\u00e4lt, precis som du har st\u00e4llt in f\u00e4lt ovan.<\/p>\n<h2>Slutsats<\/h2>\n<p>Detta \u00e4r inte p\u00e5 n\u00e5got s\u00e4tt en utt\u00f6mmande guide eftersom ACF erbjuder ett s\u00e5 brett utbud av alternativ och anpassningar. Men det b\u00f6r t\u00e4cka de mest anv\u00e4nda alternativen och anpassade anv\u00e4ndningsfall. Personligen kommer jag p\u00e5 mig sj\u00e4lv att h\u00e4nvisa till detta ganska ofta n\u00e4r jag l\u00e4gger till ACF-f\u00e4lt f\u00f6r klienter. Och \u00e4ven f\u00f6r de mest konstiga alternativen \u00e4r den h\u00e4r guiden tillr\u00e4cklig nog s\u00e5 att jag inte beh\u00f6ver bl\u00e5sa upp mina PHP-filer med ACF:s exportkod. Jag hoppas att detta har varit anv\u00e4ndbart f\u00f6r dig ocks\u00e5!<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En fullst\u00e4ndig referens i hur man snyggt st\u00e4ller in avancerade anpassade f\u00e4lt-f\u00e4lt och grupper efter PHP-kod ist\u00e4llet f\u00f6r att klistra in uppsv\u00e4lld kod fr\u00e5n ACF PHP-exportverktyget.<\/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":[901,724,848,901,1110,818,818,848,724,868,868],"tags":[1173],"class_list":{"0":"post-233800","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-koda","8":"category-utvecklaren","9":"category-handledningar","11":"category-n-a","12":"category-plugins-3","16":"category-wordpress-9","18":"tag-affiai-sv"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/233800","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=233800"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/233800\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/224889"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=233800"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=233800"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=233800"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}