{"id":228922,"date":"2022-10-23T11:13:00","date_gmt":"2022-10-23T08:13:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228922"},"modified":"2022-11-09T04:48:46","modified_gmt":"2022-11-09T01:48:46","slug":"utiliser-un-hook-wordpress-pour-mettre-a-jour-les-options","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/utiliser-un-hook-wordpress-pour-mettre-a-jour-les-options\/","title":{"rendered":"Utiliser un hook WordPress pour mettre \u00e0 jour les options"},"content":{"rendered":"\n<p>La mise \u00e0 jour des options dans l&rsquo;administration WordPress est simple, n&rsquo;est-ce pas? Il s&rsquo;agit de remplir un champ de texte, de cocher une case ou d&rsquo;\u00e9changer un bouton radio puis de cliquer sur Enregistrer.<\/p>\n<p>Mais disons que vous devez configurer un hook qui se d\u00e9clenche et qui met \u00e9galement \u00e0 jour une option secondaire associ\u00e9e chaque fois qu&rsquo;une option est activ\u00e9e.<\/p>\n<p>Par exemple, \u00e9tant donn\u00e9 une option repr\u00e9sent\u00e9e par une case \u00e0 cocher, supposons que vous souhaitiez d\u00e9finir une option dans la base de donn\u00e9es chaque fois que la case est d\u00e9coch\u00e9e, puis la supprimer chaque fois que cette option est d\u00e9finie.<\/p>\n<p><a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/update_option\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Il y a une action<\/a> sp\u00e9cifiquement pour faire cela qui le rend assez facile.<\/p>\n<h2>Un crochet pour mettre \u00e0 jour les options<\/h2>\n<p>Avant d&rsquo;entrer dans n&rsquo;importe quel code pour savoir comment faire cela, dites que le update_option donn\u00e9 a \u00e9t\u00e9 d\u00e9clench\u00e9. Une fois termin\u00e9, vous devrez configurer un rappel qui se d\u00e9clenche chaque fois que l&rsquo;option est d\u00e9finie.<\/p>\n<p>En plus de cela, il y a les consid\u00e9rations suivantes :<\/p>\n<ol>\n<li>L&rsquo;option en question a-t-elle \u00e9t\u00e9 activ\u00e9e\u00a0?<\/li>\n<li>Si oui, l&rsquo;option \u00e9tait-elle d\u00e9finie (en supposant qu&rsquo;il s&rsquo;agissait d&rsquo;une case \u00e0 cocher)\u00a0?<\/li>\n<li>Si non, avez-vous un plan pour g\u00e9rer ce cas\u00a0?<\/li>\n<\/ol>\n<p>En supposant que tout ce qui pr\u00e9c\u00e8de a \u00e9t\u00e9 compris, vous aurez besoin d&rsquo;une fonction pour d\u00e9finir l&rsquo;action et d&rsquo;une fonction qui impl\u00e9mente le rappel. Dans mon exemple, j&rsquo;utiliserai la programmation orient\u00e9e objet, mais cela peut aussi bien se faire en programmation proc\u00e9durale.<\/p>\n<p>Dans mon exemple, j&rsquo;utiliserai la programmation orient\u00e9e objet, mais cela peut aussi bien se faire en programmation proc\u00e9durale.<\/p>\n<h3>Un exemple<\/h3>\n<p>Supposons que vous ayez une option appel\u00e9e user_is_disguised et que vous ayez une autre valeur dans la base de donn\u00e9es appel\u00e9e user_is_superman.<\/p>\n<p>Chaque fois que user_is_disguised est d\u00e9fini sur yet, alors user_is_superman doit \u00eatre d\u00e9fini sur false. Et puis, lorsque user_is_disguised est d\u00e9fini sur false, user_is_superman doit \u00eatre d\u00e9fini sur true.<\/p>\n<p>En fin de compte, les valeurs s&rsquo;\u00e9changent. Voici un exemple comment le faire. Tout d&rsquo;abord, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/1c3af0efb30c5ac8203ec225be6aa8c9#file-00-init-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">nous devons configurer le crochet<\/a>\u00a0:<\/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>Ensuite, nous devons <a href=\"https:\/\/gist.github.com\/tommcfarlin\/1c3af0efb30c5ac8203ec225be6aa8c9#file-01-toggle_other_option-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">impl\u00e9menter la fonction<\/a> pour \u00e9changer les valeurs\u00a0:<\/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>Et cela devrait s&rsquo;en occuper.<\/p>\n<h2>Une note sur les arguments<\/h2>\n<p>Notez que le rappel accepte trois arguments (qui sont \u00e9galement d\u00e9finis dans la documentation li\u00e9e ci-dessus). Ceux-ci sont utiles dans d&rsquo;autres impl\u00e9mentations moins artificielles.<\/p>\n<p>Mais peut-\u00eatre que l&rsquo;une des choses les plus importantes \u00e0 retenir du code ci-dessus est que vous v\u00e9rifiez le nom de l&rsquo;option dans le rappel avant de basculer les valeurs.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>La mise \u00e0 jour des options dans l&rsquo;administrateur WordPress est facile, mais que se passe-t-il si vous souhaitez mettre \u00e0 jour une deuxi\u00e8me option connexe chaque fois qu&rsquo;une autre est bascul\u00e9e.<\/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":[915,893,717,748,862],"tags":[1167],"class_list":["post-228922","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-autre","category-code-2","category-developpeur","category-open-source-projektmanagement-2","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/228922","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=228922"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/228922\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/168014"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=228922"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=228922"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=228922"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}