{"id":229335,"date":"2022-10-23T11:11:00","date_gmt":"2022-10-23T08:11:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229335"},"modified":"2022-11-09T06:33:21","modified_gmt":"2022-11-09T03:33:21","slug":"utilizzo-di-un-wordpress-hook-per-laggiornamento-delle-opzioni","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/utilizzo-di-un-wordpress-hook-per-laggiornamento-delle-opzioni\/","title":{"rendered":"Utilizzo di un WordPress Hook per l&#8217;aggiornamento delle opzioni"},"content":{"rendered":"\n<p>L&#8217;aggiornamento delle opzioni all&#8217;interno dell&#8217;amministratore di WordPress \u00e8 semplice, giusto? Si tratta di compilare un campo di testo, selezionare una casella o scambiare un pulsante di opzione, quindi fare clic su Salva.<\/p>\n<p>Ma supponiamo che sia necessario impostare un hook che si attivi che aggiorni anche un&#8217;opzione correlata secondaria ogni volta che ne viene attivata una.<\/p>\n<p>Ad esempio, data un&#8217;opzione rappresentata da una casella di controllo, supponiamo di voler impostare un&#8217;opzione nel database ogni volta che la casella di controllo \u00e8 deselezionata e quindi eliminarla ogni volta che tale opzione \u00e8 impostata.<\/p>\n<p><a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/update_option\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">C&#8217;\u00e8 un&#8217;azione<\/a> specifica per farlo che lo rende abbastanza facile.<\/p>\n<h2>Un gancio per l&#8217;aggiornamento delle opzioni<\/h2>\n<p>Prima di entrare in qualsiasi codice su come farlo, d\u00ec che l&#8217;opzione update_option data \u00e8 stata scattata. Fatto ci\u00f2, dovrai configurare una richiamata che si attiva ogni volta che viene impostata l&#8217;opzione.<\/p>\n<p>A ci\u00f2 si aggiungono le seguenti considerazioni:<\/p>\n<ol>\n<li>L&#8217;opzione in questione \u00e8 stata attivata?<\/li>\n<li>In tal caso, l&#8217;opzione \u00e8 stata impostata (supponendo che fosse una casella di controllo)?<\/li>\n<li>In caso negativo, hai un piano su come gestire quel caso?<\/li>\n<\/ol>\n<p>Supponendo che tutto quanto sopra sia stato risolto, avrai bisogno di una funzione per definire l&#8217;azione e una funzione che implementi il \u200b\u200bcallback. Nel mio esempio, utilizzer\u00f2 la programmazione orientata agli oggetti, ma pu\u00f2 essere eseguita altrettanto bene nella programmazione procedurale.<\/p>\n<p>Nel mio esempio, utilizzer\u00f2 la programmazione orientata agli oggetti, ma pu\u00f2 essere eseguita altrettanto bene nella programmazione procedurale.<\/p>\n<h3>Un esempio<\/h3>\n<p>Supponiamo che tu abbia un&#8217;opzione chiamata user_is_disguised e che tu abbia un altro valore nel database chiamato user_is_superman.<\/p>\n<p>Ogni volta che user_is_disguised \u00e8 impostato su yet, user_is_superman dovrebbe essere impostato su false. E poi quando user_is_disguised \u00e8 impostato su false, user_is_superman dovrebbe essere impostato su true.<\/p>\n<p>Alla fine, i valori si scambiano. Ecco un esempio di come farlo. Per prima cosa, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/1c3af0efb30c5ac8203ec225be6aa8c9#file-00-init-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dobbiamo impostare l&#8217;hook<\/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>Quindi dobbiamo <a href=\"https:\/\/gist.github.com\/tommcfarlin\/1c3af0efb30c5ac8203ec225be6aa8c9#file-01-toggle_other_option-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">implementare la funzione<\/a> per lo scambio dei valori:<\/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>E questo dovrebbe occuparsene.<\/p>\n<h2>Una nota sugli argomenti<\/h2>\n<p>Si noti che il callback accetta tre argomenti (che sono anche definiti nella documentazione collegata sopra). Questi sono utili in altre implementazioni meno artificiose.<\/p>\n<p>Ma forse una delle cose pi\u00f9 importanti da eliminare dal codice sopra \u00e8 controllare il nome dell&#8217;opzione nella richiamata prima di attivare o disattivare i valori.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>L&#8217;aggiornamento delle opzioni all&#8217;interno dell&#8217;amministratore di WordPress \u00e8 facile, ma cosa succede se si desidera aggiornare una seconda opzione correlata ogni volta che ne viene attivata un&#8217;altra.<\/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":[918,896,751,720,865],"tags":[1168],"class_list":["post-229335","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-altro","category-codice","category-open-source-projektmanagement-3","category-sviluppatore","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/229335","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=229335"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/229335\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/168014"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=229335"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=229335"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=229335"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}