{"id":229085,"date":"2022-10-23T11:25:00","date_gmt":"2022-10-23T08:25:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229085"},"modified":"2022-11-09T05:28:30","modified_gmt":"2022-11-09T02:28:30","slug":"wordpress-koukun-kaeyttaeminen-paeivitysvaihtoehtoihin","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/wordpress-koukun-kaeyttaeminen-paeivitysvaihtoehtoihin\/","title":{"rendered":"WordPress-koukun k\u00e4ytt\u00e4minen p\u00e4ivitysvaihtoehtoihin"},"content":{"rendered":"\n<p>Vaihtoehtojen p\u00e4ivitt\u00e4minen WordPress-j\u00e4rjestelm\u00e4nvalvojassa on yksinkertaista, eik\u00f6? Sinun tulee t\u00e4ytt\u00e4\u00e4 tekstikentt\u00e4, valita valintaruutu tai vaihtaa valintanappi ja napsauttaa sitten Tallenna.<\/p>\n<p>Mutta oletetaan, ett\u00e4 sinun on asetettava laukeava koukku, joka p\u00e4ivitt\u00e4\u00e4 my\u00f6s toissijaisen, liittyv\u00e4n vaihtoehdon aina, kun se vaihdetaan.<\/p>\n<p>Jos esimerkiksi annetaan valintaruudun edustama vaihtoehto, oletetaan, ett\u00e4 haluat asettaa vaihtoehdon tietokantaan aina, kun valintaruutua ei ole valittu, ja sitten poistaa sen aina, kun kyseinen vaihtoehto on asetettu.<\/p>\n<p><a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/update_option\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">T\u00e4t\u00e4 varten on toiminto<\/a>, joka tekee siit\u00e4 melko helppoa.<\/p>\n<h2>Koukku p\u00e4ivitysvaihtoehtoihin<\/h2>\n<p>Sano, ett\u00e4 annettu update_option on lauennut, ennen kuin perehdyt mihink\u00e4\u00e4n koodiin t\u00e4m\u00e4n tekemiseksi. Kun olet valmis, sinun on m\u00e4\u00e4ritett\u00e4v\u00e4 takaisinsoitto, joka k\u00e4ynnistyy aina, kun asetus on asetettu.<\/p>\n<p>T\u00e4m\u00e4n lis\u00e4ksi on otettava huomioon seuraavat seikat:<\/p>\n<ol>\n<li>Onko kyseinen vaihtoehto vaihdettu?<\/li>\n<li>Jos on, onko vaihtoehto asetettu (olettaen, ett\u00e4 se oli valintaruutu)?<\/li>\n<li>Jos ei, onko sinulla suunnitelmaa tapauksen k\u00e4sittelyyn?<\/li>\n<\/ol>\n<p>Olettaen, ett\u00e4 kaikki yll\u00e4 oleva on selvitetty, tarvitset toiminnon m\u00e4\u00e4ritt\u00e4m\u00e4\u00e4n toiminnon ja toiminnon, joka toteuttaa takaisinkutsun. Esimerkiss\u00e4ni k\u00e4yt\u00e4n olio-ohjelmointia, mutta se voidaan tehd\u00e4 yht\u00e4 hyvin proseduuriohjelmoinnissa.<\/p>\n<p>Esimerkiss\u00e4ni k\u00e4yt\u00e4n olio-ohjelmointia, mutta se voidaan tehd\u00e4 yht\u00e4 hyvin proseduuriohjelmoinnissa.<\/p>\n<h3>Esimerkki<\/h3>\n<p>Oletetaan, ett\u00e4 sinulla on vaihtoehto nimelt\u00e4 user_is_disguised, ja sinulla on toinen arvo tietokannassa nimelt\u00e4 user_is_superman.<\/p>\n<p>Aina kun user_is_disguised on asetettu arvoon viel\u00e4, user_is_superman tulee asettaa arvoon false. Ja sitten, kun user_is_disguised on asetettu arvoon false, user_is_superman tulee asettaa arvoon tosi.<\/p>\n<p>Lopulta arvot vaihtuvat. T\u00e4ss\u00e4 on esimerkki, kuinka se tehd\u00e4\u00e4n. Ensin <a href=\"https:\/\/gist.github.com\/tommcfarlin\/1c3af0efb30c5ac8203ec225be6aa8c9#file-00-init-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">meid\u00e4n on asetettava koukku<\/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>Sitten meid\u00e4n on <a href=\"https:\/\/gist.github.com\/tommcfarlin\/1c3af0efb30c5ac8203ec225be6aa8c9#file-01-toggle_other_option-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">toteutettava funktio<\/a> arvojen vaihtamiseksi:<\/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>Ja siit\u00e4 pit\u00e4isi huolehtia.<\/p>\n<h2>Huomautus argumenteista<\/h2>\n<p>Huomaa, ett\u00e4 takaisinsoitto hyv\u00e4ksyy kolme argumenttia (jotka on my\u00f6s m\u00e4\u00e4ritelty yll\u00e4 linkitetyss\u00e4 dokumentaatiossa). N\u00e4m\u00e4 ovat hy\u00f6dyllisi\u00e4 muissa, v\u00e4hemm\u00e4n keksityiss\u00e4 toteutuksissa.<\/p>\n<p>Mutta ehk\u00e4 yksi t\u00e4rkeimmist\u00e4 asioista, joka on otettava pois yll\u00e4 olevasta koodista, on, ett\u00e4 tarkistat vaihtoehdon nimen takaisinkutsussa ennen arvojen vaihtamista.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vaihtoehtojen p\u00e4ivitt\u00e4minen WordPress-j\u00e4rjestelm\u00e4nvalvojassa on helppoa, mutta ent\u00e4 jos haluat p\u00e4ivitt\u00e4\u00e4 toisen, liittyv\u00e4n vaihtoehdon aina, kun toinen vaihdetaan.<\/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":[750,719,895,917,864],"tags":[1166],"class_list":["post-229085","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-avoin-laehdekoodi","category-kehittaejae","category-koodi","category-muut","category-wordpress-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/229085","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=229085"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/229085\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/168014"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=229085"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=229085"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=229085"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}