{"id":230953,"date":"2022-12-12T20:30:00","date_gmt":"2022-12-12T17:30:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230953"},"modified":"2022-12-07T11:19:10","modified_gmt":"2022-12-07T08:19:10","slug":"une-strategie-pour-initialiser-les-parametres-du-plugin","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/une-strategie-pour-initialiser-les-parametres-du-plugin\/","title":{"rendered":"Une strat\u00e9gie pour initialiser les param\u00e8tres du plugin"},"content":{"rendered":"\n<p>Chaque fois que vous travaillez sur un plugin qui propose une page pour ses param\u00e8tres, vous pouvez enregistrer et r\u00e9cup\u00e9rer les informations de plusieurs mani\u00e8res.<\/p>\n<p>Tu peux:<\/p>\n<ul>\n<li>utiliser l&rsquo; <strong><a href=\"https:\/\/codex.wordpress.org\/Settings_API\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">API Param\u00e8tres<\/a><\/strong> ,<\/li>\n<li>utiliser une page personnalis\u00e9e et des appels qui sont un hybride des deux,<\/li>\n<li>utiliser un type d&rsquo;hybride entre <strong><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_submenu_page\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">une page de sous-menu<\/a><\/strong> (ou <strong><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_menu_page\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">une page de menu<\/a><\/strong>) et d&rsquo;autres fonctionnalit\u00e9s.<\/li>\n<\/ul>\n<p>Plus j&rsquo;ai travaill\u00e9 avec WordPress, moins je me soucie d&rsquo;utiliser l&rsquo;API Settings et j&rsquo;opte pour une approche un peu hybride.<\/p>\n<p>Selon les exigences du projet, la mise en \u0153uvre variera ; cependant, j&rsquo;essaie d&rsquo;utiliser une mani\u00e8re relativement coh\u00e9rente de cr\u00e9er la fonctionnalit\u00e9.<\/p>\n<p>Et bien que cet article n&rsquo;aborde pas les diff\u00e9rentes mani\u00e8res dont je cr\u00e9e mes pages, les classes associ\u00e9es, etc., il vous proposera une mani\u00e8re d&rsquo;initialiser les param\u00e8tres du plug-in lorsque vous travaillez sur votre projet ou sur un projet pour quelqu&rsquo;un d&rsquo;autre.<\/p>\n<h2>Initialisation des param\u00e8tres du plugin<\/h2>\n<p>Pour cet article, supposons que les exigences exigent le stockage des valeurs d&rsquo;une page sous la forme d&rsquo;un tableau associatif qui est nettoy\u00e9 et s\u00e9rialis\u00e9 \u00e0 partir du plugin.<\/p>\n<p>Outre la fonctionnalit\u00e9 de d\u00e9sinfection dont vous aurez besoin, vous savez \u00e9galement que vous allez travailler avec\u00a0:<\/p>\n<ol>\n<li>le tableau des options,<\/li>\n<li>et, \u00e0 ce titre, une cl\u00e9 unique pour les options stock\u00e9es dans la table des options<\/li>\n<\/ol>\n<p>Maintenant, dans le contexte de la programmation orient\u00e9e objet, j&rsquo;ai normalement plusieurs classes configur\u00e9es pour g\u00e9rer toutes ces fonctionnalit\u00e9s, mais je suis principalement concern\u00e9 par la mani\u00e8re de proc\u00e9der pour initialiser les param\u00e8tres du plugin.<\/p>\n<h3>Mais pourquoi?<\/h3>\n<p>Si vous chargez une page destin\u00e9e \u00e0 r\u00e9cup\u00e9rer des options de la base de donn\u00e9es et que les valeurs n&rsquo;ont pas \u00e9t\u00e9 initialis\u00e9es, vous verrez des avertissements sur votre \u00e9cran ou quelque chose appara\u00eetra dans votre fichier journal de d\u00e9bogage.<\/p>\n<p>Tout d\u00e9pend de la fa\u00e7on dont vous avez configur\u00e9 votre installation locale ainsi que de la fa\u00e7on dont votre h\u00f4te a d\u00e9fini sa configuration.<\/p>\n<p>Quoi qu&rsquo;il en soit, vous voulez vous assurer que vous avez initialis\u00e9 les param\u00e8tres du plug-in afin d&rsquo;avoir au moins la ligne d\u00e9finie dans la base de donn\u00e9es et des valeurs initiales ou des valeurs vides d\u00e9finies pour le plug-in.<\/p>\n<h3>Comment faire<\/h3>\n<p>Comme mentionn\u00e9 pr\u00e9c\u00e9demment, parce que je suis fan de l&rsquo;utilisation de classes dans mon travail, je configure g\u00e9n\u00e9ralement une classe responsable de la lecture et de l&rsquo;\u00e9criture des valeurs dans la base de donn\u00e9es. Et cela inclut l&rsquo;initialisation des param\u00e8tres du plugin.<\/p>\n<p>Pour ce faire, je travaille g\u00e9n\u00e9ralement selon le processus suivant :<\/p>\n<ol>\n<li>initialiser la classe,<\/li>\n<li>v\u00e9rifier si une option existe dans la base de donn\u00e9es,<\/li>\n<li>si ce n&rsquo;est pas le cas, initialisez-le,<\/li>\n<li>si c&rsquo;est le cas, ne faites rien.<\/li>\n<\/ol>\n<p>Le code initial pour faire cela peut ressembler <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/5a9940d1364b4d15e1de755f78bd0a79#file-00-initialize-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">\u00e0 ceci<\/a><\/strong> :<\/p>\n<pre><code>&lt;?php\n\/**\n * Initializes the plugin settings fo ruse throughout the rest of the plugin.\n *\/\nprivate function initialize() {\n    $settings = [\n        'username' =&gt; '',\n        'user-info' =&gt; [\n              'location' =&gt; '',\n              'id-number' =&gt; '',\n              'first-name' =&gt; '',\n              'last-name' =&gt; '',\n        ],\n        'short-bio' =&gt; '',\n    ];\n    update_option('acme-plugin-settings', $settings);\n}\n<\/code><\/pre>\n<p>Mais parce que c&rsquo;est dans sa propre fonction, il peut \u00eatre appel\u00e9 dans le constructeur de votre classe, ou vous pouvez le marquer comme <strong>public<\/strong> et l&rsquo;appeler en dehors de la classe. Pour ce post, cependant, je place un appel pour cela <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/5a9940d1364b4d15e1de755f78bd0a79#file-01-constructor-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dans le constructeur<\/a><\/strong> :<\/p>\n<pre><code>&lt;?php\n\n\/**\n * Intiializes the properties of the class, primarily the array of settings.\n *\/\npublic function __construct() {\n    if (false === get_option('acme-plugin-settings')) {\n        $this-&gt;initialize();\n    }\n    \/\/ More to come...\n}\n<\/code><\/pre>\n<p>Et une fois les valeurs initialis\u00e9es, un attribut sur la classe <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/5a9940d1364b4d15e1de755f78bd0a79#file-02-final-constructor-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">peut \u00eatre d\u00e9fini<\/a><\/strong> :<\/p>\n<pre><code>&lt;?php\n\n\/**\n * Intiializes the properties of the class, primarily the array of settings.\n *\/\npublic function __construct() {\n    if (false === get_option('acme-plugin-settings')) {\n        $this-&gt;initialize();\n    }\n    $this-&gt;settings = get_option('acme-plugin-settings');\n}\n<\/code><\/pre>\n<p>Bien qu&rsquo;il y ait un cas \u00e0 faire que cela ne devrait pas \u00eatre fait dans le constructeur, j&rsquo;aime avoir des propri\u00e9t\u00e9s de classe initialis\u00e9es dans le constructeur de ladite classe.<\/p>\n<p>Et puisque la classe est responsable du maintien d&rsquo;une r\u00e9f\u00e9rence aux param\u00e8tres, il est logique d&rsquo;initialiser les param\u00e8tres ici.<\/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>Cet article ne couvre pas les diff\u00e9rentes mani\u00e8res de cr\u00e9er des pages d&rsquo;options, il offre un moyen d&rsquo;initialiser les param\u00e8tres du plug-in.<\/p>\n","protected":false},"author":1,"featured_media":234934,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[893,717,832,801,862],"tags":[1167],"class_list":["post-230953","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-code-2","category-developpeur","category-guide-pour-les-debutants","category-php-3","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/230953","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=230953"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/230953\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/234934"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=230953"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=230953"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=230953"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}