{"id":229261,"date":"2022-10-30T13:42:00","date_gmt":"2022-10-30T10:42:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229261"},"modified":"2022-11-09T06:10:57","modified_gmt":"2022-11-09T03:10:57","slug":"interfaces-de-plugins-wordpress-travailler-avec-des-ressources","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/interfaces-de-plugins-wordpress-travailler-avec-des-ressources\/","title":{"rendered":"Interfaces de plugins WordPress\u00a0: Travailler avec des ressources"},"content":{"rendered":"\n<p>L&rsquo;un des avantages de travailler avec la programmation orient\u00e9e objet est la possibilit\u00e9 de d\u00e9finir des interfaces afin que les classes qui impl\u00e9mentent ces interfaces aient un ensemble strict de fonctions que lesdites classes doivent impl\u00e9menter.<\/p>\n<p>C&rsquo;est <a href=\"https:\/\/stackoverflow.com\/a\/1022066\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la d\u00e9finition<\/a> d&rsquo;une interface de classe, de toute fa\u00e7on\u00a0:<\/p>\n<blockquote>\n<p>Une interface est un contrat sp\u00e9cifiant un ensemble de m\u00e9thodes, de champs et de propri\u00e9t\u00e9s qui seront disponibles sur tout objet d&rsquo;impl\u00e9mentation<\/p>\n<\/blockquote>\n<p>Mais \u00e0 quoi cela pourrait-il ressembler si nous visons \u00e0 cr\u00e9er une solution d&rsquo;espace de noms pour inclure des interfaces de plug-in WordPress (ou une interface) pour une classe pouvant \u00eatre utilis\u00e9e pour mettre en file d&rsquo;attente des feuilles de style ou des fichiers JavaScript\u00a0?<\/p>\n<h2>Interfaces de plugins WordPress\u00a0: atouts<\/h2>\n<p>Pour les besoins de cet article, supposons que nous d\u00e9finissions une interface qui sera utilis\u00e9e dans la zone d&rsquo;administration de WordPress. Autrement dit, nous allons cr\u00e9er une interface qui sera utilis\u00e9e pour mettre en file d&rsquo;attente les feuilles de style et les fichiers JavaScript.<\/p>\n<p>Nous devrons int\u00e9grer les \u00e9l\u00e9ments suivants\u00a0:<\/p>\n<ul>\n<li>un espace de noms utilisable tout au long du projet,<\/li>\n<li>une fonction d&rsquo;initialisation de la classe,<\/li>\n<li>une fonction pour r\u00e9ellement mettre en file d&rsquo;attente les actifs.<\/li>\n<\/ul>\n<p>Et comme c&rsquo;est suffisamment g\u00e9n\u00e9rique pour pouvoir \u00eatre utilis\u00e9 pour JavaScript et les feuilles de style, j&rsquo;ai choisi de l&rsquo;appeler simplement <strong>Asset<\/strong>.<\/p>\n<p>Le r\u00e9sultat final peut ressembler <a href=\"https:\/\/gist.github.com\/tommcfarlin\/30521dcf0c493283327bf9162c7b9a35#file-00-interface-asset-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">\u00e0 ceci<\/a> :<\/p>\n<pre><code>&lt;?php\n\nnamespace AcmeAdminInterfaces;\n\ninterface Asset {\n\n    public function init();\n    public function enqueue();\n}\n<\/code><\/pre>\n<p>Ensuite, nous devons r\u00e9ellement <a href=\"https:\/\/gist.github.com\/tommcfarlin\/30521dcf0c493283327bf9162c7b9a35#file-01-javascript-asset-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">impl\u00e9menter l&rsquo;interface<\/a> avec une classe. Cela devrait \u00eatre relativement simple puisque nous avons d\u00e9fini les m\u00e9thodes qui doivent \u00eatre impl\u00e9ment\u00e9es.<\/p>\n<p>Notez, cependant, que je fournis quelques propri\u00e9t\u00e9s qui sont d\u00e9finies dans le constructeur de la classe. Celles-ci sont sp\u00e9cifiques \u00e0 cette classe et facilitent un peu la mise en file d&rsquo;attente d&rsquo;un fichier.<\/p>\n<pre><code>&lt;?php\n\nnamespace AcmeAdmin;\nuse AcmeAdminInterfaces;\n\nclass JavaScript_Assets implements InterfacesAsset {\n\n    private $assets_dir;\n\n    private $js_dir;\n\n    public function __construct() {\n\n        $this-&gt;assets_dir = trailingslashit(\n            plugin_dir_url( __FILE__ ). 'assets'\n        );\n\n        $this-&gt;js_dir = trailingslashit( $this-&gt;assets_dir. 'js' );\n    }\n\n    public function init() {\n\n        add_action(\n            'admin_enqueue_scripts',\n            array( $this, 'enqueue') );\n    }\n\n    public function enqueue() {\n\n        wp_enqueue_script(\n            'toggle-admin-notices',\n            $this-&gt;js_dir. 'admin.js',\n            array( 'jquery' ),\n            false\n        );\n    }\n}\n<\/code><\/pre>\n<p>Quelques points \u00e0 noter \u00e0 propos du code ci-dessus\u00a0:<\/p>\n<ul>\n<li>il utilise le\u00a0 mot-cl\u00e9 <strong>use<\/strong> pour que PHP sache que nous allons travailler avec l&rsquo; interface <strong>Asset ,<\/strong><\/li>\n<li>J&rsquo;ai pr\u00e9fix\u00e9 le nom avec <strong>JavaScript<\/strong> afin qu&rsquo;il soit clair avec quel type d&rsquo;actif je travaille.<\/li>\n<\/ul>\n<p>Enfin, pour instancier la classe qui impl\u00e9mente l&rsquo;interface, il suffit de <a href=\"https:\/\/gist.github.com\/tommcfarlin\/30521dcf0c493283327bf9162c7b9a35#file-02-class-instantiation-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">faire ceci<\/a> :<\/p>\n<pre><code>&lt;?php\n\n$assets = new AdminJavaScript_Assets();\n$assets-&gt;init();\n<\/code><\/pre>\n<p>Bien s\u00fbr, cet exemple particulier est simple et j&rsquo;ai laiss\u00e9 de c\u00f4t\u00e9 les commentaires de code habituels, mais c&rsquo;est g\u00e9n\u00e9ralement pour des raisons de lisibilit\u00e9. Si vous voulez voir quelque chose comme \u00e7a en action, passez en revue le code source pour<\/p>\n<p>Si vous voulez voir quelque chose comme \u00e7a en action, passez en revue le code source de <a href=\"https:\/\/github.com\/tommcfarlin\/toggle-admin-notices\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ce plugin particulier<\/a>.<\/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>\u00c0 quoi cela pourrait-il ressembler si nous visons \u00e0 cr\u00e9er une solution pour les interfaces de plug-in WordPress pour une classe pouvant \u00eatre utilis\u00e9e pour mettre en file d&rsquo;attente des ressources\u00a0?<\/p>\n","protected":false},"author":1,"featured_media":220968,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[915,893,717,841,862],"tags":[1167],"class_list":["post-229261","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-autre","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\/229261","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=229261"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/229261\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/220968"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=229261"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=229261"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=229261"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}