{"id":468,"date":"2021-07-27T03:08:18","date_gmt":"2021-07-27T08:08:18","guid":{"rendered":"https:\/\/spiga.mx\/?p=468"},"modified":"2022-09-10T22:05:34","modified_gmt":"2022-09-11T03:05:34","slug":"como-extraer-bloques-de-gutenberg-wordpress-para-poder-utilizarlos-en-otro-lado","status":"publish","type":"post","link":"https:\/\/spiga.mx\/como-extraer-bloques-de-gutenberg-wordpress-para-poder-utilizarlos-en-otro-lado\/","title":{"rendered":"C\u00f3mo extraer bloques de Gutenberg WordPress para poder utilizarlos en otro lado"},"content":{"rendered":"\n
En este tutorial te explicaremos la forma en la que puedes extraer bloques del editor Gutenberg para que puedas utilizarlos como extracto o de la forma en la que prefieras, incluso se puede hacer un TOC.<\/abbr><\/p>\n\n\n\n Lo primero que necesitaremos es extraer todos los bloques que contiene nuestra entrada:<\/p>\n\n\n\n Esto nos regresar\u00e1 un arreglo con todos los bloques que existen en nuestro contenido, cada uno de los bloques cuenta con su respectiva informaci\u00f3n como:<\/p>\n\n\n\n El elemento innerHTML<\/strong> es una cadena de contenido HTML, mientras que innerContent<\/strong> es una arreglo de cadenas HTML.<\/p>\n\n\n\n Ahora vamos a suponer que queremos extraer todos los bloques de una entrada en espec\u00edfico, para eso utilizamos:<\/p>\n\n\n\n Con este c\u00f3digo nos traemos e imprimimos todos los blocks bloques de la entrada con el ID 1.<\/p>\n\n\n\n Ahora vamos a probar con el siguiente c\u00f3digo para extraer \u00fanicamente los p\u00e1rrafos de nuestra entrada, para eso utilizamos lo siguiente:<\/p>\n\n\n\n Y ahora vamos a probar extraer todas las cabeceras (h2, h3, h4, h5 y h6)<\/p>\n\n\n\n En el caso de las cabeceras podemos ver que existen atributos a los cu\u00e1les podemos acceder, por ejemplo si solo queremos obtener las cabeceras que pertenecen al nivel 2 (H2).<\/p>\n\n\n\n Con esta funci\u00f3n podemos extraer cualquiera de los bloques generales de nuestras entradas. <\/p>\n\n\n\n Utilizamos un Ojo con el par\u00e1metro de $render:<\/strong> Para las galer\u00edas, bloques con im\u00e1genes o din\u00e1micos habr\u00e1 que ponerlo en true para que se imprima el bloque, en otro tutorial veremos como extraer la galer\u00eda y mostrarla de una forma personalizada.<\/p>\n\n\n\n En el siguiente ejemplo estamos mostrando el primer p\u00e1rrafo que se encuentre en nuestro art\u00edculo.<\/p>\n\n\n\n Ahora hagamos esto m\u00e1s divertido, debemos obtener el extracto de una entrada el extracto de una entrada, para eso podemos tener varias opciones que tendr\u00e1n prioridad:<\/p>\n\n\n\n Aqu\u00ed tienen un listado de los bloques por default con los que cuenta gutenberg que pueden jugar utilizando las funciones de arriba.<\/p>\n\n\n\n En este tutorial te explicaremos la forma en la que puedes extraer bloques del editor Gutenberg para que puedas utilizarlos como extracto o de la forma en la que prefieras, incluso se puede hacer un TOC. Lo primero que necesitaremos es extraer todos los bloques que contiene nuestra entrada: Esto nos regresar\u00e1 un arreglo con … Continuar<\/a><\/p>\n","protected":false},"author":1,"featured_media":470,"comment_status":"open","ping_status":"open","sticky":true,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/i0.wp.com\/spiga.mx\/wp-content\/uploads\/2021\/07\/extraer-gutenberg-blocks.png?fit=1200%2C630&ssl=1","jetpack_shortlink":"https:\/\/wp.me\/pcaTtO-7y","_links":{"self":[{"href":"https:\/\/spiga.mx\/wp-json\/wp\/v2\/posts\/468"}],"collection":[{"href":"https:\/\/spiga.mx\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/spiga.mx\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/spiga.mx\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/spiga.mx\/wp-json\/wp\/v2\/comments?post=468"}],"version-history":[{"count":1,"href":"https:\/\/spiga.mx\/wp-json\/wp\/v2\/posts\/468\/revisions"}],"predecessor-version":[{"id":640,"href":"https:\/\/spiga.mx\/wp-json\/wp\/v2\/posts\/468\/revisions\/640"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/spiga.mx\/wp-json\/wp\/v2\/media\/470"}],"wp:attachment":[{"href":"https:\/\/spiga.mx\/wp-json\/wp\/v2\/media?parent=468"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/spiga.mx\/wp-json\/wp\/v2\/categories?post=468"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/spiga.mx\/wp-json\/wp\/v2\/tags?post=468"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}$blocks = parse_blocks( get_the_content() );<\/code><\/pre>\n\n\n\n
blockName<\/code><\/li>
attrs<\/code> como color, fondo, tama\u00f1o, etc…<\/li>
innerBlocks<\/code> (como columnas)<\/li>
innerHTML<\/code> &
innerContent<\/code>).<\/li><\/ul>\n\n\n\n
$post_id = 1;\n$post = get_post($post_id);\n$blocks = parse_blocks($post->post_content);\nforeach ($blocks as $block) {\n echo render_block($block);\n}<\/code><\/pre>\n\n\n\n
foreach ($blocks as $block) {\n if ($block['blockName'] == 'core\/paragraph') {\n echo render_block($block);\n }\n}<\/code><\/pre>\n\n\n\n
foreach ($blocks as $block) {\n if ($block['blockName'] == 'core\/heading') {\n echo render_block($block);\n }\n}<\/code><\/pre>\n\n\n\n
foreach ($blocks as $block) {\n if ($block['blockName'] == 'core\/heading') {\n $level = (isset($block['attrs']['level'])) ? $block['attrs']['level'] : 2;\n if($level === 2){ \/\/Elegimos el nivel de la cabecera\n echo render_block($block);\n }\n }\n}<\/code><\/pre>\n\n\n\n
Funci\u00f3n para extraer un bloque desde Gutenberg <\/h2>\n\n\n\n
switch<\/code> para que esta funci\u00f3n pueda ser utilizada con otro tipo de bloques que se le vayan agregando a Gutenberg. Pueden agregar o quitar los que deseen.<\/p>\n\n\n\n
\/**\n * Get first gutenberg block by tag\n * @link https:\/\/spiga.mx\/como-extraer-bloques-de-gutenberg-wordpress-para-poder-utilizarlo-en-otro-lado\/\n *\/\nif ( ! function_exists( 'spiga_get_first_block_by_tag' ) ) :\n function spiga_get_first_block_by_tag(\n $post_id = null,\n $tag = 'p',\n $reder = false\n ){\n switch ($tag) {\n case 'p':\n $gutenberg_block = 'core\/paragraph';\n break;\n case 'heading':\n $gutenberg_block = 'core\/heading';\n break;\n case 'img':\n $gutenberg_block = 'core\/image';\n break;\n case 'gallery':\n $gutenberg_block = 'core\/gallery';\n break;\n case 'list':\n $gutenberg_block = 'core\/list';\n break;\n case 'gallery':\n $gutenberg_block = 'core\/gallery';\n break;\n case 'quote':\n $gutenberg_block = 'core\/quote';\n break;\n case 'audio':\n $gutenberg_block = 'core\/audio';\n break;\n case 'cover':\n $gutenberg_block = 'core\/cover';\n break;\n case 'file':\n $gutenberg_block = 'core\/file';\n break;\n case 'preformatted':\n $gutenberg_block = 'core\/preformatted';\n break;\n case 'code':\n $gutenberg_block = 'core\/code';\n break;\n case 'html':\n $gutenberg_block = 'core\/html';\n break;\n case 'pullquote':\n $gutenberg_block = 'core\/pullquote';\n break;\n case 'shortcode':\n $gutenberg_block = 'core\/shortcode';\n break;\n case 'embed':\n $gutenberg_block = 'core\/embed';\n break;\n default:\n $gutenberg_block = 'core\/paragraph';\n break;\n}\n $post_id = ($post_id ? $post_id : get_the_ID());\n $post = get_post($post_id);\n $blocks = parse_blocks($post->post_content);\n $output = '';\n if (!empty($blocks)) { \/\/ Non-Gutenberg posts\n foreach ($blocks as $block) {\n if ($block['blockName'] == $gutenberg_block) {\n $output = strip_tags($block['innerHTML']);\n if($render){\n $output = render_block($block);\n }\n break;\n }\n }\n return $output;\n }\n }\nendif;<\/code><\/pre>\n\n\n\n
spiga_get_first_block_by_tag( int|WP_Post $post_id = null, string $tag = 'p', bool $render = false)<\/code><\/pre>\n\n\n\n
Par\u00e1metros<\/h4>\n\n\n\n
\n
<?php \n echo spiga_get_first_block_by_tag(\n $post_id ='',\n $tag ='p',\n $render = false);\n?><\/code><\/pre>\n\n\n\n
\n\n\n\nFunci\u00f3n para mostrar un extracto del post con los bloques de gutenberg<\/h2>\n\n\n\n
\/**\n * Get gutenberg first tag or seo description to show\n * @link https:\/\/spiga.mx\/como-extraer-bloques-de-gutenberg-wordpress-para-poder-utilizarlo-en-otro-lado\/\n *\/\nif(!function_exists('spiga_get_article_teaser')) :\n function spiga_get_article_teaser(\n $post_id = '$post->ID',\n $teaser_use_seoplugin = true,\n $teaser_use_excerpt = true,\n $teaser_use_first_heading = true,\n $teaser_use_first_p = true\n ){\n $post_id = ($post_id ? $post_id : get_the_ID());\n $output = '';\n $get_seo_meta = '';\n $get_excerpt = '';\n $get_first_heading = '';\n $get_first_p = '';\n if($teaser_use_seoplugin){\n if ( class_exists('WPSEO_Primary_Term') ) {\n $get_seo_meta = get_post_meta( $post_id, '_yoast_wpseo_metadesc', true );\n } elseif(class_exists('RankMath')) {\n $get_seo_meta = RankMath\\Post::get_meta( 'description', $post_id );\n }\n }\n if($teaser_use_excerpt){\n $get_excerpt = get_the_excerpt( $post_id );\n }\n if($teaser_use_first_heading){\n $get_first_heading = spiga_get_first_block_by_tag($post_id,'heading',false);\n }\n if($teaser_use_first_p){\n $get_first_p = spiga_get_first_block_by_tag($post_id,'p',false);\n }\n\n if(!empty( $get_seo_meta ) ) {\n $get_teaser = $get_seo_meta;\n } elseif(has_excerpt( $post_id )){\n $get_teaser = $get_excerpt;\n } else {\n $get_teaser = $get_first_heading;\n if(!$get_teaser){\n $get_teaser = $get_first_p;\n }\n }\n if(!empty($get_teaser)){\n return $get_teaser;\n }\n}\nendif;<\/code><\/pre>\n\n\n\n
spiga_get_article_teaser( int|WP_Post $post_id = null, bool $teaser_use_seoplugin = true, bool $teaser_use_excerpt = true, bool $teaser_use_first_heading = true, bool $teaser_use_first_p = true)<\/code><\/pre>\n\n\n\n
Par\u00e1metros<\/h4>\n\n\n\n
\n
\n\n\n\nTipos de bloques en Gutemberg<\/h2>\n\n\n\n
Bloques comunes<\/h3>\n\n\n\n
core\/paragraph<\/code><\/li>
core\/image<\/code><\/li>
core\/heading<\/code><\/li>
core\/gallery<\/code><\/li>
core\/list<\/code><\/li>
core\/quote<\/code><\/li>
core\/audio<\/code><\/li>
core\/cover<\/code><\/li>
core\/file<\/code><\/li>
core\/video<\/code> <\/li><\/ul>\n<\/div>\n\n\n\n
Formatting<\/h3>\n\n\n\n
core\/preformatted<\/code><\/li>
core\/code<\/code><\/li>
core\/freeform<\/code>
(para las entradas que no usen Gutenberg retornar\u00e1 null<\/code>)<\/li>
core\/html<\/code><\/li>
core\/pullquote<\/code><\/li>
core\/table<\/code><\/li>
core\/verse<\/code> <\/li><\/ul>\n<\/div>\n<\/div>\n\n\n\n
Layout<\/h3>\n\n\n\n
core\/button<\/code><\/li>
core\/columns<\/code><\/li>
core\/more<\/code><\/li>
core\/nextpage<\/code><\/li>
core\/separator<\/code><\/li>
core\/spacer<\/code><\/li>
core\/media-text<\/code> <\/li><\/ul>\n<\/div>\n\n\n\n
Widgets<\/h3>\n\n\n\n
core\/shortcode<\/code><\/li>
core\/archives<\/code><\/li>
core\/categories<\/code><\/li>
core\/latest-omments<\/code><\/li>
core\/latest-posts<\/code> <\/li><\/ul>\n<\/div>\n<\/div>\n\n\n\n
Embeds<\/h3>\n\n\n\n
core\/embed<\/code><\/li>
core-embed\/twitter<\/code><\/li>
core-embed\/youtube<\/code><\/li>
core-embed\/wordpress<\/code><\/li>
core-embed\/soundcloud<\/code><\/li>
core-embed\/spotify<\/code><\/li>
core-embed\/flickr<\/code><\/li>
core-embed\/vimeo<\/code><\/li>
core-embed\/animoto<\/code><\/li>
core-embed\/cloudup<\/code><\/li>
core-embed\/crowdsignal<\/code><\/li>
core-embed\/dailymotion<\/code><\/li>
core-embed\/hulu<\/code><\/li>
core-embed\/imgur<\/code><\/li>
core-embed\/issuu<\/code><\/li><\/ul>\n<\/div>\n\n\n\n
core-embed\/kickstarter<\/code><\/li>
core-embed\/meetup-com<\/code><\/li>
core-embed\/mixcloud<\/code><\/li>
core-embed\/reddit<\/code><\/li>
core-embed\/reverbnation<\/code><\/li>
core-embed\/screencast<\/code><\/li>
core-embed\/scribd<\/code><\/li>
core-embed\/slideshare<\/code><\/li>
core-embed\/smugmug<\/code><\/li>
core-embed\/speaker<\/code><\/li>
core-embed\/ted<\/code><\/li>
core-embed\/tumblr<\/code><\/li>
core-embed\/videopress<\/code><\/li>
core-embed\/wordpress-tv<\/code><\/li>
core-embed\/amazon-kindle<\/code><\/li><\/ul>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"