{"id":230169,"date":"2022-11-23T13:33:00","date_gmt":"2022-11-23T10:33:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230169"},"modified":"2022-11-09T20:25:56","modified_gmt":"2022-11-09T17:25:56","slug":"modeles-et-logique-conditionnelle-avec-oop-dans-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/modeles-et-logique-conditionnelle-avec-oop-dans-wordpress\/","title":{"rendered":"Mod\u00e8les et logique conditionnelle avec OOP dans WordPress"},"content":{"rendered":"\n<p>Les mod\u00e8les sont de plus en plus courants dans WordPress, et je consid\u00e8re que c&rsquo;est une bonne chose.<\/p>\n<p>Mais cela ne signifie pas qu&rsquo;il n&rsquo;y a pas de projets que nous g\u00e9rons qui utilisent une approche plus traditionnelle pour afficher des mod\u00e8les ou des partiels. De plus, cela ne signifie pas non plus que nous sommes dispens\u00e9s de maintenir des bases de code qui utilisent du code qui n&rsquo;utilise pas de moteur de template.<\/p>\n<p>Bien que je pense que les mod\u00e8les sont bons, je ne pense pas que ce soit toujours n\u00e9cessaire. C&rsquo;est le contenu d&rsquo;un autre article, cependant.<\/p>\n<p>Au lieu de cela, je souhaite parcourir le processus d&rsquo;utilisation de la logique conditionnelle d&rsquo;affichage ou non d&rsquo;un partiel dans un mod\u00e8le et le faire en utilisant la programmation orient\u00e9e objet.<\/p>\n<h2>Mod\u00e8les et logique conditionnelle avec OOP<\/h2>\n<p>Pour ce faire, supposons ce qui suit\u00a0:<\/p>\n<ol>\n<li>Nous avons un plugin qui d\u00e9pend d&rsquo;un autre plugin pour une fonctionnalit\u00e9.<\/li>\n<li>Le deuxi\u00e8me plugin est facultatif.<\/li>\n<li>S&rsquo;il n&rsquo;est pas pr\u00e9sent, nous afficherons un avis. S&rsquo;il est pr\u00e9sent, nous afficherons un partiel.<\/li>\n<\/ol>\n<p>Assez simple, non\u00a0?<\/p>\n<p>La seule chose \u00e0 noter est que toute cette logique sera conserv\u00e9e dans le plugin principal (c&rsquo;est-\u00e0-dire celui qui va v\u00e9rifier la pr\u00e9sence de l&rsquo;autre plugin).<\/p>\n<h3>1 La logique conditionnelle du mod\u00e8le<\/h3>\n<p>La premi\u00e8re chose \u00e0 faire est d&rsquo;avoir une fonction qui v\u00e9rifiera la pr\u00e9sence du plugin secondaire. La raison en est que le mod\u00e8le ressemble <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/fe4cbdc9eb5e6409fb4f9e3e1784f97d#file-00-template-example-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">\u00e0 ceci\u00a0:<\/a><\/strong><\/p>\n<pre><code>&lt;div class=\"wrap\"&gt;\n    &lt;!-- Snipping out irrelevant code in this file --&gt;\n    &lt;form id=\"yhd-upload-new-item-settings\"&gt;\n        &lt;?php if (!$this-&gt;hasSecondaryPlugin()) { ?&gt;\n            &lt;?php include_once 'partials\/error-inactive-plugin.php'; ?&gt;\n        &lt;?php } else { ?&gt;\n            &lt;h2&gt;Secondary Plugin Settings&lt;\/h2&gt;\n            &lt;p class=\"description\"&gt;The Secondary Plugin is installed and active.&lt;\/p&gt;\n            &lt;form method=\"post\" action=\"&lt;?php echo esc_html(admin_url('admin-post.php')); ?&gt;\"&gt;\n                &lt;label for=\"acme-secondary-plugin\"&gt;\n                    &lt;input type=\"checkbox\" name=\"acme-secondary-plugin\" value=\"true\"\/&gt;\n                    Would you like to automatically use the secondary plugin?\n                &lt;\/label&gt;\n                &lt;!-- Snipping out irrelevant code in this file --&gt;\n            &lt;\/form&gt;\n        &lt;?php } ?&gt;\n    &lt;\/div&gt;\n&lt;\/div&gt;<\/code><\/pre>\n<p>Et puis le partiel peut ressembler <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/fe4cbdc9eb5e6409fb4f9e3e1784f97d#file-01-error-inactive-plugin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">\u00e0 ceci<\/a><\/strong> (cela d\u00e9pend de votre impl\u00e9mentation):<\/p>\n<pre><code>&lt;?php\n\/**\n * This is the partial displayed when the Secondary Plugin is not active.\n *\/\n?&gt;\n&lt;div id=\"inactive-importer-message\" class=\"error notice is-dismissible\"&gt;\n    &lt;p&gt;[The message you want to display here.]&lt;\/p&gt;\n    &lt;button type=\"button\" class=\"notice-dismiss\"&gt;\n        &lt;span class=\"screen-reader-text\"&gt;Dismiss this notice.&lt;\/span&gt;\n    &lt;\/button&gt;\n&lt;\/div&gt;&lt;!-- #inactive-importer-message --&gt;<\/code><\/pre>\n<p>En raison de la fa\u00e7on dont les mod\u00e8les sont inclus dans WordPress, la fonction vivra dans une classe et la classe v\u00e9rifiera la pr\u00e9sence du plugin.<\/p>\n<p>Si vous utilisez un renifleur de code, cela d\u00e9clenchera probablement un avertissement indiquant que la m\u00e9thode n&rsquo;est pas utilis\u00e9e, mais que la m\u00e9thode est utilis\u00e9e, elle est simplement utilis\u00e9e dans un fichier de mod\u00e8le. Remarque dans une classe. Tout \u00e7a pour dire que certains de nos renifleurs ne sont pas si intelligents. Encore.<\/p>\n<h3>2 Le code c\u00f4t\u00e9 serveur du plugin<\/h3>\n<p>Une fois que vous avez une id\u00e9e g\u00e9n\u00e9rale de la fa\u00e7on dont cela va fonctionner, il est temps d&rsquo;\u00e9crire du code dans votre classe.<\/p>\n<p>N&rsquo;oubliez pas qu&rsquo;il s&rsquo;agit d&rsquo;une fonction simple\u00a0: il suffit de v\u00e9rifier la pr\u00e9sence d&rsquo;un plugin. Vous pouvez le faire de plusieurs mani\u00e8res, mais la plus courante peut \u00eatre d&rsquo;utiliser la fonction API <strong><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/is_plugin_active\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">is_active_plugin .<\/a><\/strong><\/p>\n<p>Notez que lorsque vous utilisez cette fonction, elle repose sur l&rsquo;id\u00e9e que vous connaissez le nom du plugin que vous utilisez. Sinon, il existe d&rsquo;autres moyens, mais cela sort du cadre de cet article.<\/p>\n<p>Quoi qu&rsquo;il en soit, puisque la logique est conditionnelle, elle doit renvoyer une valeur bool\u00e9enne, et c&rsquo;est exactement ce que fait la fonction API ci-dessus. Ainsi, la fonction c\u00f4t\u00e9 serveur peut ressembler <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/fe4cbdc9eb5e6409fb4f9e3e1784f97d#file-02-hassecondaryplugin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">\u00e0 ceci\u00a0:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\n\/**\n * Determines if the Secondary Importer is is activated.\n *\n * @return bool True if the the pklugin is active; false, otherwise.\n *\/\nprivate function hasSecondaryPlugin()\n{\n    return in_array(\n        'secondary-plugin\/secondary-plugin.php',\n        get_option('active_plugins')\n    );\n}\n<\/code><\/pre>\n<p>Et puisque le code du mod\u00e8le appelle cette fonction (que vous voyez ci-dessus), il d\u00e9terminera s&rsquo;il doit afficher un partiel ou non.<\/p>\n<h2>Assez facile<\/h2>\n<p>Pour certains, c&rsquo;est vraiment simple; pour d&rsquo;autres, c&rsquo;est une approche compl\u00e8tement diff\u00e9rente car elle traite d&rsquo;une plus grande s\u00e9paration des pr\u00e9occupations.<\/p>\n<p>Et alors que je continue \u00e0 travailler sur <strong><a href=\"https:\/\/tommcfarlin.com\/tag\/oop-fundamentals\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">OOP Fundamentals<\/a><\/strong> avec les membres du site, je pense qu&rsquo;il est \u00e9galement important de partager certaines des meilleures pratiques avec ceux qui ne sont peut-\u00eatre pas membres mais d\u00e9sireux d&rsquo;\u00e9crire du code plus organis\u00e9.<\/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>Utilisez la programmation orient\u00e9e objet et la logique conditionnelle pour s\u00e9parer les probl\u00e8mes entre les partiels, les mod\u00e8les et le code c\u00f4t\u00e9 serveur.<\/p>\n","protected":false},"author":1,"featured_media":164710,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[893,717,841,862],"tags":[1167],"class_list":["post-230169","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-code-2","category-developpeur","category-tutoriels","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/230169","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=230169"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/230169\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/164710"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=230169"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=230169"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=230169"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}