Como redirecionar o cliente pro checkout ao adicionar um item no carrinho
Desenvolvimento, Gerenciar minha loja, Magento 2, Para Magenteiros
Publicado em 30 de agosto de 2022
Neste artigo criaremos um módulo para enviar seu cliente para o checkout após ter um produto acionado ao carrinho.
Isto é útil especialmente se a sua loja vende apenas um produto, ou se é comum os clientes fazerem a compra apenas de um item por vez.
Aqui no Magenteiro nós implementamos o módulo que mostraremos aqui. Isto porque nossos alunos costumam sempre se inscrever em um curso por vez, e também faziam muita confusão com os valores exibidos no checkout por conta de produtos adicionados anteriormente.
Com a chegada do Clube Magenteiro, isso ficou ainda mais óbvio pra gente. Ou seja, a maioria dos novos alunos optam apenas por adicionar o Clube Magenteiro no carrinho, já que ele dá acesso à todos os outros cursos do site.
O que este módulo vai fazer (técnico)
O módulo que criamos adicionará um Plugin do tipo before
na classe Magento\Checkout\Model\Cart
.
Plugins do tipo before
modificam parâmetros de entrada de um método. No entanto, no nosso caso, tudo o que queremos fazer é definir o parâmetro return_url
na classe Http
antes que o método Cart::addProduct
fosse chamado.
Fizemos isso porque o método em questão irá ler este valor a fim de determinar para qual URL o cliente será enviado após adicionar o produto ao carrinho.
Dica do Clube Magenteiro 🤘
Se você esqueceu como os Plugins funcionam, assista a aula O que são Plugins e alguns exemplos 🔒. Ela é a primeira aula do módulo 9 do Magento 2: O Curso, e é esclarecedora nesse sentido.
Vamos ao módulo
Para criar um módulo que redireciona seu cliente para o checkout após adicionar um produto ao carrinho, siga o nosso passo a passo.
Depois de criar um módulo básico para Magento, vamos declarar o Plugin que acabei de mencionar. Fazemos isso adicionando um arquivo di.xml
à pasta <seu_modulo>/etc/
.
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> <type name="Magento\Checkout\Model\Cart"> <plugin name="AddProductToCartRedirectsToCheckout" type="Magenteiro\AddToCartGoToCheckout\Plugin\CartPlugin" sortOrder="10" disabled="false"/> </type> </config>
Em seguida, crie a classe do Plugin em questão:
<?php declare(strict_types=1); namespace Magenteiro\AddToCartGoToCheckout\Plugin; use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Framework\App\Request\Http; use Magento\Framework\UrlInterface; use Magento\Store\Model\StoreManagerInterface; class CartPlugin { protected UrlInterface $url; protected Http $request; protected StoreManagerInterface $storeManager; private ScopeConfigInterface $config; public function __construct( UrlInterface $url, Http $request, StoreManagerInterface $storeManager, ScopeConfigInterface $config) { $this->url = $url; $this->request = $request; $this->storeManager = $storeManager; $this->config = $config; } /** * Sets redirect url if firecheckout is not enabled or available * @param $subject * @param $productInfo * @param $requestInfo * * @return array * @throws \Magento\Framework\Exception\NoSuchEntityException */ public function beforeAddProduct($subject, $productInfo, $requestInfo = null) { //if Firecheckout is enabled, do nothing. if ($this->config->getValue('firecheckout/general/enabled')) { return [$productInfo, $requestInfo]; } $returnUrl = $this->storeManager->getStore()->getBaseUrl() . "checkout/"; $url = $this->url->getUrl($returnUrl); $this->request->setParam('return_url', $url); return [$productInfo, $requestInfo]; } }
No nosso módulo nós também fazemos uma verificação extra para ver se o Firecheckout está ativo. Fazemos isso pois o Firecheckout possui uma configuração que já adiciona um plugin similar. Se você não usa o Firecheckout, fique à vontade pra remover esta verificação e a dependência do ScopeConfigInterface
da sua classe.
O Firecheckout é um dos melhores módulos de checkout para Magento 2. Alunos do Magento 2: O Curso e do Clube Magenteiro têm 30% de desconto na aquisição do mesmo. #ficadica
Por fim, uma vez adicionada a classe do seu Plugin (acima) e ter declarado ele no di.xml
, basta habilitar o módulo com o comando bin/magento s:up && bin/magento mod:en NomeDoSeu_Modulo
.
Download do Módulo
Caso tenha seguido os passos acima mas nem tudo saiu como esperado, você pode baixar o nosso módulo e comparar o que pode ter dado errado no seu. Ou use-o à vontade. 😉
Quer apenas redirecionar seu cliente pro carrinho? Então você não precisa de nada disso.
Por padrão, ao adicionar um produto no carrinho o cliente permanece na mesma página. Uma mensagem dizendo que o produto foi adicionado ao carrinho de compras é exibida, e o cliente pode clicar no link ou no minicart para concluir a compra.
Isto nem sempre é óbvio para o cliente e muitos abandonam a compra por achar que algo deu errado. Além disso, a mensagem desaparece após alguns segundos.
No entanto, você pode configurar o Magento para redirecionar o cliente para o carrinho após ter um produto adicionado ao mesmo.
Isso é feito na área administrativa, em Lojas > Configurações > Configuração, depois em Vendas > Finalizar Compras > Carrinho de Compras e habilitando a opção “Depois de Adicionar um Produto, Reenvie para o Carrinho de Compras”.
Infelizmente por enquanto o Magento não tem uma opção para redirecionar direto para o Checkout, a não ser por meio de módulos como este que fizemos aqui.
Espero que tenha gostado.
- PagSeguro (PagBank) para Magento 1 recebe a Nova Geração - 9 de abril de 2024
- Recorrência no WooCommerce Sem Plugins Pagos - 28 de janeiro de 2024
- Chargeback. O que é, e como se livrar deles. - 19 de dezembro de 2023
Deixe seu comentário
[fbcomments url="https://www.magenteiro.com/blog/magento-2/redirecionar-cliente-checkout-adicionar-item-carrinho/"]