Bird
Raised Fist0
Wordpressframework~10 mins

Gutenberg block editor basics in Wordpress - Interactive Code Practice

Choose your learning style10 modes available

Start learning this pattern below

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
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to register a new block in Gutenberg.

Wordpress
registerBlockType('myplugin/my-block', { title: 'My Block', category: [1] });
Drag options to blanks, or click blank then click option'
A'common'
B'widgets'
C'formatting'
D'layout'
Attempts:
3 left
💡 Hint
Common Mistakes
Using a category that does not exist or is misspelled.
2fill in blank
medium

Complete the code to create a block edit function that returns a paragraph block.

Wordpress
const Edit = () => { return <p>[1]</p>; };
Drag options to blanks, or click blank then click option'
A'Sample text'
B'Edit your content here'
C'This is a block'
D'Hello World!'
Attempts:
3 left
💡 Hint
Common Mistakes
Leaving the paragraph empty or using invalid JSX.
3fill in blank
hard

Fix the error in the block save function to correctly save a heading block.

Wordpress
const save = () => { return <h2>[1]</h2>; };
Drag options to blanks, or click blank then click option'
A{'Saved Heading'}
BSaved Heading
C'Saved Heading'
D<strong>Saved Heading</strong>
Attempts:
3 left
💡 Hint
Common Mistakes
Omitting quotes causing syntax errors.
4fill in blank
hard

Fill both blanks to correctly import and use the RichText component in a block edit function.

Wordpress
import { [1] } from '@wordpress/block-editor';

const Edit = () => {
  return <[2] tagName="p" value="Editable text" />;
};
Drag options to blanks, or click blank then click option'
ARichText
BTextControl
CRichText.Content
DPlainText
Attempts:
3 left
💡 Hint
Common Mistakes
Importing one component but using another in JSX.
5fill in blank
hard

Fill all three blanks to correctly register a block with attributes and save function using RichText.

Wordpress
registerBlockType('myplugin/my-richtext-block', {
  attributes: {
    content: { type: [1] }
  },
  edit: ({ attributes, setAttributes }) => {
    return <RichText tagName="p" value={attributes.content} onChange={content => setAttributes({ content })} />;
  },
  save: ({ attributes }) => {
    return <RichText.Content tagName="p" value={attributes.[2] />;
  }
});
Drag options to blanks, or click blank then click option'
Astring
Bcontent
Ctext
Dvalue
Attempts:
3 left
💡 Hint
Common Mistakes
Using wrong attribute names or types causing block save errors.

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

  1. Step 1: Understand Gutenberg blocks concept

    Gutenberg blocks allow users to build content visually by stacking blocks instead of writing code.
  2. Step 2: Compare options with this concept

    Options A, B, and D relate to other WordPress functions, not content building with blocks.
  3. Final Answer:

    To build content visually by stacking pieces called blocks -> Option A
  4. 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

  1. Step 1: Identify JavaScript syntax for Gutenberg blocks

    Gutenberg blocks use modern JavaScript with arrow functions for edit.
  2. 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.
  3. Final Answer:

    const edit = () => { return <p>Hello Block</p>; }; -> Option D
  4. Quick Check:

    Gutenberg edit uses JS arrow functions [OK]
Hint: Gutenberg edit uses JavaScript arrow functions returning JSX [OK]
Common Mistakes:
  • Using PHP or Python syntax instead of JavaScript
  • Not returning JSX properly
  • Using old function syntax without React import
3. Given this simple block edit function, what will be rendered in the editor?
const edit = () => {
return <p>Welcome to Gutenberg!</p>;
};
medium
A. A paragraph with text 'Welcome to Gutenberg!'
B. An empty block with no content
C. A syntax error preventing rendering
D. A button labeled 'Welcome to Gutenberg!'

Solution

  1. Step 1: Analyze the edit function return value

    The function returns a paragraph element with the text 'Welcome to Gutenberg!'.
  2. Step 2: Understand editor rendering behavior

    The editor shows the returned JSX content, so a paragraph with that text appears.
  3. Final Answer:

    A paragraph with text 'Welcome to Gutenberg!' -> Option A
  4. 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

  1. Step 1: Check function syntax for returning JSX

    The save function has JSX but no return statement, so it returns undefined.
  2. Step 2: Understand save function requirements

    Save must return JSX to render saved content; missing return causes no output.
  3. Final Answer:

    Missing return statement in the save function -> Option C
  4. 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

  1. 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.
  2. 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.
  3. Final Answer:

    edit and save functions to handle editing and saving content -> Option B
  4. Quick Check:

    Blocks need edit + save functions [OK]
Hint: Blocks always need edit and save functions [OK]
Common Mistakes:
  • Thinking only scripts or PHP are enough
  • Forgetting save function
  • Confusing enqueueing scripts with block logic