{"id":228894,"date":"2022-10-23T09:36:00","date_gmt":"2022-10-23T06:36:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228894"},"modified":"2022-11-09T04:42:13","modified_gmt":"2022-11-09T01:42:13","slug":"options-temporaires-dans-wordpress-notre-meilleure-option","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/options-temporaires-dans-wordpress-notre-meilleure-option\/","title":{"rendered":"Options temporaires dans WordPress : Notre meilleure option ?"},"content":{"rendered":"\n<p>En mati\u00e8re de programmation, l&rsquo;id\u00e9e de valeurs temporaires ou de variables temporaires ou de toute mani\u00e8re de stocker temporairement des donn\u00e9es en m\u00e9moire n&rsquo;a rien de nouveau.<\/p>\n<p>Mais lorsque nous travaillons avec WordPress \u2013 qui est sans \u00e9tat \u2013 nous n&rsquo;avons pas toujours ce luxe. Autrement dit, il ne s&rsquo;agit pas simplement, disons, de jeter quelque chose dans la <a href=\"https:\/\/php.net\/manual\/en\/features.sessions.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">session<\/a> en cours, de le lire, puis de le supprimer lorsque nous en avons fini.<\/p>\n<p>Et c&rsquo;est \u00e0 ce moment-l\u00e0 que j&rsquo;ai de plus en plus r\u00e9fl\u00e9chi \u00e0 l&rsquo;id\u00e9e d&rsquo;options temporaires, faute d&rsquo;un meilleur terme bien s\u00fbr. Autrement dit, chaque fois que j&rsquo;ai besoin de stocker une valeur \u00e0 partir d&rsquo;un chargement de page unique, ou d&rsquo;une demande, pour lire dans un autre chargement de page, ou une autre demande, je jetterai temporairement la valeur dans <a href=\"https:\/\/codex.wordpress.org\/Database_Description#Table:_wp_options\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la table d&rsquo;options<\/a>.<\/p>\n<p>Options temporaires\u00a0: un exercice et une repr\u00e9sentation via l&rsquo;esquisse rudimentaire<\/p>\n<p>Est-ce b\u00e2cl\u00e9? Peut-\u00eatre. Avons-nous beaucoup d&rsquo;autres choix? Cela d\u00e9pend de la quantit\u00e9 de technologie de navigateur moderne que nous voulons utiliser. Ce n&rsquo;est pas le but de ce post, cependant.<\/p>\n<p>Le fait est qu&rsquo;en raison de la fa\u00e7on dont WordPress fonctionne, je me demande si notre meilleure strat\u00e9gie actuelle pour maintenir les valeurs temporaires les plus largement prises en charge dans toutes les installations est d&rsquo;ajouter temporairement une valeur dans la table des options, de la lire, puis de la supprimer une fois qu&rsquo;elle est \u00e9t\u00e9 r\u00e9cup\u00e9r\u00e9 ?<\/p>\n<h2>Nos options pour les options temporaires<\/h2>\n<p>Personnellement, je n&rsquo;ai pas d&rsquo;opinion tranch\u00e9e sur le fait que ce soit une mauvaise chose ou non. Si c&rsquo;est la nature de la fa\u00e7on dont la fondation sur laquelle je travaille sur une solution fonctionne, alors je vais y aller.<\/p>\n<p>Donc, tout d&rsquo;abord, voici comment j&rsquo;ai g\u00e9n\u00e9ralement proc\u00e9d\u00e9 dans WordPress\u00a0:<\/p>\n<h3>1 Cr\u00e9er une option temporaire<\/h3>\n<p>Tout d&rsquo;abord, j&rsquo;ai configur\u00e9 une fonction qui est accroch\u00e9e \u00e0 <a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/update_option\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">update_option<\/a>. Cela permet de regarder l&rsquo;option <a href=\"https:\/\/gist.github.com\/tommcfarlin\/09c436b55f4c5eecc4187d7fc438ea40#file-00-init-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">qui est mise \u00e0 jour<\/a>, son ancienne valeur et sa nouvelle valeur.<\/p>\n<pre><code>&lt;?php\n\npublic function init() {\n\n    add_action(\n        'update_option',\n        array( $this, 'manage_temporary_option' ),\n        10, 3\n    );\n}<\/code><\/pre>\n<p>Dans la fonction, je peux regarder et voir si une option sp\u00e9cifique est enregistr\u00e9e. Si ce n&rsquo;est pas le cas, je peux simplement l&rsquo;ignorer\u00a0; sinon, je peux y jeter un coup d&rsquo;\u0153il et commencer \u00e0 travailler avec <a href=\"https:\/\/gist.github.com\/tommcfarlin\/09c436b55f4c5eecc4187d7fc438ea40#file-01-manage-temporary-option-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">une option temporaire<\/a>.<\/p>\n<pre><code>&lt;?php\n\npublic function manage_temporary_option( $option_name, $old_value, $new_value) {\n\n    if ('an_irrelevant_option' !== $option_name) {\n        return;\n    }\n\n    $url = 'page-from-which-we-expect-to-come.php';\n    if ($url === $_SERVER['REQUEST_URI']) {\n\n        update_option(\n            'our_temporary_option',\n            $new_value\n        );\n    }\n}\n<\/code><\/pre>\n<p>Mais que retiendrait l&rsquo;option temporaire ?<\/p>\n<h3>2 Une option pour les options temporaires<\/h3>\n<p>Disons que vous avez une option dans un plugin qui est bascul\u00e9. Cela n\u00e9cessite peut-\u00eatre que l&rsquo;utilisateur saisisse certaines informations avant de passer au reste d&rsquo;un processus.<\/p>\n<p>Exemple\u00a0: Supposons que vous travaillez sur une exp\u00e9rience de paiement et que vous souhaitez forcer les utilisateurs \u00e0 cr\u00e9er un compte, mais qu&rsquo;il existe une option permettant aux clients de passer \u00e0 la caisse sans cr\u00e9er de compte.<\/p>\n<p>Une impl\u00e9mentation que nous pourrions utiliser est celle-ci\u00a0:<\/p>\n<ol>\n<li>Avant le chargement de la page de paiement, v\u00e9rifiez si l&rsquo;utilisateur peut payer en tant qu&rsquo;invit\u00e9.<\/li>\n<li>Si tel est le cas, stockez la valeur d&rsquo;origine de l&rsquo;option dans une option temporaire.<\/li>\n<li>Modifiez la valeur d&rsquo;origine afin qu&rsquo;elle n\u00e9cessite la cr\u00e9ation d&rsquo;un compte.<\/li>\n<li>Une fois le processus de paiement termin\u00e9, copiez la valeur de l&rsquo;option temporaire dans l&rsquo;option d&rsquo;origine.<\/li>\n<li>Supprimez l&rsquo;option temporaire.<\/li>\n<\/ol>\n<p>C&rsquo;est similaire \u00e0 l&rsquo;ensemble de l&rsquo;exercice en C lorsque vous avez besoin d&rsquo;un pointeur pour <a href=\"http:\/\/www.c4learn.com\/c-programs\/interchanging-values-of-two-variables.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">\u00e9changer deux nombres<\/a> (pour celui qui s&rsquo;en souvient ou celui qui l&rsquo;a fait).<\/p>\n<h2>Notre meilleure option\u00a0?<\/h2>\n<p>Le processus d\u00e9crit ci-dessus n&rsquo;est qu&rsquo;un exemple et n&rsquo;est pas cens\u00e9 \u00eatre le moyen d\u00e9finitif de maintenir des valeurs temporaires. Deuxi\u00e8mement, l&rsquo;exemple de paiement n&rsquo;est pas destin\u00e9 \u00e0 associer ce message au commerce \u00e9lectronique.<\/p>\n<p>Au lieu de cela, il est destin\u00e9 \u00e0 fournir un cas d&rsquo;utilisation concret pour savoir quand stocker des options temporaires est utile et comment nous pouvons vouloir le faire.<\/p>\n<p>La question initiale demeure donc\u00a0: \u00e9tant donn\u00e9 le fonctionnement de WordPress, le manque de sessions et sans \u00eatre garanti certaines fonctionnalit\u00e9s du navigateur comme localStorage, les options temporaires dans la table des options sont-elles notre meilleure solution\u00a0?<\/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>Compte tenu du fonctionnement de WordPress, du manque de sessions et du manque de fonctionnalit\u00e9s du navigateur, les options temporaires dans le tableau des options sont-elles notre meilleure solution\u00a0?<\/p>\n","protected":false},"author":1,"featured_media":221144,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[915,893,717,748,811,841,862],"tags":[1167],"class_list":["post-228894","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-autre","category-code-2","category-developpeur","category-open-source-projektmanagement-2","category-plugins-2","category-tutoriels","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/228894","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=228894"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/228894\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/221144"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=228894"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=228894"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=228894"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}