Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Gutenberg Block Editor Basics
📖 Scenario: You are creating a simple custom Gutenberg block for WordPress. This block will display a greeting message that the user can customize.
🎯 Goal: Build a basic Gutenberg block that shows a customizable greeting message using block attributes and edit/save functions.
📋 What You'll Learn
Create a block with a text attribute called greeting initialized to 'Hello, world!'
Add a text input control in the block editor to update the greeting attribute
Render the greeting text inside a <p> tag in the editor and on the front-end
Register the block properly with registerBlockType
💡 Why This Matters
🌍 Real World
Custom Gutenberg blocks let WordPress site owners add unique content blocks tailored to their needs without coding each time.
💼 Career
Knowing how to build Gutenberg blocks is essential for WordPress developers creating themes and plugins that enhance site editing experiences.
Progress0 / 4 steps
1
Set up block attributes
Create a block registration using registerBlockType with the name myplugin/greeting-block. Define an attribute called greeting of type string with a default value of 'Hello, world!'.
Wordpress
Hint
Use registerBlockType with the block name and define attributes inside the options object.
2
Add edit function with text control
In the edit function, add a TextControl from @wordpress/components that updates the greeting attribute. Use props.attributes.greeting as the value and props.setAttributes to update it on change.
Wordpress
Hint
Use props.attributes.greeting for the value and props.setAttributes to update it inside onChange.
3
Render greeting in save function
In the save function, return a <p> element that displays the greeting attribute value using props.attributes.greeting.
Wordpress
Hint
Return a <p> element with the greeting text inside the save function.
4
Complete block registration
Ensure the block registration includes the edit and save functions properly returning the JSX elements. The block should be fully functional with attribute, edit, and save.
Wordpress
Hint
Make sure the block registration includes all parts: attributes, edit, and save functions.
Practice
(1/5)
1. What is the main purpose of Gutenberg blocks in WordPress?
easy
A. To build content visually by stacking pieces called blocks
B. To write PHP code for themes
C. To manage user roles and permissions
D. To create database tables
Solution
Step 1: Understand Gutenberg blocks concept
Gutenberg blocks allow users to build content visually by stacking blocks instead of writing code.
Step 2: Compare options with this concept
Options A, B, and D relate to other WordPress functions, not content building with blocks.
Final Answer:
To build content visually by stacking pieces called blocks -> Option A
Quick Check:
Gutenberg blocks = Visual content building [OK]
Hint: Blocks stack visually to build content, not code or settings [OK]
Common Mistakes:
Confusing blocks with coding PHP
Thinking blocks manage users or database
Mixing blocks with theme development
2. Which of the following is the correct way to define the edit function in a custom Gutenberg block?
easy
A. function edit() {
Hello Block
; }
B. def edit(): return '
Hello Block
'
C. edit = function() { echo 'Hello Block'; }
D. const edit = () => { return
Hello Block
; };
Solution
Step 1: Identify JavaScript syntax for Gutenberg blocks
Gutenberg blocks use modern JavaScript with arrow functions for edit.
Step 2: Check each option's syntax
const edit = () => { return <p>Hello Block</p>; }; uses arrow function returning JSX, which is correct. function edit() { <p>Hello Block</p>; } does not return the JSX element. edit = function() { echo 'Hello Block'; } uses PHP syntax, and B uses Python syntax, both invalid here.
The function returns a paragraph element with the text 'Welcome to Gutenberg!'.
Step 2: Understand editor rendering behavior
The editor shows the returned JSX content, so a paragraph with that text appears.
Final Answer:
A paragraph with text 'Welcome to Gutenberg!' -> Option A
Quick Check:
JSX return = paragraph text shown [OK]
Hint: JSX returned in edit shows as block content in editor [OK]
Common Mistakes:
Thinking it renders a button
Assuming syntax error without checking code
Expecting empty content when JSX is returned
4. What is wrong with this Gutenberg block save function?
const save = () => { <div>Saved content</div>; };
medium
A. save function should be async
B. Using <div> instead of <p> tag
C. Missing return statement in the save function
D. save function cannot use JSX
Solution
Step 1: Check function syntax for returning JSX
The save function has JSX but no return statement, so it returns undefined.
Step 2: Understand save function requirements
Save must return JSX to render saved content; missing return causes no output.
Final Answer:
Missing return statement in the save function -> Option C
Quick Check:
JSX must be returned in save function [OK]
Hint: Always return JSX in save function to render content [OK]
Common Mistakes:
Forgetting return keyword
Thinking tag choice causes error
Assuming save must be async
5. You want to create a custom Gutenberg block that shows a user-editable heading and paragraph. Which two functions must you define to make this block work properly?
hard
A. registerBlockType and enqueueScripts only
B. edit and save functions to handle editing and saving content
C. PHP render callback and CSS styles only
D. enqueueScripts and enqueueStyles only
Solution
Step 1: Identify core Gutenberg block functions
Every block needs an edit function to show editing UI and a save function to define saved content.
Step 2: Compare options with required functions
edit and save functions to handle editing and saving content correctly lists edit and save. Other options mention scripts or PHP but miss these core functions.
Final Answer:
edit and save functions to handle editing and saving content -> Option B
Quick Check:
Blocks need edit + save functions [OK]
Hint: Blocks always need edit and save functions [OK]