{"id":228399,"date":"2022-10-23T11:49:00","date_gmt":"2022-10-23T08:49:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228399"},"modified":"2022-11-09T02:14:45","modified_gmt":"2022-11-08T23:14:45","slug":"anvaenda-en-wordpress-krok-foer-uppdateringsalternativ","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/anvaenda-en-wordpress-krok-foer-uppdateringsalternativ\/","title":{"rendered":"Anv\u00e4nda en WordPress-krok f\u00f6r uppdateringsalternativ"},"content":{"rendered":"\n<p>Att uppdatera alternativ inom WordPress-admin \u00e4r enkelt, eller hur? Det handlar om att fylla i ett textf\u00e4lt, markera en ruta eller byta en alternativknapp och sedan klicka p\u00e5 spara.<\/p>\n<p>Men l\u00e5t oss s\u00e4ga att du m\u00e5ste st\u00e4lla in en krok som avfyras som ocks\u00e5 uppdaterar ett sekund\u00e4rt, relaterat alternativ n\u00e4r en v\u00e4xlas.<\/p>\n<p>Till exempel, givet ett alternativ som representeras av en kryssruta, l\u00e5t oss s\u00e4ga att du vill st\u00e4lla in ett alternativ i databasen n\u00e4r kryssrutan \u00e4r avmarkerad och sedan ta bort den n\u00e4r alternativet \u00e4r inst\u00e4llt.<\/p>\n<p><a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/update_option\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Det finns en \u00e5tg\u00e4rd<\/a> specifikt f\u00f6r att g\u00f6ra detta som g\u00f6r det ganska enkelt.<\/p>\n<h2>En krok f\u00f6r uppdateringsalternativ<\/h2>\n<p>Innan du g\u00e5r in i n\u00e5gon kod f\u00f6r hur man g\u00f6r detta, s\u00e4g att den givna update_optionen har utl\u00f6sts. N\u00e4r du \u00e4r klar m\u00e5ste du st\u00e4lla in en \u00e5teruppringning som aktiveras n\u00e4r alternativet \u00e4r inst\u00e4llt.<\/p>\n<p>Ut\u00f6ver det finns f\u00f6ljande \u00f6verv\u00e4ganden:<\/p>\n<ol>\n<li>Har alternativet i fr\u00e5ga \u00e4ndrats?<\/li>\n<li>Om s\u00e5 \u00e4r fallet, var alternativet satt (f\u00f6rutsatt att det var en kryssruta)?<\/li>\n<li>Om inte, har du en plan f\u00f6r hur du ska hantera det \u00e4rendet?<\/li>\n<\/ol>\n<p>F\u00f6rutsatt att allt ovanst\u00e5ende har listats ut, beh\u00f6ver du en funktion f\u00f6r att definiera \u00e5tg\u00e4rden och en funktion som implementerar \u00e5teruppringningen. I mitt exempel kommer jag att anv\u00e4nda objektorienterad programmering, men det kan g\u00f6ras lika bra i procedurprogrammering.<\/p>\n<p>I mitt exempel kommer jag att anv\u00e4nda objektorienterad programmering, men det kan g\u00f6ras lika bra i procedurprogrammering.<\/p>\n<h3>Ett exempel<\/h3>\n<p>S\u00e4g att du har ett alternativ som heter user_is_disguised och att du har ett annat v\u00e4rde i databasen som heter user_is_superman.<\/p>\n<p>N\u00e4rhelst user_is_disguised \u00e4r inst\u00e4llt p\u00e5 \u00e4nnu, b\u00f6r user_is_superman st\u00e4llas in p\u00e5 false. Och sedan n\u00e4r user_is_disguised \u00e4r inst\u00e4llt p\u00e5 false, b\u00f6r user_is_superman st\u00e4llas in p\u00e5 sant.<\/p>\n<p>I slut\u00e4ndan v\u00e4xlar v\u00e4rdena. H\u00e4r \u00e4r ett exempel p\u00e5 hur man g\u00f6r. F\u00f6rst <a href=\"https:\/\/gist.github.com\/tommcfarlin\/1c3af0efb30c5ac8203ec225be6aa8c9#file-00-init-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">m\u00e5ste vi st\u00e4lla in kroken<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/**\n * Initializes the defined actions.\n *\/\npublic function init() {\n\n  add_action(\n    'update_option',\n    array( $this, 'toggle_other_option' ),\n    10, 3\n  );\n}\n<\/code><\/pre>\n<p>Sedan m\u00e5ste vi <a href=\"https:\/\/gist.github.com\/tommcfarlin\/1c3af0efb30c5ac8203ec225be6aa8c9#file-01-toggle_other_option-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">implementera funktionen<\/a> f\u00f6r att byta v\u00e4rden:<\/p>\n<pre><code>&lt;?php\n\n\/**\n * If the given option_name is `user_is_disguised`, then toggles another option\n * in the database - `user_is_superman` - based on the specified values.\n *\n * @param string $option_name The name of the value being updated.\n * @param mixed  $old_value   The previous value of the option before updating it.\n * @param mixed  $new_value   The value of the option now that it's been updated.\n *\/\npublic function toggle_other_option( $option_name, $old_value, $new_value) {\n\n  \/\/ If 'user_is_disguised' is not being changed, then don't worry about it.\n  if (0 !== strcasecmp( $option_name, 'user_is_disguised')) {\n   return; \n  }\n\n  \/* If 'user_is_disguised' is being set, then remove the Superman value; otherwise,\n   * set it to true (but don't worry about autoloading it).\n   *\/\n  if ('1' === $new_value) {\n    delete_option( 'user_is_superman' );\n  } else {\n    update_option( 'user_is_superman', true, false );\n  }\n}\n<\/code><\/pre>\n<p>Och det borde ta hand om det.<\/p>\n<h2>En anteckning om argument<\/h2>\n<p>Observera att \u00e5teruppringningen accepterar tre argument (som ocks\u00e5 definieras i dokumentationen som l\u00e4nkas ovan). Dessa \u00e4r anv\u00e4ndbara i andra, mindre konstruerade implementeringar.<\/p>\n<p>Men kanske en av de viktigaste sakerna att ta bort fr\u00e5n koden ovan \u00e4r att du kontrollerar alternativnamnet i \u00e5teruppringningen innan du v\u00e4xlar n\u00e5gra v\u00e4rden.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Det \u00e4r enkelt att uppdatera alternativ inom WordPress-admin, men t\u00e4nk om du vill uppdatera ett andra, relaterat alternativ n\u00e4r ett annat v\u00e4xlas.<\/p>\n","protected":false},"author":1,"featured_media":168014,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[901,755,922,724,868],"tags":[1173],"class_list":["post-228399","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-koda","category-oeppen-kaella","category-oevrig","category-utvecklaren","category-wordpress-9","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/228399","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=228399"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/228399\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/168014"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=228399"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=228399"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=228399"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}