{"id":228480,"date":"2022-10-20T19:44:00","date_gmt":"2022-10-20T16:44:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228480"},"modified":"2022-11-09T02:39:05","modified_gmt":"2022-11-08T23:39:05","slug":"formatea-el-contenido-de-tu-publicacion-con-registerformattype","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/formatea-el-contenido-de-tu-publicacion-con-registerformattype\/","title":{"rendered":"Formatea el contenido de tu publicaci\u00f3n con registerFormatType"},"content":{"rendered":"\n<p>Puede agregar botones personalizados a la barra de herramientas en WordPress Gutenberg con bastante facilidad, pero \u00bfsab\u00eda que tambi\u00e9n puede agregar controles de tipo de formato al men\u00fa de formato?<\/p>\n<p>En esta gu\u00eda, veremos c\u00f3mo agregar un control de formato <code>registerFormatType<\/code>que nos permitir\u00e1 elegir el color de resaltado del texto seleccionado usando la <code>&lt;mark&gt;<\/code>etiqueta HTML sem\u00e1ntica.<\/p>\n<p>Todo el c\u00f3digo utilizado en este tutorial se puede encontrar en el complemento <strong>gratuito<\/strong> <a href=\"https:\/\/wholesomecode.ltd\/plugins\/highlighter\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">&#8216;Highlighter&#8217;<\/a>.<\/p>\n<p>Vale la pena se\u00f1alar que no solo puede aplicar formatos al texto seleccionado dentro de sus bloques, sino que tambi\u00e9n puede usarlos para insertar otros objetos directamente en los bloques, como im\u00e1genes e \u00edconos en l\u00ednea.<\/p>\n<p>Aplicar un tipo de formato usando el complemento Highlighter.<\/p>\n<p>El video de arriba muestra el complemento Highlighter y nuestro tipo de formato en acci\u00f3n. Saltemos a ello.<\/p>\n<h2>requisitos previos<\/h2>\n<ul>\n<li>Lea la gu\u00eda <a href=\"https:\/\/wholesomecode.ltd\/guides\/creating-plugin-wordpress-gutenberg\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Creaci\u00f3n de un complemento para el editor de bloques de WordPress (Gutenberg)<\/a> para que pueda comenzar a crear el complemento.<\/li>\n<li>Opcionalmente <a href=\"https:\/\/wholesomecode.ltd\/plugins\/highlighter\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">, descargue el complemento gratuito &#8216;Highlighter&#8217;<\/a> y mire el archivo<code>\/src\/formats\/highlight.js<\/code><\/li>\n<\/ul>\n<h2>Configurar los archivos del complemento<\/h2>\n<p>Si ha seguido el requisito previo y la gu\u00eda del complemento, debemos seguir adelante y eliminar un mont\u00f3n de esos archivos.<\/p>\n<ul>\n<li>En la carpeta src, elimine todo excepto los archivos <code>index.js<\/code>y .<code>style.scss<\/code><\/li>\n<li>Elimine el contenido de <code>index.js<\/code>y por <code>style.scss<\/code>completo.<\/li>\n<li>En la <code>\/build<\/code>carpeta elimina todos los archivos. Los regeneraremos m\u00e1s tarde.<\/li>\n<li>quitar <code>block.json<\/code>_ No estamos construyendo un bloque hoy, as\u00ed que no necesitamos esto.<\/li>\n<\/ul>\n<h3>Poner en cola los scripts<\/h3>\n<p>En el archivo principal del complemento (<code>wholesome-plugin.php<\/code>si ha seguido el tutorial anterior al pie de la letra), agregue el siguiente c\u00f3digo para poner en cola JavaScript y CSS para su complemento.<\/p>\n<pre><code>&lt;?php\n\nfunction setup(): void {\n\n    load_plugin_textdomain( 'wholesome-highlighter', false, ROOT_DIR. 'languages' );\n\n    add_action( 'enqueue_block_editor_assets', __NAMESPACE__. 'enqueue_block_editor_assets', 10 );\n\n    add_action( 'enqueue_block_assets', __NAMESPACE__. 'enqueue_block_styles', 10 );\n}\n\nfunction enqueue_block_editor_assets(): void {\n\n    $asset_path = ROOT_DIR. '\/build\/index.asset.php';\n\n    if (! file_exists( $asset_path)) {\n        throw new Error(\n            esc_html__( 'You need to run `npm start` or `npm run build` in the root of the plugin \"wholesome-highlighter\" first.', 'wholesome-highlighter') );\n    }\n\n    $scripts = '\/build\/index.js';\n    $assets  = include $asset_path;\n\n    wp_enqueue_script(\n        PLUGIN_SLUG. '-block-scripts',\n        plugins_url( $scripts, ROOT_FILE ),\n        $assets['dependencies'],\n        $assets['version'],\n        false\n    );\n\n    wp_set_script_translations(\n        PLUGIN_SLUG. '-block-scripts',\n        'wholesome-highlighter',\n        ROOT_DIR. 'languages'\n    );\n}\nadd_action( 'plugins_loaded', __NAMESPACE__. 'setup' );\n\nfunction enqueue_block_styles(): void {\n\n    $styles = '\/build\/style-index.css';\n\n    wp_enqueue_style(\n        PLUGIN_SLUG. '-block-styles',\n        plugins_url( $styles, ROOT_FILE ),\n        array(),\n        filemtime( ROOT_DIR. $styles) );\n}\n\nadd_action( 'plugins_loaded', __NAMESPACE__. 'setup' );\n<\/code><\/pre>\n<ol>\n<li>Registrar el tipo de formato<\/li>\n<\/ol>\n<hr \/>\n<p>Abra su <code>\/src\/index.js<\/code>archivo y agregue el siguiente c\u00f3digo.<\/p>\n<pre><code>\nimport { RichTextToolbarButton } from '@wordpress\/block-editor';\nimport { __ } from '@wordpress\/i18n';\n\nconst HighlighterButton = ({ isActive, onChange, value}) =&gt; {\n    return (&lt;RichTextToolbarButton\n            icon='edit'\n            isActive={ isActive }\n            title={ __( 'Highlight', 'wholesome-highlighter') }\n        \/&gt;) };\n<\/code><\/pre>\n<p>Esto crea nuestro bot\u00f3n resaltador que aparecer\u00e1 en el men\u00fa de formato. Ahora usaremos <code>registerFormatType<\/code>para registrar el formato.<\/p>\n<p>Primero, necesitamos editar nuestras importaciones para importar tambi\u00e9n <code>registerFormatType<\/code>desde <code>@wordpress\/rich-text<\/code>.<\/p>\n<pre><code>import { registerFormatType, toggleFormat } from '@wordpress\/rich-text';\n<\/code><\/pre>\n<p>Luego registre el formato agregando el nombre del formato (<code>wholesome\/highlighter<\/code>) y pasando un objeto con las siguientes propiedades. <code>toggleFormat<\/code>se usar\u00e1 m\u00e1s tarde para nuestro evento de clic.<\/p>\n<ul>\n<li><code>className<\/code>: El nombre de la clase que se agregar\u00e1 a la etiqueta que rodea el texto resaltado.<\/li>\n<li><code>edit<\/code>: El bot\u00f3n que registramos previamente.<\/li>\n<li><code>tagName<\/code>: El tipo de etiqueta que se aplicar\u00e1 al texto resaltado. En este caso, estamos usando <code>&lt;mark&gt;<\/code>el marcado sem\u00e1nticamente correcto para resaltar un texto.<\/li>\n<li><code>title<\/code>: El t\u00edtulo del formato.<\/li>\n<\/ul>\n<pre><code>\nregisterFormatType(\n    'wholesome\/highlighter', {\n        className: 'wholesome-highlight',\n        edit: HighlighterButton,\n        tagName: 'mark',\n        title: __( 'Highlight', 'wholesome-highlighter' ),\n    }\n);\n<\/code><\/pre>\n<h3>Manejar el clic<\/h3>\n<p>Ahora que hemos agregado el bot\u00f3n al men\u00fa de formato, todo lo que tenemos que hacer es manejar el evento de clic.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-168405-61e7cb11d77e2.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-168405-61e7cb11d77e2.png\" alt=\"Formatea el contenido de tu publicaci\u00f3n con registerFormatType\" ><\/a><\/p>\n<p>Edite <code>RichTextToolbarButton<\/code>y agregue el <code>onClick<\/code>evento.<\/p>\n<pre><code>&lt;RichTextToolbarButton\n  icon='edit'\n  isActive={ isActive }\n  onClick={() =&gt; {\n    onChange(\n      toggleFormat( value, {\n        type: 'wholesome\/highlighter',\n      }) );\n  } }\n  title={ __( 'Highlight', 'wholesome-highlighter') }\n\/&gt;\n<\/code><\/pre>\n<p>En el disparador llamamos a <code>toggleFormat<\/code>pasar el valor (que es el texto resaltado) y pasamos un objeto con la <code>type<\/code>propiedad establecida en el nombre de nuestro formato.<\/p>\n<p>Ahora, cuando se hace clic inicialmente en el bot\u00f3n, se aplicar\u00e1 la <code>&lt;mark&gt;<\/code>etiqueta HTML al texto seleccionado y, cuando se vuelva a hacer clic, cambiar\u00e1 el formato al eliminarlo nuevamente.<\/p>\n<p>Para ver el c\u00f3digo en su totalidad y ver las \u00faltimas actualizaciones <a href=\"https:\/\/github.com\/wholesomecode\/wholesome-highlighter\/blob\/master\/src\/formats\/highlight.js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">, eche un vistazo al <code>\/src\/formats\/highlight.js<\/code>archivo completo dentro del complemento Highlighter<\/a>.<\/p>\n<p>El c\u00f3digo anterior registrar\u00e1 el bloque para todos los tipos de bloque. Sin embargo, si desea que el bloque solo aparezca en ciertos tipos de bloques, tambi\u00e9n puede hacerlo.<\/p>\n<p>Para hacer esto, necesitaremos usar el componente de orden superior ifCondition y useSelect para determinar el tipo de bloque que hemos seleccionado.<\/p>\n<p>Para hacer esto, agregue las siguientes importaciones en la parte superior de su archivo.<\/p>\n<pre><code>import { ifCondition  } from '@wordpress\/compose';\nimport { useSelect } from '@wordpress\/data';\n<\/code><\/pre>\n<p>Encima del <code>registerFormatType<\/code>bloque de c\u00f3digo, agregue el siguiente bloque de c\u00f3digo de redacci\u00f3n.<\/p>\n<pre><code>\nvar HighlighterButtonContainer = ifCondition( (props) =&gt; {\n    const selectedBlock = useSelect( (select) =&gt; select('core\/block-editor').getSelectedBlock() );\n    return (selectedBlock &amp;&amp;\n        selectedBlock.name === 'core\/paragraph'\n    ); \n} )( HighlighterButton );\n<\/code><\/pre>\n<p>Como puede ver en el c\u00f3digo, si el bloque seleccionado es <code>core\/paragraph<\/code>el componente de orden superior <code>ifCondition<\/code>, devolver\u00e1 verdadero y, por lo tanto, permitir\u00e1 que el bot\u00f3n se procese.<\/p>\n<p>Todo lo que tenemos que hacer ahora es pasar el Contenedor que acabamos de crear al <code>registerBlockType<\/code>bloque de c\u00f3digo y nuestro c\u00f3digo estar\u00e1 terminado.<\/p>\n<pre><code>\nregisterFormatType(\n    'wholesome\/highlighter', {\n        className: 'wholesome-highlight',\n        edit: HighlighterButtonContainer,\n        tagName: 'mark',\n        title: __( 'Highlight', 'wholesome-highlighter' ),\n    }\n);\n<\/code><\/pre>\n<p>Para ver el c\u00f3digo completo <a href=\"https:\/\/github.com\/wholesomecode\/wholesome-highlighter\/blob\/master\/src\/formats\/highlight-paragraph.js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">, eche un vistazo al <code>\/src\/formats\/highlight-paragraph.js<\/code>archivo en el complemento Highlighter<\/a>.<\/p>\n<ul>\n<li>Lleve las cosas m\u00e1s lejos <a href=\"https:\/\/wholesomecode.ltd\/blog\/use-a-modal-popup-to-add-additional-attributes-with-registerblockformat\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">agregando atributos personalizados a su formato personalizado con una ventana emergente modal<\/a>.<\/li>\n<li><a href=\"https:\/\/wholesomecode.ltd\/guides\/add-sidebar-controls-to-your-custom-wordpress-block-with-inspectorcontrols\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Agregue una barra lateral de bloque con InspectorControls<\/a><\/li>\n<li>Mire la creaci\u00f3n de una <a href=\"https:\/\/wholesomecode.ltd\/guides\/create-settings-page-wordpress-gutenberg-components\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">p\u00e1gina de opciones y configuraciones usando componentes de Gutenberg<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/wholesomecode.ltd\" class=\"external external_icon\">wholesomecode.ltd<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Puede agregar botones personalizados a la barra de herramientas en WordPress Gutenberg con bastante facilidad, pero \u00bfsab\u00eda que tambi\u00e9n puede agregar controles de tipo de formato al men\u00fa de formato? En esta gu\u00eda vamos a&#8230;<\/p>\n","protected":false},"author":1,"featured_media":221122,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[892,716,747,914,840],"tags":[1172],"class_list":["post-228480","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-desarrollador","category-fuente-abierta","category-otro","category-tutoriales","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/228480","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=228480"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/228480\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/221122"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=228480"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=228480"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=228480"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}