Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Frank Goossens (Futta) function to extract blocks from WP Gutenberg (Proof of Concept) as https://blog.futtta.be/2018/01/25/how-to-extract-blocks-from-gutenberg/
// proof-of-concept to extract all WordPress Gutenberg's blocks as array
// author: Frank Goossens (Futta)
// source: https://blog.futtta.be/2018/01/25/how-to-extract-blocks-from-gutenberg/
add_action('the_content','gutenprint',10,1);
function gutenprint($html) {
// check if we need to and can load the Gutenberg PEG parser
if ( !class_exists("Gutenberg_PEG_Parser") && file_exists(WP_PLUGIN_DIR."/gutenberg/lib/load.php") ) {
include_once(WP_PLUGIN_DIR."/gutenberg/lib/load.php");
}
if ( class_exists("Gutenberg_PEG_Parser") && is_single() ) {
// do the actual parsing
$parser = new Gutenberg_PEG_Parser;
$result = $parser->parse( _gutenberg_utf8_split( $html ) );
// we need to see the HTML, not have it rendered, so applying htmlentities
array_walk_recursive($result,
function (&$result) { $result = htmlentities($result); }
);
// and dump the array to the screen
echo "<h1>Gutenprinter reads:</h1><pre>";
var_dump($result);
echo "</pre>";
} else {
echo "Not able to load Gutenberg parser, are you sure you have Gutenberg installed?";
}
// remove filter to avoid double output
remove_filter('the_content','gutenprint');
// and return the HTML
return $html;
}
@gtamborero

This comment has been minimized.

Copy link

@gtamborero gtamborero commented Dec 4, 2018

Thanks!
In my case I have had to add this to make it work:
include_once(WP_PLUGIN_DIR."/gutenberg/lib/parser.php");
Maybe is because i'm doing it outside functions.php

UPDATE: It works only on gutenberg plugin. Not over Wordpress 5.0...

@jnz31

This comment has been minimized.

Copy link

@jnz31 jnz31 commented Mar 4, 2019

here is a solution that works in wordpress 5

add_action('the_content','gutenprint',10,1);
function gutenprint($html) {
// check if we need to and can load the WP_Block_Parser
if ( !class_exists("WP_Block_Parser") && file_exists(ABSPATH . WPINC . '/class-wp-block-parser.php') ) {
    include_once( ABSPATH . WPINC . '/class-wp-block-parser.php' );
}

if ( class_exists("WP_Block_Parser") && is_single() ) {
    // do the actual parsing
    $parser = new WP_Block_Parser;
    $result = $parser->parse( $html );

    // we need to see the HTML, not have it rendered, so applying htmlentities
    array_walk_recursive($result,
        function (&$result) { $result = htmlentities($result); }
    );

    // and dump the array to the screen
    echo "<h1>Gutenprinter reads:</h1><pre>";
    var_dump($result);
    echo "</pre>";
} else {
    echo "Not able to load Gutenberg parser, are you sure you have Gutenberg installed?";
}

// remove filter to avoid double output
remove_filter('the_content','gutenprint');

// and return the HTML
return $html;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.