{"id":233661,"date":"2023-02-20T16:27:00","date_gmt":"2023-02-20T13:27:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233661"},"modified":"2023-02-24T18:59:30","modified_gmt":"2023-02-24T15:59:30","slug":"agregue-una-barra-lateral-de-inspector-personalizado-en-wordpress-gutenberg-con-post-meta","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/agregue-una-barra-lateral-de-inspector-personalizado-en-wordpress-gutenberg-con-post-meta\/","title":{"rendered":"Agregue una barra lateral de inspector personalizado en WordPress Gutenberg con Post Meta"},"content":{"rendered":"\n<p>En este tutorial, veremos c\u00f3mo agregar una barra lateral personalizada al Inspector (barra lateral derecha) en WordPress Gutenberg. En el interior, implementaremos un campo conectado a una publicaci\u00f3n meta. Todo est\u00e1 implementado con Javascript, dentro del editor de Gutenberg, y es una alternativa a agregar metaboxes de la manera tradicional.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152503-61e4e03345086.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152503-61e4e03345086.png\" alt=\"Agregue una barra lateral de inspector personalizado en WordPress Gutenberg con Post Meta\"><\/a><\/p>\n<h3>\u00a1Aviso!<\/h3>\n<p>Este es un tutorial para crear su propia barra lateral personalizada. Pero si est\u00e1 interesado en simplemente agregar meta\/configuraciones a la barra lateral est\u00e1ndar del Inspector (pesta\u00f1a &quot;Documento&quot;), tengo un tutorial para exactamente eso:<\/p>\n<h2>lo que vamos a crear<\/h2>\n<p>WordPress Gutenberg permite a los desarrolladores crear barras laterales personalizadas mediante la creaci\u00f3n de un llamado complemento de Javascript. (No debe confundirse con los complementos tradicionales de WordPress). Al usar un complemento de Javascript, podemos crear una nueva barra lateral y tambi\u00e9n conectarnos al men\u00fa &quot;Herramientas y opciones&quot;.<\/p>\n<p>Agregaremos un nuevo elemento de men\u00fa en &quot;Herramientas&quot; que abrir\u00e1 nuestra barra lateral personalizada. El contenido de la barra lateral depende completamente de usted, pero revisar\u00e9 algunos ejemplos, incluido c\u00f3mo conectar un metacampo de publicaci\u00f3n dentro de \u00e9l.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152503-61e4e0343f620.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152503-61e4e0343f620.png\" alt=\"Agregue una barra lateral de inspector personalizado en WordPress Gutenberg con Post Meta\"><\/a><\/p>\n<h2>Configurando tu Javascript<\/h2>\n<p>Para este tutorial, escribir\u00e9 ES6\/ESNext Javascript con JSX, lo que significa que debemos configurar un compilador. Si desea seguir adelante y no escribir Javascript ES5, deber\u00e1 configurar un entorno de desarrollo que compile su Javascript sobre la marcha. Si no est\u00e1 familiarizado con esto, <a href=\"https:\/\/wordpress.mediadoma.com\/es\/guia-completa-para-configurar-un-entorno-de-desarrollo-para-gutenberg\/\" title=\"siga mi publicaci\u00f3n que explica c\u00f3mo configurarlo\">siga mi publicaci\u00f3n que explica c\u00f3mo configurarlo<\/a> y luego regrese aqu\u00ed.<\/p>\n<p>Configur\u00e9 mi <code>webpack.config.js<\/code>para compilar mi archivo Javascript de origen en el archivo <code>\/assets\/js\/sidebar-plugin.js<\/code>. Este archivo compilado es lo que necesitamos para ponerlo en cola en el editor de Gutenberg. Mientras escribo este c\u00f3digo, comenc\u00e9 el compilador en tiempo de ejecuci\u00f3n que vuelve a compilar el Javascript cada vez que guardo los cambios en el c\u00f3digo fuente (<code>npm run start<\/code>). Todo esto est\u00e1 explicado en profundidad en el tutorial mencionado anteriormente.<\/p>\n<p>Estoy escribiendo esto en un tema, pero funciona igual en un complemento. Solo recuerde ajustar las rutas al agregar el script al editor.<\/p>\n<h2>Agregar el script al editor<\/h2>\n<p>Para agregar nuestro script al editor de Gutenberg, necesitamos escribir algo de PHP. Si est\u00e1 en un tema, <code>functions.php<\/code>es un buen lugar para comenzar, o en alg\u00fan lugar de sus archivos de complemento. Tenga en cuenta que debemos agregar el script compilado final, no el c\u00f3digo fuente. En mi ejemplo, el Javascript compilado se encuentra en el archivo <code>\/assets\/js\/sidebar-plugin.js<\/code>.<\/p>\n<p>Creamos una funci\u00f3n enganchada a <code>enqueue_block_editor_assets<\/code>. Dentro hacemos lo de siempre <code>[wp_enqueue_script](https:\/\/developer.wordpress.org\/reference\/functions\/wp_enqueue_script\/)()<\/code>. Como dependencias al script agregamos dos; <code>wp-plugins<\/code>, y <code>wp-edit-post<\/code>. Estos dos paquetes deben cargarse antes de nuestro script ya que usamos funciones de ellos.<\/p>\n<pre><code>add_action('enqueue_block_editor_assets', function() {\n    wp_enqueue_script('awp-sidebar-plugin', get_stylesheet_directory_uri(). '\/assets\/js\/sidebar-plugin.js', ['wp-plugins', 'wp-edit-post']);\n});<\/code><\/pre>\n<p>Debido a que ponemos en cola el script en el gancho <code>enqueue_block_editor_assets<\/code>, nuestro script solo se cargar\u00e1 cuando el editor de Gutenberg est\u00e9 activo. \u00a1Excelente! Ahora todo est\u00e1 listo para escribir nuestro complemento de Javascript.<\/p>\n<h2>Registrar un complemento de Javascript<\/h2>\n<p>El primer paso es registrar un complemento. Hacemos esto con la <code>[registerPlugin](https:\/\/github.com\/WordPress\/gutenberg\/tree\/master\/packages\/plugins#registerPlugin)<\/code>funci\u00f3n en wp.plugins desde dentro del <code>wp.plugins<\/code>paquete.<\/p>\n<p>Como par\u00e1metro para registerPlugin, proporcionamos un nombre (aseg\u00farese de que sea \u00fanico) y un objeto con configuraciones. Como m\u00ednimo, debe proporcionar un componente para la propiedad de representaci\u00f3n. Tambi\u00e9n puede agregar opcionalmente un \u00edcono de <a href=\"https:\/\/developer.wordpress.org\/resource\/dashicons\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">los dashicons de WordPress<\/a>. Tenga en cuenta que si no especifica un \u00edcono, volver\u00e1 al \u00edcono del complemento. Para fines de demostraci\u00f3n, estoy usando el <code>'carrot'<\/code>icono.<\/p>\n<p>En cuanto al componente, comenzamos definiendo un componente b\u00e1sico que devuelve un div simple con alg\u00fan texto aleatorio. Y antes de todo el c\u00f3digo desestructuramos las funciones de los paquetes que queremos usar.<\/p>\n<pre><code>const { registerPlugin } = wp.plugins;\n\u00a0\nconst CustomSidebarComponent =() =&gt; {\n    return(\n        &lt;div&gt;Hey!&lt;\/div&gt;\n    );\n}\n\u00a0\nregisterPlugin('awp-customsidebar', {\n    render: CustomSidebarComponent,\n    icon: 'carrot'\n});<\/code><\/pre>\n<p>Si no sucede nada (ni siquiera errores) al actualizar Gutenberg, estamos listos para comenzar. No vemos nuestro componente porque no le hemos dicho a WordPress d\u00f3nde renderizarlo. El siguiente paso es conectar el men\u00fa de la barra lateral personalizada y los componentes del men\u00fa de herramientas para representar nuestro material.<\/p>\n<h2>Registrar una barra lateral personalizada<\/h2>\n<p>Pero primero una explicaci\u00f3n de c\u00f3mo Gutenberg maneja las barras laterales personalizadas y por qu\u00e9 necesitamos hacer lo que haremos. Cuando registramos con \u00e9xito una barra lateral personalizada, una cosa suceder\u00e1 autom\u00e1ticamente inicialmente. Gutenberg agregar\u00e1 un acceso directo a nuestra barra lateral en la barra de herramientas superior, junto al men\u00fa Herramientas. Esto sucede porque nuestra barra lateral se &quot;fija&quot; autom\u00e1ticamente.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152503-61e4e0353bff7.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152503-61e4e0353bff7.png\" alt=\"Agregue una barra lateral de inspector personalizado en WordPress Gutenberg con Post Meta\"><\/a><\/p>\n<p>El problema de simplemente agregar una barra lateral personalizada es que cualquier usuario puede &quot;desanclar&quot; este acceso directo. Cuando hacen eso, \u00a1no hay ning\u00fan punto de acceso para abrir la barra lateral nuevamente! Es por eso que tambi\u00e9n necesitamos agregar un elemento de men\u00fa al men\u00fa Herramientas.<\/p>\n<p>El registro de una barra lateral personalizada se realiza con el componente <code>PluginSidebar<\/code>del <code>wp.editPost<\/code>paquete. La adici\u00f3n de un elemento de men\u00fa al men\u00fa Herramientas se realiza con el componente con el nombre apropiado <code>PluginSidebarMoreMenuItem<\/code>(tambi\u00e9n en el <code>wp.editPost<\/code>paquete).<\/p>\n<p>Para el <code>PluginSidebar<\/code>componente necesitamos proporcionar algunos accesorios. Debe proporcionar como m\u00ednimo <code>name<\/code>y <code>title<\/code>. El accesorio <code>title<\/code>se explica por s\u00ed mismo, este es el nombre que aparecer\u00e1 en la parte superior de la barra lateral. En el accesorio, <code>name<\/code>proporcione una babosa \u00fanica. Cuando agrega el elemento del men\u00fa, debe consultar este slug.<\/p>\n<p>Agregar un <code>PluginSidebarMoreMenuItem<\/code>componente (men\u00fa de herramientas) requiere como m\u00ednimo un accesorio; <code>target<\/code>. Aqu\u00ed proporciona el mismo nombre que dio en la propiedad de la barra lateral <code>name<\/code>. Como contenido del componente, escribe el texto que se mostrar\u00e1 como elemento de men\u00fa. Por lo general, esto ser\u00eda lo mismo que el de la barra lateral <code>title<\/code>.<\/p>\n<p>Debido a que React requiere un solo nodo envolvente alrededor del retorno del componente, envolvemos todo dentro de un <code>Fragment<\/code>componente (del <code>wp.element<\/code>paquete). Tambi\u00e9n estoy envolviendo mis cadenas <code>__()<\/code>del <code>wp.i18n<\/code>paquete para permitir la traducci\u00f3n.<\/p>\n<pre><code>const { registerPlugin } = wp.plugins;\nconst { __ } = wp.i18n;\nconst { Fragment } = wp.element;\nconst { PluginSidebarMoreMenuItem, PluginSidebar } = wp.editPost;\n\u00a0\nconst CustomSidebarComponent =() =&gt; {\n    return(\n        &lt;Fragment&gt;\n            &lt;PluginSidebar \n                name=\"awp-custom-sidebar\" \n                title={__('My Custom sidebar', 'awp')}\n            &gt;Hello there.&lt;\/PluginSidebar&gt;\n            &lt;PluginSidebarMoreMenuItem \n                target='awp-custom-sidebar'\n                &gt;{__('My Custom sidebar', 'awp')}&lt;\/PluginSidebarMoreMenuItem&gt;\n        &lt;\/Fragment&gt;\n    );\n}\n\u00a0\nregisterPlugin('awp-customsidebar', {\n    render: CustomSidebarComponent,\n    icon: 'carrot'\n});<\/code><\/pre>\n<p>Con el c\u00f3digo anterior, obtendremos las siguientes dos (probablemente tres) cosas que suceden. Obtendr\u00e1 un acceso directo con el \u00edcono de zanahoria en la barra de herramientas (si a\u00fan no lo ha desanclado). Al hacer clic en esto, se abrir\u00e1 la barra lateral. Tambi\u00e9n tendr\u00e1 un nuevo elemento de men\u00fa en la barra lateral del men\u00fa Herramientas, bajo el t\u00edtulo &quot;Complementos&quot;.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152503-61e4e036136de.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152503-61e4e036136de.png\" alt=\"Agregue una barra lateral de inspector personalizado en WordPress Gutenberg con Post Meta\"><\/a><\/p>\n<h2>Agregar contenido a la barra lateral<\/h2>\n<p>El contenido real de la barra lateral depende totalmente de usted. Solo necesita agregar HTML o componentes dentro del <code>PluginSidebar<\/code>componente con lo que desee (en lugar del texto &quot;Hola&quot;).<\/p>\n<p>Puede notar que falta relleno en el contenido de la barra lateral. Esto es intencional porque la idea es que crear\u00e1 paneles dentro de esta barra lateral. Los paneles son las secciones plegables en la barra lateral normal de Gutenberg. Esos son componentes que puede agregar muy f\u00e1cilmente dentro de su barra lateral personalizada. Puede agregar tantos paneles como desee y son excelentes para agrupar diferentes cosas.<\/p>\n<h3>Agregar paneles en nuestra barra lateral<\/h3>\n<p>Veamos r\u00e1pidamente c\u00f3mo podemos agregar paneles a nuestra barra lateral. Si ha creado sus propios tipos de bloques personalizados, es posible que est\u00e9 familiarizado con estos componentes. Usamos <code>PanelBody<\/code>y opcionalmente <code>PanelRow<\/code>del <code>wp.components<\/code>paquete.<\/p>\n<p>Para un <code>PanelBody<\/code>componente, proporciona como m\u00ednimo el accesorio <code>title<\/code>. Opcionalmente, puede proporcionar verdadero o falso a la <code>initialOpen<\/code>propiedad para decidir si el panel debe expandirse de forma predeterminada o no. Como contenido dentro del componente est\u00e1 todo dentro del panel.<\/p>\n<p>Dentro de un <code>PanelBody<\/code>puede utilizar opcionalmente <code>PanelRow<\/code>componentes. No son realmente necesarios, pero pueden ayudarlo a obtener un buen estilo para el contenido de su panel.<\/p>\n<p>Por ejemplo, agreguemos dos paneles a nuestra barra lateral personalizada.<\/p>\n<pre><code>const { registerPlugin } = wp.plugins;\nconst { __ } = wp.i18n;\nconst { Fragment } = wp.element;\nconst { PluginSidebarMoreMenuItem, PluginSidebar } = wp.editPost;\nconst { PanelBody, PanelRow } = wp.components;\n\u00a0\nconst CustomSidebarComponent = () =&gt; {\n    return(\n        &lt;Fragment&gt;\n            &lt;PluginSidebarMoreMenuItem \n                target='awp-custom-sidebar'\n                &gt;{__('My Custom sidebar', 'awp')}&lt;\/PluginSidebarMoreMenuItem&gt;\n            &lt;PluginSidebar \n                name=\"awp-custom-sidebar\" \n                title={__('My Custom sidebar', 'awp')}\n            &gt;                \n                &lt;PanelBody\n                    title={__('This is a panel section', 'awp')}\n                    initialOpen={true}\n                &gt;\n                    &lt;PanelRow&gt;\n                        Put any component or content here.\n                    &lt;\/PanelRow&gt;\n                &lt;\/PanelBody&gt;\n                &lt;PanelBody\n                    title={__('Another section', 'awp')}\n                    initialOpen={false}\n                &gt;\n                    &lt;PanelRow&gt;\n                        This is a collapsed section by default.\n                    &lt;\/PanelRow&gt;\n                &lt;\/PanelBody&gt;\n            &lt;\/PluginSidebar&gt;\n        &lt;\/Fragment&gt;\n    );\n}\n\u00a0\nregisterPlugin('awp-customsidebar', {\n    render: CustomSidebarComponent,\n    icon: 'carrot'\n});<\/code><\/pre>\n<p>\u00a1Con este c\u00f3digo, nuestra barra lateral personalizada comienza a parecerse realmente a Gutenberg!<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152503-61e4e036ce025.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152503-61e4e036ce025.png\" alt=\"Agregue una barra lateral de inspector personalizado en WordPress Gutenberg con Post Meta\"><\/a><\/p>\n<h2>Agregar metacampos de publicaci\u00f3n a la barra lateral personalizada<\/h2>\n<p>Ahora realmente estamos entrando en el meollo de las cosas \u00fatiles para una barra lateral personalizada; agregar configuraciones y almacenar sus valores. Pero primero tenemos que entender c\u00f3mo.<\/p>\n<p>Es realmente f\u00e1cil agregar campos de configuraci\u00f3n (entradas, casillas de verificaci\u00f3n, campos de alternancia, etc.) en la barra lateral usando los componentes listos para usar en los paquetes de WordPress. Sin embargo, debemos considerar c\u00f3mo almacenar los valores. La opci\u00f3n obvia es almacenarlos como post meta. Pero conectar una configuraci\u00f3n a un metacampo de publicaci\u00f3n requiere un c\u00f3digo adicional. M\u00e1s espec\u00edficamente, necesitamos usar los llamados <a href=\"https:\/\/reactjs.org\/docs\/higher-order-components.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">componentes<\/a> de orden superior para obtener y actualizar el metadato de publicaci\u00f3n dentro de Javascript. Tambi\u00e9n necesitamos registrar cada publicaci\u00f3n meta usando PHP y ponerlas a disposici\u00f3n de la API REST.<\/p>\n<p>Para cerrar este tutorial, demostrar\u00e9 c\u00f3mo agregar una meta de publicaci\u00f3n con una clave <code>awp_my_custom_meta<\/code>que debe almacenarse como verdadera o falsa. En la barra lateral se mostrar\u00e1 como un campo de alternancia (un componente verdadero\/falso).<\/p>\n<h3>Registrar post meta para REST API<\/h3>\n<p>El primer paso para agregar publicaciones meta en nuestro archivo Javascript es registrarlas y definirlas como accesibles en la API REST. Para ello volvemos a PHP de nuevo.<\/p>\n<p>Dentro de una funci\u00f3n enganchada a la <code>init<\/code>acci\u00f3n usamos la <code>[register_meta](https:\/\/developer.wordpress.org\/reference\/functions\/register_meta\/)()<\/code>funci\u00f3n. Como par\u00e1metros, necesitamos definir el tipo de objeto como &quot; <code>post<\/code>&quot; porque lo estamos usando como meta de publicaci\u00f3n (no excluye, por ejemplo, el tipo de publicaci\u00f3n de p\u00e1gina). Proporcionamos la clave meta y luego una serie de argumentos. Lo m\u00e1s importante que se debe agregar en la matriz de argumentos es establecer &#8216; <code>show_in_rest<\/code>&#8216; en <code>true<\/code>. Post meta se usa com\u00fanmente como &#8216; <code>single<\/code>&#8216; (piensa c\u00f3mo lo usas <code>get_post_meta()<\/code>). Tambi\u00e9n definimos el <code>type<\/code>. En cuanto a nuestro caso, lo configuramos en &#8216; <code>boolean<\/code>&#8216;.<\/p>\n<pre><code>add_action('init', function() {\n    register_meta('post', 'awp_my_custom_meta', [\n        'show_in_rest' =&gt; true,\n        'single' =&gt; true,\n        'type' =&gt; 'boolean'\n    ]);\n});<\/code><\/pre>\n<p>Con este c\u00f3digo, <code>awp_my_custom_meta<\/code>se puede acceder al metacampo de publicaci\u00f3n &#8216; &#8216; desde Gutenberg. Debe repetir el <code>register_meta()<\/code>meta para cada publicaci\u00f3n que desee agregar en su barra lateral.<\/p>\n<p>Ahora volvamos a nuestro Javascript.<\/p>\n<h3>Agregar una configuraci\u00f3n a nuestra barra lateral<\/h3>\n<p>Comencemos con la parte f\u00e1cil: agregar la entrada a nuestra barra lateral. M\u00e1s adelante agregaremos m\u00e1s c\u00f3digo para conectar realmente el campo de configuraci\u00f3n para publicar meta. Debido a la forma en que necesitamos hacer esto, definimos un nuevo componente separado para nuestra configuraci\u00f3n. Entonces, dentro del panel en el que desea agregar su configuraci\u00f3n, simplemente llame a este nuevo componente.<\/p>\n<p>Llamemos al componente <code>CustomSidebarMetaComponent<\/code>(podr\u00eda llamarlo algo relevante para su proyecto). Dentro de este componente queremos representar un campo de alternancia. Para hacer esto usamos el <code>ToggleControl<\/code>componente del <code>wp.components<\/code>paquete. Como accesorios para ToggleControl, proporcionamos una etiqueta adecuada en el <code>title<\/code>accesorio. Un ToggleControl tambi\u00e9n necesita accesorios <code>onChange<\/code>para actualizar el valor y <code>checked<\/code>para el valor actual. Omitiremos estos dos por ahora hasta el pr\u00f3ximo paso.<\/p>\n<pre><code>...\nconst { PanelBody, PanelRow, ToggleControl } = wp.components;\n\u00a0\nconst CustomSidebarMetaComponent = () =&gt; {\n    return(\n        &lt;ToggleControl\n            label={__('My custom post meta', 'awp')}\n        \/&gt;\n    );\n}\n\u00a0\nconst CustomSidebarComponent = () =&gt; {\n    return(\n        ...       \n        &lt;PanelBody\n            title={__('This is a panel section', 'awp')}\n            initialOpen={true}\n        &gt;\n            &lt;PanelRow&gt;\n                &lt;CustomSidebarMetaComponent \/&gt;\n            &lt;\/PanelRow&gt;\n        &lt;\/PanelBody&gt;\n        ...<\/code><\/pre>\n<p>Con el c\u00f3digo anterior, deber\u00eda obtener un campo de alternancia en la barra lateral. No est\u00e1 marcado y no pasa nada cuando haces clic en \u00e9l. Ese es el siguiente paso: conectarlo a nuestra publicaci\u00f3n meta.<\/p>\n<h3>Acceder a la publicaci\u00f3n meta con withSelect y withDispatch<\/h3>\n<p>Para acceder y actualizar un valor meta de publicaci\u00f3n, necesitamos usar componentes de orden superior (HOC) para acceder a la versi\u00f3n de tiendas de WordPress (similar a Redux). WordPress nos proporciona algunos HOC \u00fatiles con funciones que podemos usar en el <code>wp.data<\/code>paquete.<\/p>\n<p>El componente de orden superior <code>[withSelect](https:\/\/developer.wordpress.org\/block-editor\/packages\/packages-data\/#withSelect)<\/code>proporciona a nuestro componente accesorios que, en nuestro caso, se obtienen de la publicaci\u00f3n meta. Usamos esto para obtener el valor de nuestra publicaci\u00f3n meta. Dentro <code>withSelect<\/code>podemos usar <code>select('core\/editor').getEditedPostAttribute('meta')<\/code>para obtener el meta de la publicaci\u00f3n actual.<\/p>\n<p>Por otro lado, <code>[withDispatch](https:\/\/developer.wordpress.org\/block-editor\/packages\/packages-data\/#withDispatch)<\/code>es un componente de orden superior que puede realizar acciones. En nuestro caso, queremos actualizar la publicaci\u00f3n meta cuando se cambia la configuraci\u00f3n del campo correspondiente en nuestra barra lateral. Dentro de este componente, usamos <code>dispatch('core\/editor').editPost()<\/code>para informar a WordPress para que env\u00ede una acci\u00f3n. Dentro del objeto que proporcionamos le decimos a WordPress que es meta que queremos actualizar.<\/p>\n<p>Finalmente, necesitamos combinar <code>withSelect<\/code>y <code>withDispatch<\/code>con nuestro componente que maneja el metacampo de publicaci\u00f3n (<code>CustomSidebarMetaComponent<\/code>). Para hacer esto usamos WordPress&#8217; <code>compose<\/code>del <code>wp.compose<\/code>paquete. La idea es esa <code>withSelect<\/code>y proporciona accesorios a <code>withDispatch<\/code>nuestro componente. proporciona el valor de la publicaci\u00f3n meta como accesorio y proporciona una funci\u00f3n a la que podemos llamar para actualizar el valor como accesorio. Configuramos estos accesorios en nuestro ToggleField y, correspondientemente.<code>CustomSidebarMetaComponent``withSelect``withDispatch``checked``onChange<\/code><\/p>\n<p>Eso es mucho de explicar. Veamos el c\u00f3digo real:<\/p>\n<pre><code>...\nconst { compose } = wp.compose;\nconst { withDispatch, withSelect } = wp.data;\n\u00a0\nconst CustomSidebarMetaComponent = (props) =&gt; {\n    return(\n        &lt;ToggleControl\n            label={__('My custom post meta', 'awp')}\n            checked={props.customPostMetaValue}\n            onChange={props.setCustomPostMeta}\n        \/&gt;\n    );\n}\n\u00a0\nconst CustomSidebarMeta = compose([\n    withSelect(select =&gt; {\n        return { customPostMetaValue: select('core\/editor').getEditedPostAttribute('meta')['awp_my_custom_meta'] }\n    }),\n    withDispatch(dispatch =&gt; {\n        return { \n            setCustomPostMeta: function(value) {\n                dispatch('core\/editor').editPost({ meta: { awp_my_custom_meta: value } });\n            }\n        }\n    })\n])(CustomSidebarMetaComponent);\n\u00a0\nconst CustomSidebarComponent = () =&gt; {\n    return(\n        ...\n        &lt;PanelBody\n            title={__('This is a panel section', 'awp')}\n            initialOpen={true}\n        &gt;\n            &lt;PanelRow&gt;\n                &lt;CustomSidebarMeta \/&gt;\n            &lt;\/PanelRow&gt;\n        &lt;\/PanelBody&gt;\n        ...<\/code><\/pre>\n<p>Empecemos desde el principio. Que est\u00e1 en la parte inferior. En la l\u00ednea <code>#36<\/code>, cambiamos el componente que representamos en nuestra barra lateral al componente que creamos con <code>compose<\/code>(en la l\u00ednea <code>#15<\/code>). El <code>CustomSidebarMeta<\/code>componente combinar\u00e1 los componentes <code>withSelect<\/code>y <code>withDispatch<\/code>y devolver\u00e1 el <code>CustomSidebarMetaComponent<\/code>.<\/p>\n<p>El <code>CustomSidebarMetaComponent<\/code>tendr\u00e1 acceso a la <code>customPostMetaValue<\/code>utiler\u00eda del <code>withSelect<\/code>, y la <code>setCustomPostMeta<\/code>utiler\u00eda de <code>withDispatch<\/code>Estos dos que usamos para la <code>checked<\/code>y <code>onChange<\/code>utiler\u00eda en el <code>ToggleField<\/code>.<\/p>\n<p>Tenga en cuenta que en l\u00ednea <code>#5<\/code>agregamos <code>props<\/code>como par\u00e1metros a los componentes para que los accesorios sean accesibles en el componente.<\/p>\n<h2>Conclusi\u00f3n y palabras finales<\/h2>\n<p>Espero que este tutorial te haya servido de algo. Esto es lo que logr\u00e9 comprender sobre el tema durante muchas pruebas y errores. Apenas hay documentaci\u00f3n sobre este tema por ah\u00ed todav\u00eda. Todav\u00eda estoy luchando con esto, especialmente cuando se trata de manejar de manera eficiente el meta de m\u00faltiples publicaciones. \u00a1Si logro aprender algunos buenos trucos, actualizar\u00e9 este tutorial seguro!<\/p>\n<p>Con suerte, al seguir este tutorial, deber\u00eda tener un c\u00f3digo que agregue con \u00e9xito una nueva barra lateral personalizada al editor de WordPress Gutenberg y, con suerte, con contenido y configuraciones significativos. Aqu\u00ed est\u00e1 el c\u00f3digo final para la barra lateral personalizada con el metacampo de publicaci\u00f3n.<\/p>\n<pre><code>const { registerPlugin } = wp.plugins;\nconst { __ } = wp.i18n;\nconst { Fragment } = wp.element;\nconst { PluginSidebarMoreMenuItem, PluginSidebar } = wp.editPost;\nconst { PanelBody, PanelRow, ToggleControl } = wp.components;\nconst { compose } = wp.compose;\nconst { withDispatch, withSelect } = wp.data;\n\u00a0\nconst CustomSidebarMetaComponent = (props) =&gt; {\n    return(\n        &lt;ToggleControl\n            label={__('My custom post meta', 'awp')}\n            checked={props.customPostMetaValue}\n            onChange={props.setCustomPostMeta}\n        \/&gt;\n    );\n}\n\u00a0\nconst CustomSidebarMeta = compose([\n    withSelect(select =&gt; {\n        return { customPostMetaValue: select('core\/editor').getEditedPostAttribute('meta')['awp_my_custom_meta'] }\n    }),\n    withDispatch(dispatch =&gt; {\n        return { \n            setCustomPostMeta: function(value) {\n                dispatch('core\/editor').editPost({ meta: { awp_my_custom_meta: value } });\n            }\n        }\n    })\n])(CustomSidebarMetaComponent);\n\u00a0\nconst CustomSidebarComponent = () =&gt; {\n    return(\n        &lt;Fragment&gt;\n            &lt;PluginSidebarMoreMenuItem \n                target='awp-custom-sidebar'\n                icon='carrot'\n            &gt;{__('My Custom sidebar', 'awp')}&lt;\/PluginSidebarMoreMenuItem&gt;\n            &lt;PluginSidebar \n                name=\"awp-custom-sidebar\" \n                title={__('My Custom sidebar', 'awp')}\n            &gt;                \n                &lt;PanelBody\n                    title={__('This is a panel section', 'awp')}\n                    initialOpen={true}\n                &gt;\n                    &lt;PanelRow&gt;\n                        &lt;CustomSidebarMeta \/&gt;\n                    &lt;\/PanelRow&gt;\n                &lt;\/PanelBody&gt;\n                &lt;PanelBody\n                    title={__('Another section', 'awp')}\n                    initialOpen={false}\n                &gt;\n                    &lt;PanelRow&gt;\n                        This is a collapsed section by default.\n                    &lt;\/PanelRow&gt;\n                &lt;\/PanelBody&gt;\n            &lt;\/PluginSidebar&gt;\n        &lt;\/Fragment&gt;\n    );\n}\n\u00a0\nregisterPlugin('awp-customsidebar', {\n    render: CustomSidebarComponent,\n    icon: 'carrot'\n});<\/code><\/pre>\n<pre><code>add_action('enqueue_block_editor_assets', function() {\n    wp_enqueue_script('awp-sidebar-plugin', get_stylesheet_directory_uri(). '\/assets\/js\/sidebar-plugin.js', ['wp-plugins', 'wp-edit-post']);\n});\n\u00a0\nadd_action('init', function() {\n    register_meta('post', 'awp_my_custom_meta', [\n        'show_in_rest' =&gt; true,\n        'single' =&gt; true,\n        'type' =&gt; 'boolean'\n    ]);\n});<\/code><\/pre>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Un tutorial sobre c\u00f3mo agregar una barra lateral personalizada al Inspector en WordPress Gutenberg. En el interior, implementaremos un campo conectado a una publicaci\u00f3n meta.<\/p>\n","protected":false},"author":1,"featured_media":223619,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[892,892,810,716,716,935,935,1110,810,840,840,861,861],"tags":[1172],"class_list":{"0":"post-233661","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-codigo","9":"category-complementos","10":"category-desarrollador","12":"category-gutenberg-2","14":"category-n-a","16":"category-tutoriales","18":"category-wordpress-2","20":"tag-affiai-es"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/233661","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=233661"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/233661\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/223619"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=233661"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=233661"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=233661"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}