{"id":228927,"date":"2022-10-30T13:35:00","date_gmt":"2022-10-30T10:35:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228927"},"modified":"2022-11-09T04:50:09","modified_gmt":"2022-11-09T01:50:09","slug":"interfaces-de-complementos-de-wordpress-trabajar-con-activos","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/interfaces-de-complementos-de-wordpress-trabajar-con-activos\/","title":{"rendered":"Interfaces de complementos de WordPress: trabajar con activos"},"content":{"rendered":"\n<p>Una de las ventajas de trabajar con programaci\u00f3n orientada a objetos es la capacidad de definir interfaces para que las clases que implementan esas interfaces tengan un conjunto estricto de funciones que dichas clases deben implementar.<\/p>\n<p>Esa es <a href=\"https:\/\/stackoverflow.com\/a\/1022066\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la definici\u00f3n<\/a> de una interfaz de clase, de todos modos:<\/p>\n<blockquote>\n<p>Una interfaz es un contrato que especifica un conjunto de m\u00e9todos, campos y propiedades que estar\u00e1n disponibles en cualquier objeto de implementaci\u00f3n.<\/p>\n<\/blockquote>\n<p>Pero, \u00bfc\u00f3mo se ver\u00eda esto si nuestro objetivo es crear una soluci\u00f3n de espacio de nombres para incluir interfaces de complementos de WordPress (o una interfaz) para una clase que se puede usar para poner en cola hojas de estilo o archivos JavaScript?<\/p>\n<h2>Interfaces de complementos de WordPress: activos<\/h2>\n<p>A los efectos de esta publicaci\u00f3n, suponga que estamos definiendo una interfaz que se utilizar\u00e1 en el \u00e1rea de administraci\u00f3n de WordPress. Es decir, crearemos una interfaz que se usar\u00e1 para poner en cola hojas de estilo y archivos JavaScript.<\/p>\n<p>Tendremos que incorporar lo siguiente:<\/p>\n<ul>\n<li>un espacio de nombres que se puede utilizar en todo el proyecto,<\/li>\n<li>una funci\u00f3n para inicializar la clase,<\/li>\n<li>una funci\u00f3n para poner en cola los activos.<\/li>\n<\/ul>\n<p>Y dado que esto es lo suficientemente gen\u00e9rico como para que se pueda usar para JavaScript y hojas de estilo, opt\u00e9 por llamarlo simplemente <strong>Asset<\/strong>.<\/p>\n<p>El resultado final puede ser algo <a href=\"https:\/\/gist.github.com\/tommcfarlin\/30521dcf0c493283327bf9162c7b9a35#file-00-interface-asset-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">como esto<\/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>A continuaci\u00f3n, necesitamos <a href=\"https:\/\/gist.github.com\/tommcfarlin\/30521dcf0c493283327bf9162c7b9a35#file-01-javascript-asset-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">implementar la interfaz<\/a> con una clase. Deber\u00eda ser relativamente sencillo ya que hemos establecido los m\u00e9todos que deben implementarse.<\/p>\n<p>Tenga en cuenta, sin embargo, que proporciono un par de propiedades que se establecen en el constructor de la clase. Estos son espec\u00edficos de esta clase y hacen que el acto de poner en cola un archivo sea un poco m\u00e1s f\u00e1cil.<\/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>Algunas cosas a tener en cuenta sobre el c\u00f3digo anterior:<\/p>\n<ul>\n<li>utiliza la\u00a0 palabra clave <strong>use<\/strong> para que PHP sepa que trabajaremos con la interfaz de <strong>activos ,<\/strong><\/li>\n<li>Le prefij\u00e9 el nombre con <strong>JavaScript<\/strong> para que quede claro con qu\u00e9 tipo de activo estoy trabajando.<\/li>\n<\/ul>\n<p>Finalmente, para instanciar la clase que implementa la interfaz, simplemente <a href=\"https:\/\/gist.github.com\/tommcfarlin\/30521dcf0c493283327bf9162c7b9a35#file-02-class-instantiation-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">haga esto<\/a> :<\/p>\n<pre><code>&lt;?php\n\n$assets = new AdminJavaScript_Assets();\n$assets-&gt;init();\n<\/code><\/pre>\n<p>Claro, este ejemplo en particular es simple y he dejado los comentarios habituales del c\u00f3digo, pero eso es generalmente por el bien de la legibilidad. Si desea ver algo como esto en acci\u00f3n, revise el c\u00f3digo fuente para<\/p>\n<p>Si desea ver algo como esto en acci\u00f3n, revise el c\u00f3digo fuente de <a href=\"https:\/\/github.com\/tommcfarlin\/toggle-admin-notices\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">este complemento en particular<\/a>.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00bfC\u00f3mo podr\u00eda verse si nuestro objetivo es crear una soluci\u00f3n para las interfaces de complementos de WordPress para una clase que se puede usar para poner en cola activos?<\/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":[892,716,914,840,861],"tags":[1172],"class_list":["post-228927","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-desarrollador","category-otro","category-tutoriales","category-wordpress-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/228927","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=228927"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/228927\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/220968"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=228927"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=228927"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=228927"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}