{"id":228462,"date":"2022-10-23T11:02:00","date_gmt":"2022-10-23T08:02:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228462"},"modified":"2022-11-09T02:33:37","modified_gmt":"2022-11-08T23:33:37","slug":"korzystanie-z-haka-wordpress-do-aktualizacji-opcji","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/korzystanie-z-haka-wordpress-do-aktualizacji-opcji\/","title":{"rendered":"Korzystanie z haka WordPress do aktualizacji opcji"},"content":{"rendered":"\n<p>Aktualizowanie opcji w panelu administratora WordPressa jest proste, prawda? Jest to kwestia wype\u0142nienia pola tekstowego, zaznaczenia pola lub zamiany przycisku opcji, a nast\u0119pnie klikni\u0119cia Zapisz.<\/p>\n<p>Za\u0142\u00f3\u017cmy jednak, \u017ce musisz skonfigurowa\u0107 podpi\u0119cie, kt\u00f3re uruchamia si\u0119, a tak\u017ce aktualizuje drugorz\u0119dn\u0105, powi\u0105zan\u0105 opcj\u0119, gdy jedna jest prze\u0142\u0105czana.<\/p>\n<p>Na przyk\u0142ad, bior\u0105c pod uwag\u0119 opcj\u0119 reprezentowan\u0105 przez pole wyboru, powiedzmy, \u017ce chcesz ustawi\u0107 opcj\u0119 w bazie danych, gdy pole wyboru jest odznaczone, a nast\u0119pnie usuwa\u0107 j\u0105, gdy ta opcja jest ustawiona.<\/p>\n<p><a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/update_option\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external\"><\/a>Specjalnie do tego s\u0142u\u017cy <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/update_option\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">akcja, kt\u00f3ra sprawia, \u017ce \u200b\u200bjest to ca\u0142kiem proste.<\/a><\/p>\n<h2>Hak do aktualizacji opcji<\/h2>\n<p>Zanim przejdziesz do jakiegokolwiek kodu, jak to zrobi\u0107, powiedz, \u017ce dana opcja update_option zosta\u0142a wyzwolona. Po wykonaniu tej czynno\u015bci musisz skonfigurowa\u0107 wywo\u0142anie zwrotne, kt\u00f3re b\u0119dzie uruchamiane za ka\u017cdym razem, gdy opcja jest ustawiona.<\/p>\n<p>Opr\u00f3cz tego nale\u017cy wzi\u0105\u0107 pod uwag\u0119 nast\u0119puj\u0105ce kwestie:<\/p>\n<ol>\n<li>Czy dana opcja zosta\u0142a prze\u0142\u0105czona?<\/li>\n<li>Je\u015bli tak, czy opcja by\u0142a ustawiona (zak\u0142adaj\u0105c, \u017ce by\u0142o to pole wyboru)?<\/li>\n<li>Je\u015bli nie, czy masz plan, jak poradzi\u0107 sobie z t\u0105 spraw\u0105?<\/li>\n<\/ol>\n<p>Zak\u0142adaj\u0105c, \u017ce wszystko powy\u017cej zosta\u0142o wyja\u015bnione, b\u0119dziesz potrzebowa\u0107 funkcji do zdefiniowania akcji i funkcji, kt\u00f3ra implementuje wywo\u0142anie zwrotne. W moim przyk\u0142adzie b\u0119d\u0119 u\u017cywa\u0142 programowania obiektowego, ale mo\u017cna to zrobi\u0107 r\u00f3wnie dobrze w programowaniu proceduralnym.<\/p>\n<p>W moim przyk\u0142adzie b\u0119d\u0119 u\u017cywa\u0142 programowania obiektowego, ale mo\u017cna to zrobi\u0107 r\u00f3wnie dobrze w programowaniu proceduralnym.<\/p>\n<h3>Przyk\u0142ad<\/h3>\n<p>Za\u0142\u00f3\u017cmy, \u017ce masz opcj\u0119 o nazwie user_is_disguised i masz inn\u0105 warto\u015b\u0107 w bazie danych o nazwie user_is_superman.<\/p>\n<p>Ilekro\u0107 user_is_disguised jest ustawiony na jeszcze, wtedy user_is_superman powinien by\u0107 ustawiony na false. A nast\u0119pnie, gdy user_is_disguised jest ustawione na false, user_is_superman powinno by\u0107 ustawione na true.<\/p>\n<p>Ostatecznie warto\u015bci si\u0119 zamieniaj\u0105. Oto przyk\u0142ad, jak to zrobi\u0107. Najpierw <a href=\"https:\/\/gist.github.com\/tommcfarlin\/1c3af0efb30c5ac8203ec225be6aa8c9#file-00-init-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">musimy ustawi\u0107 hak<\/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>Nast\u0119pnie musimy <a href=\"https:\/\/gist.github.com\/tommcfarlin\/1c3af0efb30c5ac8203ec225be6aa8c9#file-01-toggle_other_option-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">zaimplementowa\u0107 funkcj\u0119<\/a> zamiany warto\u015bci:<\/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>I to powinno si\u0119 tym zaj\u0105\u0107.<\/p>\n<h2>Uwaga na temat argument\u00f3w<\/h2>\n<p>Zauwa\u017c, \u017ce wywo\u0142anie zwrotne akceptuje trzy argumenty (kt\u00f3re s\u0105 r\u00f3wnie\u017c zdefiniowane w dokumentacji, do kt\u00f3rej link znajduje si\u0119 powy\u017cej). S\u0105 one przydatne w innych, mniej wymy\u015blnych implementacjach.<\/p>\n<p>Ale by\u0107 mo\u017ce jedn\u0105 z najwa\u017cniejszych rzeczy, kt\u00f3re nale\u017cy usun\u0105\u0107 z powy\u017cszego kodu, jest sprawdzenie nazwy opcji w wywo\u0142aniu zwrotnym przed prze\u0142\u0105czeniem jakichkolwiek warto\u015bci.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Aktualizowanie opcji w panelu administratora WordPressa jest \u0142atwe, ale co, je\u015bli chcesz zaktualizowa\u0107 drug\u0105, powi\u0105zan\u0105 opcj\u0119, gdy inna zostanie prze\u0142\u0105czona.<\/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":[721,919,897,752,866],"tags":[1169],"class_list":["post-228462","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-inny","category-kod","category-otwarte-zrodlo","category-wordpress-7","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/228462","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=228462"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/228462\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/168014"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=228462"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=228462"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=228462"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}