Lo que se me ocurrió hacer para mi bloque fue un bloque sencillo que pueda funcionar como un Call to Action dinámico, para usarse en artículos de blog o en páginas del sitio:
Éste tiene un título, un texto y un botón. El usuario puede elegir el título, el texto, el texto del botón y el link del botón.
Comencé haciendo un CodePen de mi bloque, para ver los dos estilos y generar el markup necesario. Ahí puede verse el html y el scss de mi bloque.
Mi edit.js terminó viéndose así:
import {InspectorControls} from "@wordpress/block-editor";
import {Panel, PanelBody, TextControl, TextareaControl} from "@wordpress/components";
const Edit = (props) => {
const {className, attributes, setAttributes} = props;
const {title, text, buttonText, buttonLink} = attributes;
return(
<>
<InspectorControls>
<Panel>
<PanelBody title="CTA Options" initialOpen={true}>
<TextControl
label= "Title"
value= {title}
onChange= {(newTitle) => setAttributes({title: newTitle})}
/>
<TextareaControl
label= "CTA Text"
help= "Please, enter the text for the CTA"
value= {text}
onChange= {(newText) => setAttributes({text: newText})}
/>
<TextControl
label="Button text"
value= {buttonText}
onChange={(newButtonText) => setAttributes({buttonText: newButtonText})}
/>
<TextControl
label="Button link"
value= {buttonLink}
onChange={(newButtonLink) => setAttributes({buttonLink: newButtonLink})}
/>
</PanelBody>
</Panel>
</InspectorControls>
<div className={className}>
<h2 className="cta__title">
{title}
</h2>
<p className="cta__text">
{text}
</p>
<button type="button" className="cta__btn" href={buttonLink}>
{buttonText}
</button>
</div>
</>
);
}
export default Edit;
Vi que adicional a “TextControl”, existe “TextareaControl”, así que lo importé también porque me pareció un input más adecuado para la longitud del copy que un user podría añadir en el campo “CTA text”.
Mi index.php luce así:
<?php
add_action('init', 'plz_cta_blocks');
function plz_cta_blocks(){
$assets_file = include_once PLZ_PATH . "/blocks/cta/build/index.asset.php";
wp_register_script(
'plz-cta-block',
plugins_url('./build/index.js', __FILE__),
$assets_file['dependencies'],
$assets_file['version']
);
wp_register_style(
"g-font",
"https://fonts.googleapis.com/css2?family=Quicksand:wght@300;400;500;600;700",
array(),
false,
'all');
wp_register_style(
'plz-cta-block',
plugins_url('./build/index.css', __FILE__),
array('g-font'),
$assets_file['version']
);
register_block_type(
'plz/cta',
array(
'editor_script' => 'plz-cta-block',
'style' => 'plz-cta-block'
));
}
Incluí la fuente porque aunque esta se carga en el front end desde el theme, no era visible en el editor, pero no sé si este sea el procedimiento ideal para esto.
Así se ven las opciones del bloque desde el editor:
Y así es como se ven los dos estilos del bloque en el front end:
Muchas gracias Lucio, tenía bastante tiempo tratando de aprender todo este proceso!
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?