Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to "manually" (programmatically) insert a block in Gutenberg?

Gutenberg's API is quiet obscure and I can't figure how to create and append a block to a post.

I've found the wp.blocks.createBlock('core/paragraph', {content: "blabla"}); which returns a pretty block object, but does not append any content to the post.

I would like to insert a simple paragraph with some custom content just by clicking a button.

like image 264
Bastien Ho Avatar asked Apr 27 '18 15:04

Bastien Ho


People also ask

How do I add a custom block in WordPress?

Using Your Custom Block in WordPressSimply edit any post or page where you want to use this block. Click on the add new block button and search for your block by typing its name or keywords. After you insert the block to the content area, you'll see the block fields you created for this custom block.


2 Answers

var content = "Test content";
var el = wp.element.createElement;
var name = 'core/paragraph';
// var name = 'core/html';
insertedBlock = wp.blocks.createBlock(name, {
    content: content,
});
wp.data.dispatch('core/editor').insertBlocks(insertedBlock);
like image 190
user9515876 Avatar answered Oct 03 '22 05:10

user9515876


Maybe this source code can help https://github.com/WordPress/gutenberg/blob/master/editor/components/inserter/index.js

Look at the end of the file for the part

onInsertBlock: ( item ) => {
        const { insertionPoint, selectedBlock } = ownProps;
        const { index, rootUID, layout } = insertionPoint;
        const { name, initialAttributes } = item;
        const insertedBlock = createBlock( name, { ...initialAttributes, layout } );
        if ( selectedBlock && isUnmodifiedDefaultBlock( selectedBlock ) ) {
            return dispatch( 'core/editor' ).replaceBlocks( selectedBlock.uid, insertedBlock );
        }
        return dispatch( 'core/editor' ).insertBlock( insertedBlock, index, rootUID );
    },

To be more specific

return dispatch( 'core/editor' ).insertBlock( insertedBlock, index, rootUID );

Hope helps figuring out your problem, since it´s doing the same thing you want to achieve

like image 22
Erik Kubica Avatar answered Oct 03 '22 05:10

Erik Kubica