{"id":228730,"date":"2022-10-16T09:57:00","date_gmt":"2022-10-16T06:57:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228730"},"modified":"2022-11-09T04:03:11","modified_gmt":"2022-11-09T01:03:11","slug":"usando-post-meta-fields-para-armazenar-atributos-no-wordpress-block-editor-gutenberg","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/usando-post-meta-fields-para-armazenar-atributos-no-wordpress-block-editor-gutenberg\/","title":{"rendered":"Usando Post Meta Fields para armazenar atributos no WordPress Block Editor (Gutenberg)"},"content":{"rendered":"\n<p>Ao registrar e armazenar atributos no editor de blocos do WordPress (Gutenberg), voc\u00ea tem a op\u00e7\u00e3o de armazen\u00e1-los como post meta, em vez dos atributos de bloco usuais.<\/p>\n<p>Usando este m\u00e9todo, voc\u00ea pode ter uma configura\u00e7\u00e3o em seu bloco que pode controlar algo de largura de postagem ou no modelo.<\/p>\n<p><strong>Uma observa\u00e7\u00e3o importante sobre a renderiza\u00e7\u00e3o de meta-atributos de postagem<\/strong><\/p>\n<p>Voc\u00ea n\u00e3o pode renderizar meta atributos de postagem usando um m\u00e9todo de salvamento de JavaScript. Uma decis\u00e3o foi tomada pela equipe de Gutenberg para evitar isso, porque os blocos que renderizam os meta campos do post podem ser facilmente quebrados devido \u00e0 mudan\u00e7a do meta do post em outro lugar no post.<\/p>\n<p>Neste guia, vamos expandir o que j\u00e1 constru\u00edmos em nosso <a href=\"https:\/\/wholesomecode.ltd\/guides\/creating-plugin-wordpress-gutenberg\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">guia de plugins WordPress Gutenberg<\/a>, e tamb\u00e9m o <a href=\"https:\/\/wholesomecode.ltd\/guides\/php-render-block-wordpress-gutenberg\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">guia Dynamic Block<\/a>.<\/p>\n<h2>Pr\u00e9-requisitos<\/h2>\n<ul>\n<li>Familiarize-se com a <a href=\"https:\/\/wholesomecode.ltd\/guides\/creating-plugin-wordpress-gutenberg\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">cria\u00e7\u00e3o de plugins para WordPress Gutenberg<\/a><\/li>\n<li>Familiarize-se <a href=\"https:\/\/wholesomecode.ltd\/guides\/php-render-block-wordpress-gutenberg\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">com blocos din\u00e2micos e renderiza\u00e7\u00e3o do lado do servidor<\/a><\/li>\n<\/ul>\n<h2>Registrando o Post Meta em PHP<\/h2>\n<p>Antes de podermos usar um meta campo post em JavaScript, temos que ter certeza de que o registramos no PHP usando <code>register_meta<\/code>e que o <code>show_in_rest<\/code>argumento foi definido como true.<\/p>\n<p>Seguindo o <a href=\"https:\/\/wholesomecode.ltd\/guides\/php-render-block-wordpress-gutenberg\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">guia do Bloco Din\u00e2mico<\/a>, abra o arquivo PHP raiz do plug-in (neste caso <code>wholesome-plugin.php<\/code>) e adicione o seguinte c\u00f3digo ao final desse arquivo ap\u00f3s todas as outras fun\u00e7\u00f5es:<\/p>\n<pre><code>function wholesomecode_wholesome_plugin_register_post_meta() {\n    register_meta(\n        'post',\n        '_wholesomecode_wholesome_plugin_block_text',\n        [\n            'auth_callback' =&gt; '__return_true',\n            'default'       =&gt; __( 'Wholesome Plugin \u2013 hello from the editor!', 'wholesome-plugin' ),\n            'show_in_rest'  =&gt; true,\n            'single'        =&gt; true,\n            'type'          =&gt; 'string',\n        ]\n    );\n}\nadd_action( 'init', 'wholesomecode_wholesome_plugin_register_post_meta' );\n<\/code><\/pre>\n<p>Este c\u00f3digo registra um metacampo chamado <code>_wholesomecode_wholesome_plugin_block_text<\/code>para o <code>post<\/code>tipo de postagem. Tamb\u00e9m garante que a API REST possa acessar esse metacampo com o <code>show_in_rest<\/code>valor definido como true.<\/p>\n<p>Tamb\u00e9m estamos passando a fun\u00e7\u00e3o <code>__return_true<\/code>para o <code>auth_callback<\/code>argumento para garantir que temos as permiss\u00f5es para acessar esse par\u00e2metro. Se quis\u00e9ssemos melhor seguran\u00e7a para este par\u00e2metro, alterar\u00edamos isso para uma fun\u00e7\u00e3o personalizada que verifica uma determinada fun\u00e7\u00e3o de usu\u00e1rio.<\/p>\n<h2>Registrando os Atributos Meta do Post em JavaScript<\/h2>\n<p>Novamente, seguindo o guia anterior, abra <code>\/src\/index.js<\/code>e substitua <code>attributes<\/code>pelo seguinte:<\/p>\n<pre><code>attributes: {\n  blockText: {\n    meta: '_wholesomecode_wholesome_plugin_block_text',\n    source: 'meta',\n  },\n},\n<\/code><\/pre>\n<p>Em vez de informar o tipo de atributo e atribuir um valor padr\u00e3o, definimos a meta-chave da qual o atributo de dados vir\u00e1 e indicamos que <code>source<\/code>o atributo \u00e9 <code>meta<\/code>.<\/p>\n<p>Conforme indicado no aviso na parte superior deste guia, voc\u00ea n\u00e3o pode acessar os atributos do campo meta do post por meio do <code>save<\/code>m\u00e9todo JavaScript, ent\u00e3o compile o plug-in <code>npm start<\/code>e vamos ver como podemos gerar o meta.<\/p>\n<h2>Renderizando o Post Meta<\/h2>\n<p>Como salvamos nosso atributo como post meta, podemos gerar isso em qualquer lugar no WordPress usando <code>get_post_meta<\/code>(desde que tenhamos o <code>$post_id<\/code>):<\/p>\n<pre><code>get_post_meta( $post_id, '_wholesomecode_wholesome_plugin_block_text', true );\n<\/code><\/pre>\n<p>Continuando o <a href=\"https:\/\/wholesomecode.ltd\/guides\/php-render-block-wordpress-gutenberg\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">guia do Bloco Din\u00e2mico<\/a>, vamos ver como podemos acessar este atributo no lado do servidor em PHP.<\/p>\n<p>O meta n\u00e3o est\u00e1 dispon\u00edvel atrav\u00e9s do <code>$attributes<\/code>par\u00e2metro do <code>render_callback<\/code>, pois os atributos meta do post n\u00e3o passam seu valor para este par\u00e2metro, mas podemos acessar o <code>$post<\/code>objeto global para obter o ID do post.<\/p>\n<p>Com isso em mente, vamos atualizar nosso <code>register_block_type<\/code>para gerar a meta do post:<\/p>\n<pre><code>register_block_type(\n  'wholesomecode\/wholesome-plugin',\n  array(\n    'editor_script'   =&gt; 'wholesomecode-wholesome-plugin-block-editor',\n    'editor_style'    =&gt; 'wholesomecode-wholesome-plugin-block-editor',\n    'render_callback' =&gt; function( $attributes, $content) {\n      global $post;\n      $block_text = get_post_meta( $post-&gt;ID, '_wholesomecode_wholesome_plugin_block_text', true );\n      return \"&lt;p class='wp-block-wholesomecode-wholesome-plugin'&gt;$block_text&lt;\/p&gt;\";\n    },\n    'style'           =&gt; 'wholesomecode-wholesome-plugin-block',) );\n<\/code><\/pre>\n<p>Observe que n\u00e3o precisamos mais registrar o <code>attributes<\/code>aqui, pois estamos acessando apenas o metacampo post atrav\u00e9s da <code>get_post_meta<\/code>fun\u00e7\u00e3o.<\/p>\n<h3>Usando o bloco<\/h3>\n<p>Este n\u00e3o \u00e9 o melhor caso de uso deste tipo de meta, por\u00e9m quando usamos o bloco, podemos ver que por estarmos armazenando os atributos como post meta, se atualizarmos o atributo em um bloco, ele atualiza todos os blocos, pois a meta da postagem \u00e9 armazenada na postagem, n\u00e3o no bloco individual:<\/p>\n<p>Postar meta atributos em a\u00e7\u00e3o<\/p>\n<ul>\n<li>D\u00ea uma olhada na cria\u00e7\u00e3o <a href=\"https:\/\/wholesomecode.ltd\/guides\/template-innerblocks-wordpress-gutenberg\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">de blocos filho aninhados com o <code>InnerBlocks<\/code>componente<\/a><\/li>\n<li>Use o post meta no Gutenberg ainda mais <a href=\"https:\/\/wholesomecode.ltd\/guides\/create-custom-meta-boxes-using-the-wordpress-block-editor-gutenberg\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">criando Meta Boxes personalizadas no Gutenberg<\/a><\/li>\n<li>D\u00ea uma olhada no <a href=\"https:\/\/wholesomecode.ltd\/guides\/options-settings-data-wordpress-gutenberg\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">uso de configura\u00e7\u00f5es para armazenar dados na tabela de op\u00e7\u00f5es em Gutenberg<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/wholesomecode.ltd\" class=\"external external_icon\">wholesomecode.ltd<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ao registrar e armazenar atributos no editor de blocos do WordPress (Gutenberg), voc\u00ea tem a op\u00e7\u00e3o de armazen\u00e1-los como meta post, em vez dos atributos de bloco usuais.<\/p>\n","protected":false},"author":1,"featured_media":223685,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[898,722,941,920,816,867],"tags":[1170],"class_list":["post-228730","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-desenvolvedor","category-gutenberg-8","category-outro","category-plug-ins","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/228730","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=228730"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/228730\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/223685"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=228730"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=228730"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=228730"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}