{"id":233467,"date":"2023-02-15T13:50:00","date_gmt":"2023-02-15T10:50:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233467"},"modified":"2022-11-10T23:50:48","modified_gmt":"2022-11-10T20:50:48","slug":"hur-man-laegger-till-anpassade-instaellningar-till-en-befintlig-widget-i-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/hur-man-laegger-till-anpassade-instaellningar-till-en-befintlig-widget-i-wordpress\/","title":{"rendered":"Hur man l\u00e4gger till anpassade inst\u00e4llningar till en befintlig widget i WordPress"},"content":{"rendered":"\n<p>I det h\u00e4r inl\u00e4gget kommer vi att l\u00e4ra oss hur du l\u00e4gger till din anpassade HTML och inst\u00e4llningar till n\u00e5gon av WordPresss standardwidgets eller andra. Genom att anv\u00e4nda dessa inst\u00e4llningar kommer vi att l\u00e4ra oss olika knep f\u00f6r att manipulera widgetarnas beteende d\u00e4refter.<\/p>\n<p>Den f\u00f6rsta delen; att l\u00e4gga till och spara dina anpassade inst\u00e4llningar \u00e4r ganska enkelt. Den andra delen beror p\u00e5 vad du specifikt vill g\u00f6ra, och det beror p\u00e5 vilken widget du manipulerar. I det h\u00e4r inl\u00e4gget har jag tagit med tv\u00e5 exempel; hoppa \u00f6ver en widget beroende p\u00e5 en inst\u00e4llning (f\u00f6r att l\u00e4gga till inst\u00e4llningar f\u00f6r att kontrollera widgetens synlighet i vissa fall), och manipulera WordPress Navigation-widgetens menyargument. Exemplet som ges f\u00f6r den andra delen borde ge dig en bra ledtr\u00e5d i hur du kan hantera det du vill g\u00f6ra.<\/p>\n<h2>L\u00e4gga till anpassade inst\u00e4llningar till valfri widget<\/h2>\n<p>F\u00f6r att l\u00e4gga till anpassade inst\u00e4llningar till befintliga widgets anv\u00e4nder vi en \u00e5tg\u00e4rd som heter <code>[in_widget_form](https:\/\/developer.wordpress.org\/reference\/hooks\/in_widget_form\/)<\/code>. Den h\u00e4r \u00e5tg\u00e4rden till\u00e4mpas p\u00e5 alla widgets <code>form()<\/code>funktion, vilket \u00e4r den funktion som ansvarar f\u00f6r att rendera administrat\u00f6rsdelen av widgeten.<\/p>\n<p>Med det filtret f\u00e5r vi tre parametrar men vi \u00e4r egentligen bara intresserade av den f\u00f6rsta och den tredje. Den f\u00f6rsta \u00e4r widgetinstansen som vi kommer att anv\u00e4nda f\u00f6r att h\u00e4mta korrekta f\u00e4ltnamn och ID:n och (valfritt) kontrollera vilken typ av widget vi \u00e4r anslutna till. Den tredje parametern \u00e4r en upps\u00e4ttning av widgetens sparade inst\u00e4llningar, som vi m\u00e5ste anv\u00e4nda f\u00f6r att kontrollera det tidigare sparade tillst\u00e5ndet f\u00f6r v\u00e5ra inst\u00e4llningar.<\/p>\n<p>Koden nedan kommer att l\u00e4gga till en kryssruta med inst\u00e4llningsnamnet &#8217; <code>awp-custom-setting<\/code>&#8217;. Justera namnet och HTML-koden till vilken input du beh\u00f6ver. Det som \u00e4r viktigt \u00e4r att anv\u00e4nda <code>$widget-&gt;get_field_name()<\/code>f\u00f6r att l\u00e4gga till korrekta ID:n och <code>name<\/code>attribut till alla dina indata. V\u00e4rdet p\u00e5 dina inmatningar ska fyllas i med det som har sparats tidigare, och det \u00e4r n\u00e5got du hittar i parametern <code>$instance<\/code>. F\u00f6r kryssrutor kan du anv\u00e4nda WordPress-funktionen <code>[checked](https:\/\/developer.wordpress.org\/reference\/functions\/checked\/)()<\/code>f\u00f6r att mata ut det markerade attributet.<\/p>\n<pre><code>add_action('in_widget_form', function($widget, $return, $instance) {\n    ?&gt;\n    &lt;p&gt;\n        &lt;input type=\"checkbox\" class=\"checkbox\" name=\"&lt;?php echo $widget-&gt;get_field_name('awp-custom-setting'); ?&gt;\" id=\"&lt;?php echo $widget-&gt;get_field_name('awp-custom-setting'); ?&gt;\" &lt;?php checked(isset($instance['awp-custom-setting'])? $instance['awp-custom-setting']: 0); ?&gt; \/&gt;\n        &lt;label for=\"&lt;?php echo $widget-&gt;get_field_name('awp-custom-setting'); ?&gt;\"&gt;&lt;?php __('Activate something', 'txtdomain'); ?&gt;&lt;\/label&gt;\n    &lt;\/p&gt;\n    &lt;?php\n}, 10, 3);<\/code><\/pre>\n<p>Efter att ha lagt till detta i ditt tema <code>functions.php<\/code>eller plugin-kod, b\u00f6r alla widgets nu f\u00e5 en kryssruta i slutet av formul\u00e4ret i admin.<\/p>\n<h3>Rikta in specifika widgets<\/h3>\n<p>Om du bara vill till\u00e4mpa dina inst\u00e4llningar p\u00e5 en eller n\u00e5gra specifika widgets kan du j\u00e4mf\u00f6ra egenskapen <code>id_base<\/code>i <code>$widget<\/code>objektet. Du m\u00e5ste veta bas-ID:t \u00e4r \u2013 om du \u00e4r os\u00e4ker g\u00f6r du helt enkelt en <code>var_dump($widget-&gt;id_base)<\/code>insida i kroken, sparar och kontrollerar utdata f\u00f6r varje widget i admin. Till exempel har navigeringswidgeten ID-basen <code>nav_menu<\/code>och arkivwidgeten har <code>archives<\/code>.<\/p>\n<p>I exemplet nedan kontrollerar vi om widgeten \u00e4r en navigationswidget. Om den inte \u00e4r det avbryts funktionen med en <code>return<\/code>. Endast navigationswidgetar f\u00e5r den anpassade kryssrutan:<\/p>\n<pre><code>add_action('in_widget_form', function($widget, $return, $instance) {\n    if ($widget-&gt;id_base != 'nav_menu') {\n        return;\n    }\n\u00a0\n    ?&gt;\n    &lt;p&gt;\n    ...<\/code><\/pre>\n<p>Du b\u00f6r f\u00e5 inst\u00e4llningen i admin s\u00e5 h\u00e4r:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153158-61e509045fded.png\" data-rel=\"lightbox\" ><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153158-61e509045fded.png\" alt=\"Hur man l\u00e4gger till anpassade inst\u00e4llningar till en befintlig widget i WordPress\" ><\/a><\/p>\n<p>S\u00e5 inst\u00e4llningen har lagts till, men f\u00f6r tillf\u00e4llet sparas inte dina inst\u00e4llningar. L\u00e5t oss fixa det.<\/p>\n<h2>Sparar dina anpassade inst\u00e4llningar<\/h2>\n<p>Vi m\u00e5ste koppla in widgetens <code>update()<\/code>funktion f\u00f6r att uppdatera v\u00e5ra anpassade inst\u00e4llningar.<\/p>\n<p>F\u00f6r detta anv\u00e4nder vi filtret <code>[widget_update_callback](https:\/\/developer.wordpress.org\/reference\/hooks\/widget_update_callback\/)<\/code>. Processen att spara v\u00e5ra inst\u00e4llningar \u00e4r precis som du skulle g\u00f6ra n\u00e4r du skriver en widgetklass. Filtret tillhandah\u00e5ller tre parametrar; den f\u00f6rsta \u00e4r instansarrayen som kommer att sparas. Den andra parametern \u00e4r tillst\u00e5ndet som har lagts upp n\u00e4r widgeten sparades, och den tredje \u00e4r det gamla tillst\u00e5ndet. Vi m\u00e5ste se till att h\u00e4mta v\u00e5ra nya v\u00e4rden fr\u00e5n den andra parametern och l\u00e4gga till dem i den f\u00f6rsta.<\/p>\n<p>S\u00e5 h\u00e4r skulle vi uppdatera statusen f\u00f6r v\u00e5r kryssruta; som vi vill spara ett <code>true<\/code>eller <code>false<\/code>v\u00e4rde:<\/p>\n<pre><code>add_filter('widget_update_callback', function($instance, $new_instance, $old_instance) {\n    $instance['awp-custom-setting'] = isset($new_instance['awp-custom-setting']);\n    return $instance;\n}, 10, 3);<\/code><\/pre>\n<p>Kom ih\u00e5g att justera ing\u00e5ngsnamnen till dina egna inst\u00e4llningsnamn. Om du l\u00e4gger till flera ing\u00e5ngar m\u00e5ste du upprepa detta f\u00f6r varje.<\/p>\n<p>Nu b\u00f6r du se att dina anpassade inst\u00e4llningar sparas i admin!<\/p>\n<h2>Anv\u00e4nder sparade anpassade widgetinst\u00e4llningar<\/h2>\n<p>Som n\u00e4mnts tidigare beror denna del verkligen p\u00e5 vad du vill att dina inst\u00e4llningar ska g\u00f6ra. Det \u00e4r tyv\u00e4rr inte lika enkelt eftersom de flesta widgets inte l\u00e4gger till filter eller krokar i sina utg\u00e5ngar. L\u00e5t oss b\u00f6rja med n\u00e5got enkelt; undvik att rendera widgeten beroende p\u00e5 inst\u00e4llningarna.<\/p>\n<h3>F\u00f6rhindra renderingswidget beroende p\u00e5 anpassad inst\u00e4llning<\/h3>\n<p>S\u00e4g att du l\u00e4gger till inst\u00e4llningar f\u00f6r n\u00e4r widgeten ska vara synlig; till exempel att g\u00f6mma det i vissa mallar (g\u00f6m i s\u00f6kresultatmallen, men visa p\u00e5 framsidan och singel), eller reagera p\u00e5 andra WordPress-tillst\u00e5nd.<\/p>\n<p>F\u00f6r detta kan vi anv\u00e4nda filtret <code>[widget_display_callback](https:\/\/developer.wordpress.org\/reference\/hooks\/widget_display_callback\/)<\/code>. Allt vi beh\u00f6ver g\u00f6ra \u00e4r att kontrollera den angivna instansparametern f\u00f6r v\u00e5r inst\u00e4llning och \u00e5terv\u00e4nda <code>false<\/code>om vi inte vill rendera widgeten.<\/p>\n<p>Den h\u00e4r enkla koden kommer att undvika att widgeten renderas om den anpassade kryssrutan som vi lade till ovan \u00e4r markerad:<\/p>\n<pre><code>add_filter('widget_display_callback', function($instance, $widget, $args) {\n    if ($instance['awp-custom-setting']) {\n        return false;\n    }\n    return $instance;\n}, 10, 3);<\/code><\/pre>\n<p>Du vill f\u00f6rmodligen j\u00e4mf\u00f6ra andra stater. Det h\u00e4r \u00e4r ett enkelt exempel d\u00e4r v\u00e5r kryssruta \u00e4r en kryssruta f\u00f6r &quot;G\u00f6m i enstaka inl\u00e4ggsvyer&quot;. Vi kontrollerar helt enkelt om vi f\u00f6r n\u00e4rvarande \u00e4r p\u00e5 en enskild inl\u00e4ggsvy med <code>[is_singular](https:\/\/developer.wordpress.org\/reference\/functions\/is_singular\/)()<\/code>och om kryssrutan \u00e4r markerad \u00e5terkommer vi <code>false<\/code>.<\/p>\n<pre><code>add_filter('widget_display_callback', function($instance, $widget, $args) {\n    if (is_singular() &amp;&amp; $instance['awp-custom-setting']) {\n        return false;\n    }\n    return $instance;\n}, 10, 3);<\/code><\/pre>\n<h3>\u00c4ndra befintliga widgets inst\u00e4llningar eller utdata<\/h3>\n<p>Ett kraftfullt filter att anv\u00e4nda f\u00f6r att leka med befintliga widgets \u00e4r <code>[dynamic_sidebar_params](https:\/\/developer.wordpress.org\/reference\/hooks\/dynamic_sidebar_params\/)<\/code>. Ta en titt p\u00e5 dokumentationssidan f\u00f6r att se vilka parametrar du kan \u00e4ndra. Du kan till exempel l\u00e4gga till anpassade klasser, du kan \u00e4ndra <code>before_widget<\/code>, <code>after_widget<\/code>eller HTML <code>before_title<\/code>&#8211; <code>after_title<\/code>str\u00e4ngarna. Detta g\u00e4ller dock alla widgets, \u00e4ven admin och frontend. Och med detta filter har du inte tillg\u00e5ng till widgetens instans (sparade inst\u00e4llningar) eller widgetinst\u00e4llningar (t.ex. typ av widget).<\/p>\n<p>Sj\u00e4lvklart m\u00e5ste vi \u00e5tminstone kontrollera v\u00e5ra anpassade inst\u00e4llningar. S\u00e5 vi m\u00e5ste g\u00f6ra en hel del kod f\u00f6r att h\u00e4mta de v\u00e4rden vi beh\u00f6ver.<\/p>\n<p>Det f\u00f6rsta vi kan g\u00f6ra \u00e4r att komma \u00e5t en global variabel <code>$wp_registered_widgets<\/code>. Detta \u00e4r en array som inneh\u00e5ller alla registrerade, tillg\u00e4ngliga widgets. Genom att anv\u00e4nda det registret kan vi anv\u00e4nda filtrets parameter f\u00f6r att hitta den specifika widgeten vi f\u00f6r n\u00e4rvarande befinner oss p\u00e5. N\u00e4r vi har hittat den aktuella widgeten har vi tillg\u00e5ng till widgetparametrarna, s\u00e5som <code>id_base<\/code>\u2013 som som vi s\u00e5g tidigare talar om f\u00f6r oss vilken typ av widget.<\/p>\n<pre><code>add_filter('dynamic_sidebar_params', function($params) {\n    global $wp_registered_widgets;\n\u00a0\n    $this_widget_id = $params[0]['widget_id'];  \/\/ Current widget ID\n    $this_widget = $wp_registered_widgets[$this_widget_id];\n    $widget_object = $this_widget['callback'][0];  \/\/ Current widget object\n\u00a0\n    \/\/ With $widget_object we have access to e.g. id_base for checking type of widget\n    if ($widget_object-&gt;id_base != 'nav_menu') {\n        return $params;\n    }\n\u00a0\n    return $params;\n});<\/code><\/pre>\n<p>Som du kan se i rad <code>#9<\/code>kan vi \u00e4ntligen kontrollera vilken typ av widget vi befinner oss p\u00e5 f\u00f6r n\u00e4rvarande. I koden ovan \u00e5terkommer jag om widgettypen inte \u00e4r en navigationswidget eftersom v\u00e5r anpassade inst\u00e4llning endast lades till f\u00f6r dessa widgetar.<\/p>\n<h3>H\u00e4mtar sparade widgetinst\u00e4llningar<\/h3>\n<p>Men vi m\u00e5ste ocks\u00e5 h\u00e4mta de sparade inst\u00e4llningarna per widget (inklusive v\u00e5r anpassade inst\u00e4llning). Alla widgets sparade inst\u00e4llningar lagras i alternativdatabasen grupperade efter typ av widget. Med hj\u00e4lp av en egenskap i widgetregistret kan vi anv\u00e4nda <code>[get_option](https:\/\/developer.wordpress.org\/reference\/functions\/get_option\/)()<\/code>f\u00f6r att h\u00e4mta de sparade inst\u00e4llningarna f\u00f6r den aktuella widgettypen. Returen kommer att vara en indexerad array d\u00e4r vi beh\u00f6ver anv\u00e4nda ytterligare en perameter fr\u00e5n filtret f\u00f6r att hitta det aktuella indexet (eftersom du kan l\u00e4gga till flera av samma widgettyp i samma eller olika sidof\u00e4lt). Det \u00e4r l\u00e4ttare att visa med kod \u00e4n att f\u00f6rklara det:<\/p>\n<pre><code>    ...\n    if ($widget_object-&gt;id_base != 'nav_menu') {\n        return $params;\n    }\n\u00a0\n    $all_settings = get_option($widget_object-&gt;option_name);\n    $saved_settings = $all_settings[$params[1]['number']];\n    if ($saved_settings['my-custom-thing']) {\n        \/\/ Do your thing\n    }\n\u00a0\n    return $params;\n});<\/code><\/pre>\n<p>\u00c4ntligen f\u00e5r vi tag p\u00e5 widgetens sparade inst\u00e4llningar! I exempelkoden ovan, p\u00e5 rad <code>#9<\/code>, kontrollerar vi om v\u00e5r anpassade kryssruta \u00e4r markerad eller inte.<\/p>\n<h3>Exempel<\/h3>\n<p>Vid det h\u00e4r laget \u00e4r det upp till dig vad du vill g\u00f6ra. Du kan till exempel rendera en utdata efter widgettitel, men f\u00f6re widgetinneh\u00e5ll:<\/p>\n<pre><code>    ...\n    if ($saved_settings['my-custom-thing']) {\n        $params[0]['after_title'] .= '&lt;div&gt;This appears before widget content&lt;\/div&gt;';\n    }\n    ...<\/code><\/pre>\n<p>F\u00f6r mer verkliga anv\u00e4ndningsfall skulle du normalt l\u00f6sa det mesta genom att l\u00e4gga till vissa filter vid denna tidpunkt, genom att anropa <code>add_filter()<\/code>vid denna tidpunkt.<\/p>\n<p>Nedan \u00e4r ett exempel p\u00e5 hur du \u00e4ndrar navigeringsmenyns argument genom att l\u00e4gga till ett filter om v\u00e5r inst\u00e4llning var markerad. Om det var avmarkerat ser vi till att filtret tas bort. Filtret f\u00f6r att \u00e4ndra argumenten f\u00f6r att rendera en navigeringsmeny \u00e4r <code>widget_nav_menu_args<\/code>. I koden nedan har jag definierat en funktion f\u00f6r detta filter som l\u00e4gger till ett nytt argument till menyargumenten; en rullator:<\/p>\n<pre><code>    ...\n    if ($saved_settings['my-custom-thing']) {\n        add_filter('widget_nav_menu_args', 'awp_add_menu_walker', 10, 3);\n    } else {\n        remove_filter('widget_nav_menu_args', 'awp_add_menu_walker', 10);\n    }\n    return $params;\n});\nfunction awp_add_menu_walker($nav_menu_args, $nav_menu, $args) {\n    $nav_menu_args['walker'] = new AWP_Custom_Walker();\n    return $nav_menu_args;\n}<\/code><\/pre>\n<p>Koden ovan \u00e4r ett exempel p\u00e5 ett anv\u00e4ndningsfall d\u00e4r den anpassade kryssrutan styr huruvida en menyrullare ska till\u00e4mpas p\u00e5 menyn eller inte. Utm\u00e4rkt om du vill att alla menyer ska renderas normalt men vill att alternativet f\u00f6r specifika menywidgets ska renderas annorlunda. Vad rollatorn g\u00f6r med menyutg\u00e5ngen \u00e4r upp till dig.<\/p>\n<p>Se nedan f\u00f6r den fullst\u00e4ndiga koden f\u00f6r att l\u00e4gga till en anpassad inst\u00e4llning till alla navigeringsmenyer, uppdatera den och anv\u00e4nda en menypassare.<\/p>\n<p>F\u00f6rhoppningsvis r\u00e4cker detta f\u00f6r att du ska komma p\u00e5 hur du kodar det du vill g\u00f6ra. Det beror verkligen p\u00e5 vad du vill g\u00f6ra och vilken typ av widget du arbetar med. Som n\u00e4mnts ovan brukar de flesta av \u00e4ndringarna l\u00f6sas genom att l\u00e4gga till filter f\u00f6r att g\u00f6ra din grej i <code>dynamic_sidebar_params<\/code>.<\/p>\n<h2>Fullst\u00e4ndigt exempel: Anpassad kryssruteinst\u00e4llning p\u00e5 Navigationswidgets f\u00f6r att anv\u00e4nda en menypassare<\/h2>\n<p>H\u00e4r \u00e4r den fullst\u00e4ndiga koden f\u00f6r att l\u00e4gga till en anpassad kryssruta till alla WordPresss navigeringsmenywidgetar f\u00f6r att anv\u00e4nda en registrerad menyrullare. (Walkerkod ing\u00e5r ej)<\/p>\n<pre><code>\/\/ Add custom setting to menu widgets\nadd_action('in_widget_form', function($widget, $return, $instance) {\n    \/\/ Add setting only to menu widgets\n    if ($widget-&gt;id_base != 'nav_menu') {\n        return;\n    }\n\u00a0\n    ?&gt;\n    &lt;p&gt;\n        &lt;input type=\"checkbox\" class=\"checkbox\" name=\"&lt;?php echo $widget-&gt;get_field_name('activate-walker'); ?&gt;\" id=\"&lt;?php echo $widget-&gt;get_field_name('activate-walker'); ?&gt;\" &lt;?php checked(isset($instance['activate-walker'])? $instance['activate-walker']: 0); ?&gt; \/&gt;\n        &lt;label for=\"&lt;?php echo $widget-&gt;get_field_name('activate-walker'); ?&gt;\"&gt;&lt;?php __('Activate walker', 'txtdomain'); ?&gt;&lt;\/label&gt;\n    &lt;\/p&gt;\n    &lt;?php\n}, 10, 3);\n\u00a0\n\u00a0\n\/\/ Update custom setting\nadd_filter('widget_update_callback', function($instance, $new_instance, $old_instance) {\n    $instance['activate-walker'] = isset($new_instance['activate-walker']);\n    return $instance;\n}, 10, 3);\n\u00a0\n\u00a0\n\/\/ Filter sidebar params to add filter if custom setting was activated\nadd_filter('dynamic_sidebar_params', function($params) {\n    global $wp_registered_widgets;\n\u00a0\n    $this_widget_id = $params[0]['widget_id'];\n    $this_widget = $wp_registered_widgets[$this_widget_id];\n    $widget_object = $this_widget['callback'][0];\n\u00a0\n    \/\/ Bail if not a menu widget\n    if ($widget_object-&gt;id_base != 'nav_menu') {\n        return $params;\n    }\n\u00a0\n    $all_settings = get_option($widget_object-&gt;option_name);\n    $saved_settings = $all_settings[$params[1]['number']];\n\u00a0\n    if ($saved_settings['activate-walker']) {\n        add_filter('widget_nav_menu_args', 'awp_add_menu_walker', 10, 3);\n    } else {\n        remove_filter('widget_nav_menu_args', 'awp_add_menu_walker', 10);\n    }\n\u00a0\n    return $params;\n});\n\u00a0\n\u00a0\n\/\/ Filter nav menu arguments to add walker\nfunction awp_add_menu_walker($nav_menu_args, $nav_menu, $args) {\n    $nav_menu_args['walker'] = new AWP_Custom_Walker();\n    return $nav_menu_args;\n}<\/code><\/pre>\n<h2>Slutsats<\/h2>\n<p>F\u00f6rhoppningsvis har det h\u00e4r inl\u00e4gget varit till hj\u00e4lp f\u00f6r att antingen l\u00f6sa dina behov eller ge dig n\u00e5gra tips om hur du kan g\u00e5 tillv\u00e4ga f\u00f6r att g\u00f6ra det du beh\u00f6ver g\u00f6ra!<\/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>Hur man l\u00e4gger till anpassade inst\u00e4llningar till n\u00e5gon av WordPresss standardwidgets. Med dessa inst\u00e4llningar l\u00e4r vi oss hur man manipulerar widgetarnas beteende d\u00e4refter.<\/p>\n","protected":false},"author":1,"featured_media":223663,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[932,901,724,838,848,901,1110,807,807,838,932,848,724,868,868],"tags":[1173],"class_list":["post-233467","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-aemnen","category-koda","category-utvecklaren","category-guide-foer-nyboerjare","category-handledningar","category-n-a","category-php-9","category-wordpress-9","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/233467","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=233467"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/233467\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/223663"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=233467"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=233467"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=233467"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}