{"id":3042,"date":"2021-04-20T20:29:27","date_gmt":"2021-04-20T23:29:27","guid":{"rendered":"https:\/\/www.magenteiro.com\/blog\/?p=3042"},"modified":"2022-03-01T02:45:05","modified_gmt":"2022-03-01T05:45:05","slug":"campo-endereco-checkout-tutorial","status":"publish","type":"post","link":"https:\/\/www.magenteiro.com\/blog\/magento-2\/campo-endereco-checkout-tutorial\/","title":{"rendered":"Novo campo de endere\u00e7o no checkout &#8211; Passo a passo"},"content":{"rendered":"\n<p>Para se fazer um pedido no Magento \u00e9 preciso informar um endere\u00e7o de cobran\u00e7a durante o processo de checkout. Se estiver realizando uma compra que exija que um ou mais produtos sejam entregues, um endere\u00e7o de entrega tamb\u00e9m \u00e9 solicitado.<\/p>\n\n\n\n<p>Voc\u00ea pode adicionar novos campos nos formul\u00e1rios de checkout do Magento. Ao longo deste artigo veremos como adicionar um novo campo no formul\u00e1rio de endere\u00e7o de entrega e\/ou de cobran\u00e7a. <\/p>\n\n\n\n<p>Para fins deste exemplo, vamos criar um novo campo de endere\u00e7o chamado &#8220;Refer\u00eancia para Entrega&#8221;.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"698\" height=\"111\" src=\"https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2021\/04\/Finalizar_Compra.jpg\" alt=\"\" class=\"wp-image-3044\" srcset=\"https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2021\/04\/Finalizar_Compra.jpg 698w, https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2021\/04\/Finalizar_Compra-250x40.jpg 250w, https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2021\/04\/Finalizar_Compra-500x80.jpg 500w, https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2021\/04\/Finalizar_Compra-120x19.jpg 120w\" sizes=\"(max-width: 698px) 100vw, 698px\" \/><\/figure>\n\n\n\n<p>Para fazer isso voc\u00ea precisar\u00e1:<\/p>\n\n\n\n<ol><li><a href=\"#LayoutProcessor\">Adicionar o campo no Layout<\/a><\/li><li><a href=\"#adicionar-mixin\">Adicionar um mixin JavaScript para modificar o que est\u00e1 sendo enviado<\/a><\/li><li><a href=\"#carregar-mixin\">Carregar o mixin<\/a><\/li><li><a href=\"#adicionando-campo-no-model\">Adicionar o campo no Model de endere\u00e7o<\/a><\/li><li><a href=\"#acessando-extension-attribute\">Acessar o valor que est\u00e1 sendo enviado no lado do servidor<\/a><\/li><li><a href=\"#conclusao\">Conclus\u00e3o<\/a><\/li><li><a href=\"#download-exemplo\">M\u00f3dulo final<\/a><\/li><\/ol>\n\n\n\n<h2 id=\"LayoutProcessor\">Adicionando campo no LayoutProcessor<\/h2>\n\n\n\n<p>Tanto os campos de endere\u00e7o de cobran\u00e7a quanto os de entrega s\u00e3o gerados dinamicamente. Isto \u00e9, atrav\u00e9s de classes PHP que injetam estes campos no m\u00e9todo <code>\\Magento\\Checkout\\Block\\Checkout\\LayoutProcessor::process<\/code>. <\/p>\n\n\n\n<p>Sendo assim, a melhor forma para se injetar um novo campo neste m\u00e9todo \u00e9 atrav\u00e9s do uso de Plugins &#8211; um componente comum no Magento 2, e amplamente explicado no <a href=\"https:\/\/www.magenteiro.com\/curso-magento-2?___store=default&amp;utm_source=magenteiro&amp;utm_medium=post&amp;utm_campaign=novo-campo-checkout\">Magento 2: O Curso<\/a>.<\/p>\n\n\n\n<p>O trecho de c\u00f3digo abaixo pode ser usado num Plugin do tipo <em>before<\/em> para o m\u00e9todo acima.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;?php\n\/\/ ...\n    \/**\n     * @param \\Magento\\Checkout\\Block\\Checkout\\LayoutProcessor $subject\n     * @param array                                            $jsLayout\n     *\n     * @return array[]\n     *\/\n    public function beforeProcess(\\Magento\\Checkout\\Block\\Checkout\\LayoutProcessor $subject, $jsLayout)\n    {\n        $customAttributeCode = 'referencia_entrega';\n        $customField = ['component'                         => 'Magento_Ui\/js\/form\/element\/abstract',\n                        'config'                  => [\/\/customScope \u00e9 usado para agrupar elementos em um form simples\n                                                      \/\/ (assim eles podem ser validados separadamente)\n                                                      'customScope' => 'shippingAddress.custom_attributes',\n                                                      'customEntry' => null,\n                                                      'template'    => 'ui\/form\/field',\n                                                      'elementTmpl' => 'ui\/form\/element\/input',\n                                                      'tooltip'     => [\n                                                          'description' => 'Usado pelo servi\u00e7o de entrega',\n                                                          ],],\n                        'dataScope'                         => 'shippingAddress.custom_attributes'\n                            . '.' . $customAttributeCode,\n                        'label'                             => 'Refer\u00eancia para Entrega',\n                        'provider'                          => 'checkoutProvider',\n                        'sortOrder'                         => 70,\n                        'validation'                        => ['required-entry' => false],\n                        'options'                           => [],\n                        'filterBy'                          => null,\n                        'customEntry'                       => null,\n                        'visible'                           => true,\n                        'value'                             => '' \/\/ valor padr\u00e3o\n        ];\n\n        $jsLayout['components']['checkout']['children']['steps']['children']['shipping-step']['children']['shippingAddress']['children']['shipping-address-fieldset']['children'][$customAttributeCode]\n            = $customField;\n\n        return [$jsLayout];\n    }\n\n<\/pre>\n\n\n\n<p>No exemplo acima, adicionamos o campo de &#8220;Refer\u00eancia de endere\u00e7o&#8221; no endere\u00e7o de entrega. Fizemos isso adicionando o campo na propriedade <code>customAttributes<\/code> do <code>Magento_Checkout\/js\/model\/new-customer-address.js<\/code>, que \u00e9 um objeto que lista os atributos de endere\u00e7o pr\u00e9-definido e faz a associa\u00e7\u00e3o com o atributo correspondente do lado do servidor usando a interface <code>\\Magento\\Quote\\Api\\Data\\AddressInterface<\/code>.<\/p>\n\n\n\n<p>A propriedade customAttributes foi desenhada para conter atributos de endere\u00e7o do tipo EAC e relacionada com o m\u00e9todo <code>\\Magento\\Quote\\Model\\Quote\\Address\\CustomAttributeListInterface::getAttributes<\/code>. O exemplo acima vai lidar automaticamente com a grava\u00e7\u00e3o do atributo dentro do local storage no frontend da loja. N\u00e3o \u00e9 legal?<\/p>\n\n\n\n<h3 id=\"alternativa-usando-injecao-de-dependencia\">Alternativa: Usando Inje\u00e7\u00e3o de Depend\u00eancia<\/h3>\n\n\n\n<p>Opcionalmente, ao inv\u00e9s de adicionar um Plugin, voc\u00ea pode fazer uso de <a href=\"https:\/\/www.magenteiro.com\/blog\/magento-2\/dependency-injection-no-magento2\/\" data-type=\"post\" data-id=\"720\">Inje\u00e7\u00e3o de Depend\u00eancia<\/a>. Para fazer desta forma, adicione o <code>LayoutProcessor<\/code> (que adiciona um campo personalizado de endere\u00e7o \u00e0 classe de formul\u00e1rio de endere\u00e7o) dentro do diret\u00f3rio <code>&lt;seu_modulo&gt;\/Block\/Checkout<\/code>. A classe deve implementar <code>\\Magento\\Checkout\\Block\\Checkout\\LayoutProcessorInterface<\/code>. Use o c\u00f3digo acima na sua implementa\u00e7\u00e3o de <code>\\Magento\\Checkout\\Block\\Checkout\\LayoutProcessorInterface::process()<\/code> na sua classe.<\/p>\n\n\n\n<p>Depois \u00e9 s\u00f3 adicionar o LayoutProcessor na lista de &#8220;processors&#8221;, especificando o seguinte:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"xml\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;type name=\"Magento\\Checkout\\Block\\Onepage\">\n        &lt;arguments>\n            &lt;argument name=\"layoutProcessors\" xsi:type=\"array\">\n                &lt;item name=\"%nome_unico%\" xsi:type=\"object\">%seu\\modulo\\seu\\LayoutProcessor%&lt;\/item>\n            &lt;\/argument>\n        &lt;\/arguments>\n&lt;\/type>\n<\/pre>\n\n\n\n<p>Onde %nomeunico% e %seu\\modulo\\seu\\LayoutProcessor% devem ser trocados por valores reais, de acordo com aqueles definidos no <code>&lt;seu_modulo&gt;\/etc\/frontend\/di.xml<\/code>.<\/p>\n\n\n\n<h2 id=\"adicionar-mixin\">Adicione um mixin JavaScript<\/h2>\n\n\n\n<p><em>Mixins<\/em> s\u00e3o como Plugins para JavaScript no Magento. Neste exerc\u00edcio eles nos permitir\u00e3o mudar o comportamento do componente respons\u00e1vel pelo envio de dados do formul\u00e1rio.<\/p>\n\n\n\n<p>No seu m\u00f3dulo, defina um <em>mixin<\/em> como um m\u00f3dulo AMD separado, que retorna um m\u00e9todo (callback). Adicione o <em>mixin<\/em> em qualquer lugar em <code>&lt;seu_modulo&gt;\/view\/frontend\/web<\/code>. N\u00e3o h\u00e1 requisitos ou restri\u00e7\u00f5es para o nome dele.<\/p>\n\n\n\n<p>O c\u00f3digo abaixo \u00e9 um exemplo de <em>mixin<\/em> para mudar o comportamento de <code>Magento_Checkout\/js\/action\/set-shipping-information<\/code>, que \u00e9 o componente respons\u00e1vel pelo envio dos dados do formul\u00e1rio entre os passos de cobran\u00e7a e entrega.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/*jshint browser:true jquery:true*\/\n\/*global alert*\/\ndefine([\n    'jquery',\n    'mage\/utils\/wrapper',\n    'Magento_Checkout\/js\/model\/quote'\n], function ($, wrapper, quote) {\n    'use strict';\n\n    return function (setShippingInformationAction) {\n\n        return wrapper.wrap(setShippingInformationAction, function (originalAction) {\n            var shippingAddress = quote.shippingAddress();\n            if (shippingAddress['extension_attributes'] === undefined) {\n                shippingAddress['extension_attributes'] = {};\n            }\n\n            var attribute = shippingAddress.customAttributes.find(\n                function (element) {\n                    return element.attribute_code === 'referencia_entrega';\n                }\n            );\n\n            shippingAddress['extension_attributes']['referencia_entrega'] = attribute.value;\n\n            \/\/ chama o m\u00e9todo original ('Magento_Checkout\/js\/action\/set-shipping-information')\n            return originalAction();\n        });\n    };\n});\n<\/pre>\n\n\n\n<p>Ao adicionar um campo no endere\u00e7o de cobran\u00e7a, voc\u00ea deve modificar o comportamento de <code>Magento_Checkout\/js\/action\/place-order<\/code> ou <code>Magento_Checkout\/js\/action\/set-payment-information<\/code> dependendo do momento que voc\u00ea deseja passar o valor do campo personalizado para o servidor. Um exemplo de um <em>mixin<\/em> que modifica um destes componentes pode ser visto no <a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/magento\/magento2\/blob\/2.4\/app\/code\/Magento\/CheckoutAgreements\/view\/frontend\/web\/js\/model\/place-order-mixin.js\" target=\"_blank\">place-order-mixin.js<\/a> do m\u00f3dulo <code>Magento_CheckoutAgreements<\/code>.<\/p>\n\n\n\n<h2 id=\"carregar-mixin\">Carregue o seu mixin<\/h2>\n\n\n\n<p>Para registrar o <em>mixin<\/em> que acabamos de criar, precisamos inserir o conte\u00fado abaixo no arquivo <code>&lt;seu_modulo&gt;\/view\/frontend\/requirejs-config.js<\/code>:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">var config = {\n    config: {\n        mixins: {\n            'Magento_Checkout\/js\/action\/set-shipping-information': {\n                'Magenteiro_CampoEndereco\/js\/referencia-endereco-mixin': true\n            }\n        }\n    }\n};\n<\/pre>\n\n\n\n<p>No meu caso, o nome que dei para meu <em>mixin<\/em> no passo anterior foi <code>referencia-endereco-mixin.js<\/code>. Altere isso e o nome do m\u00f3dulo de acordo com sua necessidade.<\/p>\n\n\n\n<h2 id=\"adicionando-campo-no-model\">Adicionar o campo no Model<\/h2>\n\n\n\n<p>Para fazer o <em>Model<\/em> de endere\u00e7o enxergar o nosso atributo no backend (lado do servidor), precisamos adicionar o arquivo <code>extension_attributes.xml<\/code> em <code>&lt;seu_modulo&gt;\/etc\/<\/code>.<\/p>\n\n\n\n<p>Veja o exemplo:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"xml\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;?xml version=\"1.0\"?>\n&lt;config xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"urn:magento:framework:Api\/etc\/extension_attributes.xsd\">\n    &lt;extension_attributes for=\"Magento\\Quote\\Api\\Data\\AddressInterface\">\n        &lt;attribute code=\"referencia_entrega\" type=\"string\" \/>\n    &lt;\/extension_attributes>\n&lt;\/config><\/pre>\n\n\n\n<p>Lembre-se de apagar o diret\u00f3rio <code>generated\/code<\/code> quando fizer o <code>setup:di:compile<\/code>. Novos m\u00e9todos ser\u00e3o adicionados em <code>generated\/code\/Magento\/Quote\/Api\/Data\/AddressExtension.php<\/code>.<\/p>\n\n\n\n<h2 id=\"acessando-extension-attribute\">Acessando o valor do lado do servidor<\/h2>\n\n\n\n<p>Se voc\u00ea seguiu os passos anteriores, o seu atributo j\u00e1 est\u00e1 dispon\u00edvel no backend, pois o Magento gerou novamente a interface de endere\u00e7o com o novo elemento.<\/p>\n\n\n\n<p>Voc\u00ea pode obter esses valores quando cria uma nova inst\u00e2ncia de <code>Magento\/Quote\/Api\/Data\/AddressInterface.php<\/code>.  Veja um exemplo simples:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;?php\n\n\/\/ ... \/\/\n\nuse Magento\\Checkout\\Api\\Data\\ShippingInformationInterface;\nuse Magento\\Framework\\View\\Element\\Template;\nuse Magento\\Framework\\View\\Element\\Template\\Context;\n\nclass MyBlock extends Template {\n\n    \/**\n     * @var ShippingInformationInterface\n     *\/\n    private $_addressInformation;\n\n    \/**\n     * @param Context $context\n     * @param ShippingInformationInterface $addressInformation\n     * @param array $data\n     *\/\n    public function __construct(\n        Context $context,\n        ShippingInformationInterface $addressInformation,\n        array $data = []\n    ) {\n        $this->_addressInformation = $addressInformation;\n        parent::__construct($context, $data);\n    }\n\n    \/**\n     * Get custom Shipping Charge\n     *\n     * @return String\n     *\/\n    public function getShippingCharge()\n    {\n        $extAttributes = $this->_addressInformation->getExtensionAttributes();\n        return $extAttributes->getReferenciaEndereco(); \/\/pega atributo personalizado.\n    }\n}\n<\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h2 id=\"conclusao\">Conclus\u00e3o e ressalvas<\/h2>\n\n\n\n<p>O exemplo acima mostrou como adicionar um novo campo de endere\u00e7o ao nosso checkout Magento.<\/p>\n\n\n\n<p>Fizemos isso usando <em>extension attributes<\/em>, um recurso novo implementado no Magento 2. Ele nos possibilita inserir novos e (nem sempre) complexos atributos \u00e0 interfaces como as de produto, cliente, endere\u00e7o, etc.<\/p>\n\n\n\n<p>No entanto, um <code>extension_attribute<\/code> <strong>n\u00e3o<\/strong> \u00e9 persistido na base de dados nem vis\u00edvel no admin por padr\u00e3o. Voc\u00ea pode usar esta abordagem do jeito que est\u00e1 aqui para algum tipo de integra\u00e7\u00e3o ou regra de neg\u00f3cio que n\u00e3o precise de persist\u00eancia no banco.<\/p>\n\n\n\n<p>Se ter este valor no banco e eventualmente exibido no admin da loja \u00e9 um pr\u00e9-requisito para sua necessidade, voc\u00ea ent\u00e3o precisar\u00e1 implementar um outro Plugin para salvar estes valores por l\u00e1 em novas colunas ou tabelas.<\/p>\n\n\n\n<p>Quem sabe n\u00e3o abordamos isto em outro artigo. Comente!<\/p>\n\n\n\n<p>Refer\u00eancia: <a href=\"https:\/\/devdocs.magento.com\/guides\/v2.4\/howdoi\/checkout\/checkout_new_field.html\">Documenta\u00e7\u00e3o Oficial (em Ingl\u00eas)<\/a><\/p>\n\n\n\n<h2 id=\"modulo-final-do-exemplo\">M\u00f3dulo final (do exemplo)<\/h2>\n\n\n\n<p>Se desejar, fa\u00e7a download do nosso m\u00f3dulo do exemplo acima. Basta preencher o form abaixo.<\/p>\n\n\n\n<script type=\"text\/javascript\" src=\"\/\/mkt.magenteiro.com\/form\/generate.js?id=57\"><\/script>\n","protected":false},"excerpt":{"rendered":"Veja como adicionar um campo de Referencia de entrega ao formul\u00e1rio de endere\u00e7o no checkout Magento, usando extension attributes. Inclui m\u00f3dulo de exemplo.","protected":false},"author":1,"featured_media":3052,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[27,25],"tags":[118,128,3,130,112,4,41,129,37,60,68],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v19.0 (Yoast SEO v19.4) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Novo campo de endere\u00e7o no checkout - Passo a passo<\/title>\n<meta name=\"description\" content=\"Veja como podemos adicionar campos personalizados no checkout de uma loja Magento. Neste artigo veremos como fazer isso da forma certa.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.magenteiro.com\/blog\/magento-2\/campo-endereco-checkout-tutorial\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Novo campo de endere\u00e7o no checkout - Passo a passo\" \/>\n<meta property=\"og:description\" content=\"Veja como podemos adicionar campos personalizados no checkout de uma loja Magento. Neste artigo veremos como fazer isso da forma certa.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.magenteiro.com\/blog\/magento-2\/campo-endereco-checkout-tutorial\/\" \/>\n<meta property=\"og:site_name\" content=\"Magenteiro | V\u00eddeos, Artigos, e Cursos Magento 2 e Magento 1\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/facebook.com\/magenteiro\" \/>\n<meta property=\"article:published_time\" content=\"2021-04-20T23:29:27+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-03-01T05:45:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2021\/04\/campo-endereco-checkout-opt-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"960\" \/>\n\t<meta property=\"og:image:height\" content=\"480\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Ricardo Martins\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@magenteiro\" \/>\n<meta name=\"twitter:site\" content=\"@magenteiro\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ricardo Martins\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.magenteiro.com\/blog\/#organization\",\"name\":\"Magenteiro\",\"url\":\"https:\/\/www.magenteiro.com\/blog\/\",\"sameAs\":[\"https:\/\/www.instagram.com\/magenteiro\",\"https:\/\/www.linkedin.com\/company\/magenteiro\",\"https:\/\/www.youtube.com\/magenteiro\",\"https:\/\/facebook.com\/magenteiro\",\"https:\/\/twitter.com\/magenteiro\"],\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.magenteiro.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2017\/04\/logo-white.png\",\"contentUrl\":\"https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2017\/04\/logo-white.png\",\"width\":787,\"height\":149,\"caption\":\"Magenteiro\"},\"image\":{\"@id\":\"https:\/\/www.magenteiro.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.magenteiro.com\/blog\/#website\",\"url\":\"https:\/\/www.magenteiro.com\/blog\/\",\"name\":\"Magenteiro | V\u00eddeos, Artigos, e Cursos Magento 2 e Magento 1\",\"description\":\"Artigos t\u00e9cnicos, tutoriais e muitos v\u00eddeos e cursos sobre Magento. Aqui voc\u00ea encontra dicas para lojistas e desenvolvedores feitos por quem entende do assunto.\",\"publisher\":{\"@id\":\"https:\/\/www.magenteiro.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.magenteiro.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.magenteiro.com\/blog\/magento-2\/campo-endereco-checkout-tutorial\/\",\"url\":\"https:\/\/www.magenteiro.com\/blog\/magento-2\/campo-endereco-checkout-tutorial\/\",\"name\":\"Novo campo de endere\u00e7o no checkout - Passo a passo\",\"isPartOf\":{\"@id\":\"https:\/\/www.magenteiro.com\/blog\/#website\"},\"datePublished\":\"2021-04-20T23:29:27+00:00\",\"dateModified\":\"2022-03-01T05:45:05+00:00\",\"description\":\"Veja como podemos adicionar campos personalizados no checkout de uma loja Magento. Neste artigo veremos como fazer isso da forma certa.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.magenteiro.com\/blog\/magento-2\/campo-endereco-checkout-tutorial\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.magenteiro.com\/blog\/magento-2\/campo-endereco-checkout-tutorial\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.magenteiro.com\/blog\/magento-2\/campo-endereco-checkout-tutorial\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.magenteiro.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Novo campo de endere\u00e7o no checkout &#8211; Passo a passo\"}]},{\"@type\":\"Article\",\"@id\":\"https:\/\/www.magenteiro.com\/blog\/magento-2\/campo-endereco-checkout-tutorial\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.magenteiro.com\/blog\/magento-2\/campo-endereco-checkout-tutorial\/\"},\"author\":{\"name\":\"Ricardo Martins\",\"@id\":\"https:\/\/www.magenteiro.com\/blog\/#\/schema\/person\/e90c4bb268e5f2dad10d7c9760d4f150\"},\"headline\":\"Novo campo de endere\u00e7o no checkout &#8211; Passo a passo\",\"datePublished\":\"2021-04-20T23:29:27+00:00\",\"dateModified\":\"2022-03-01T05:45:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.magenteiro.com\/blog\/magento-2\/campo-endereco-checkout-tutorial\/\"},\"wordCount\":902,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.magenteiro.com\/blog\/#organization\"},\"keywords\":[\"Avan\u00e7ado\",\"checkout\",\"desenvolvimento\",\"extension_attributes\",\"freebies\",\"frontend\",\"Magento 2\",\"mixins\",\"m\u00f3dulos\",\"Tutoriais Magento\",\"tutorial\"],\"articleSection\":[\"Desenvolvimento\",\"Magento 2\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.magenteiro.com\/blog\/magento-2\/campo-endereco-checkout-tutorial\/#respond\"]}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.magenteiro.com\/blog\/#\/schema\/person\/e90c4bb268e5f2dad10d7c9760d4f150\",\"name\":\"Ricardo Martins\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.magenteiro.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ae5800c87c4e0f6a4a6b7a3d66aae138?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ae5800c87c4e0f6a4a6b7a3d66aae138?s=96&d=mm&r=g\",\"caption\":\"Ricardo Martins\"},\"description\":\"\u00c9 desenvolvedor web h\u00e1 16 anos e um dos primeiros certificados pela Magento no Brasil. Instrutor de mais de 11 cursos Magento (os principais no magenteiro.com\/cursos) com mais de 14 mil alunos de 105 pa\u00edses, \u00e9 tamb\u00e9m criador do m\u00f3dulo PagSeguro Transparente, usado em mais de 12 mil lojas.\",\"sameAs\":[\"https:\/\/www.magenteiro.com\/\"],\"url\":\"https:\/\/www.magenteiro.com\/blog\/author\/ricardomartins\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Novo campo de endere\u00e7o no checkout - Passo a passo","description":"Veja como podemos adicionar campos personalizados no checkout de uma loja Magento. Neste artigo veremos como fazer isso da forma certa.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.magenteiro.com\/blog\/magento-2\/campo-endereco-checkout-tutorial\/","og_locale":"pt_BR","og_type":"article","og_title":"Novo campo de endere\u00e7o no checkout - Passo a passo","og_description":"Veja como podemos adicionar campos personalizados no checkout de uma loja Magento. Neste artigo veremos como fazer isso da forma certa.","og_url":"https:\/\/www.magenteiro.com\/blog\/magento-2\/campo-endereco-checkout-tutorial\/","og_site_name":"Magenteiro | V\u00eddeos, Artigos, e Cursos Magento 2 e Magento 1","article_publisher":"https:\/\/facebook.com\/magenteiro","article_published_time":"2021-04-20T23:29:27+00:00","article_modified_time":"2022-03-01T05:45:05+00:00","og_image":[{"width":960,"height":480,"url":"https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2021\/04\/campo-endereco-checkout-opt-1.jpg","type":"image\/jpeg"}],"author":"Ricardo Martins","twitter_card":"summary_large_image","twitter_creator":"@magenteiro","twitter_site":"@magenteiro","twitter_misc":{"Written by":"Ricardo Martins","Est. reading time":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Organization","@id":"https:\/\/www.magenteiro.com\/blog\/#organization","name":"Magenteiro","url":"https:\/\/www.magenteiro.com\/blog\/","sameAs":["https:\/\/www.instagram.com\/magenteiro","https:\/\/www.linkedin.com\/company\/magenteiro","https:\/\/www.youtube.com\/magenteiro","https:\/\/facebook.com\/magenteiro","https:\/\/twitter.com\/magenteiro"],"logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.magenteiro.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2017\/04\/logo-white.png","contentUrl":"https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2017\/04\/logo-white.png","width":787,"height":149,"caption":"Magenteiro"},"image":{"@id":"https:\/\/www.magenteiro.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"WebSite","@id":"https:\/\/www.magenteiro.com\/blog\/#website","url":"https:\/\/www.magenteiro.com\/blog\/","name":"Magenteiro | V\u00eddeos, Artigos, e Cursos Magento 2 e Magento 1","description":"Artigos t\u00e9cnicos, tutoriais e muitos v\u00eddeos e cursos sobre Magento. Aqui voc\u00ea encontra dicas para lojistas e desenvolvedores feitos por quem entende do assunto.","publisher":{"@id":"https:\/\/www.magenteiro.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.magenteiro.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pt-BR"},{"@type":"WebPage","@id":"https:\/\/www.magenteiro.com\/blog\/magento-2\/campo-endereco-checkout-tutorial\/","url":"https:\/\/www.magenteiro.com\/blog\/magento-2\/campo-endereco-checkout-tutorial\/","name":"Novo campo de endere\u00e7o no checkout - Passo a passo","isPartOf":{"@id":"https:\/\/www.magenteiro.com\/blog\/#website"},"datePublished":"2021-04-20T23:29:27+00:00","dateModified":"2022-03-01T05:45:05+00:00","description":"Veja como podemos adicionar campos personalizados no checkout de uma loja Magento. Neste artigo veremos como fazer isso da forma certa.","breadcrumb":{"@id":"https:\/\/www.magenteiro.com\/blog\/magento-2\/campo-endereco-checkout-tutorial\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.magenteiro.com\/blog\/magento-2\/campo-endereco-checkout-tutorial\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.magenteiro.com\/blog\/magento-2\/campo-endereco-checkout-tutorial\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.magenteiro.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Novo campo de endere\u00e7o no checkout &#8211; Passo a passo"}]},{"@type":"Article","@id":"https:\/\/www.magenteiro.com\/blog\/magento-2\/campo-endereco-checkout-tutorial\/#article","isPartOf":{"@id":"https:\/\/www.magenteiro.com\/blog\/magento-2\/campo-endereco-checkout-tutorial\/"},"author":{"name":"Ricardo Martins","@id":"https:\/\/www.magenteiro.com\/blog\/#\/schema\/person\/e90c4bb268e5f2dad10d7c9760d4f150"},"headline":"Novo campo de endere\u00e7o no checkout &#8211; Passo a passo","datePublished":"2021-04-20T23:29:27+00:00","dateModified":"2022-03-01T05:45:05+00:00","mainEntityOfPage":{"@id":"https:\/\/www.magenteiro.com\/blog\/magento-2\/campo-endereco-checkout-tutorial\/"},"wordCount":902,"commentCount":0,"publisher":{"@id":"https:\/\/www.magenteiro.com\/blog\/#organization"},"keywords":["Avan\u00e7ado","checkout","desenvolvimento","extension_attributes","freebies","frontend","Magento 2","mixins","m\u00f3dulos","Tutoriais Magento","tutorial"],"articleSection":["Desenvolvimento","Magento 2"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.magenteiro.com\/blog\/magento-2\/campo-endereco-checkout-tutorial\/#respond"]}]},{"@type":"Person","@id":"https:\/\/www.magenteiro.com\/blog\/#\/schema\/person\/e90c4bb268e5f2dad10d7c9760d4f150","name":"Ricardo Martins","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.magenteiro.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ae5800c87c4e0f6a4a6b7a3d66aae138?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ae5800c87c4e0f6a4a6b7a3d66aae138?s=96&d=mm&r=g","caption":"Ricardo Martins"},"description":"\u00c9 desenvolvedor web h\u00e1 16 anos e um dos primeiros certificados pela Magento no Brasil. Instrutor de mais de 11 cursos Magento (os principais no magenteiro.com\/cursos) com mais de 14 mil alunos de 105 pa\u00edses, \u00e9 tamb\u00e9m criador do m\u00f3dulo PagSeguro Transparente, usado em mais de 12 mil lojas.","sameAs":["https:\/\/www.magenteiro.com\/"],"url":"https:\/\/www.magenteiro.com\/blog\/author\/ricardomartins\/"}]}},"_links":{"self":[{"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/posts\/3042"}],"collection":[{"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/comments?post=3042"}],"version-history":[{"count":8,"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/posts\/3042\/revisions"}],"predecessor-version":[{"id":3400,"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/posts\/3042\/revisions\/3400"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/media\/3052"}],"wp:attachment":[{"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/media?parent=3042"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/categories?post=3042"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/tags?post=3042"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}