Suporte » Plugins » Frete grátis – cache dos custos de entrega

  • Tenho a seguinte situação na loja, se o usuário adicionar produtos por meio de uma lista é setado uma variável para identificar que o checkout não deve cobrar o frete (frete grátis). O código é:

    function hide_shipping_when_free_is_available( $rates, $package ) {
    		
    
    		// Verifica a variável identificando compra da lista
    		$list = isset( $compra_lista ) ? true : false;
    
    		// Verifica se a compra esta sendo feita para uma lista
    	  	if ( $list ) {
    	  		// To unset all methods except for free_shipping, do the following
    
    	  		$free_shipping            = $rates['free_shipping:3'];
    	  		$rates                    = array();
    	  		$rates['free_shipping:3'] = $free_shipping;
    						
    			unset( $rates['correios-sedex1'] );
    			unset( $rates['correios-pac2'] );
    			
    		} else {
    
    			unset( $rates['free_shipping:3'] );
    			
    		}
    
    		return $rates;
    	}
    	 add_filter( 'woocommerce_package_rates', 'hide_shipping_when_free_is_available', 10, 2 );

    O código não está funcionando 100%, entenda:

    _ Se o usuário previamente já adicionou o CEP em um carrinho anterior, na página no checkout ainda aparecem as opções PAC e SEDEX, mas não o Frete Grátis.
    _ Se eu atualizar o carrinho eliminando produto ou alterando a quantidade de itens de algum produto, os métodos são removidos (pac e sedex) ficando apenas o frete grátis. Isso que tem que ficar padrão.

    Já tentei, sem sucesso:
    _ Dar um reload na página do checkout, não acontece nada
    _ Clicar ou simular o clique no botão “atualizar carrinho”

    Se eu estiver com o “Modo depuração de entrega” habilitado no painel, funciona, mas não posso deixar habilitado.

    • Este tópico foi modificado 4 anos, 2 meses atrás por thomazcia.
Visualizando 3 respostas - 1 até 3 (de um total de 3)
  • Moderador Leo Baiano

    (@leobaiano)

    Os métodos de entrega do WooCommerce são armazenados no cache do WP (transients) e é possível limpar esse cache nas ferramentas do próprio WooCommerce. Porém se você limpar por ai e no próximo acesso o visitante preencher o CEP vai criar novamente o cache com as opções de frete, sendo assim o ideal é deletar a transients na sua função.

    Provavelmente o método atualizar carrinho faz essa limpeza, por isso quando você atualiza o carrinho seu código funciona como deveria, da uma olhada nele para descobrir como que ele deleta o cache.

    Obrigado Leo.

    Fiz o teste eliminando todos os transients, sem sucesso.

    O que identificamos é que se o usuário está logado no site, o código funciona correto, porém se o usuário não estiver logado temos o problema mencionado acima.

    Moderador Claudio Sanches

    (@claudiosanches)

    Acho que o código ai não esta completo, mas tinha que ver.
    Por padrão deveria funcionar ao adicionar ou remover os produtos no carrinho.
    Mas depende também do cache do site, porque essas coisas ficam salvas em transient e se tiver cache estático no carrinho vai ser bem ruim, por padrão não deve ter nada de cache extra no carrinho assim.

Visualizando 3 respostas - 1 até 3 (de um total de 3)
  • O tópico ‘Frete grátis – cache dos custos de entrega’ está fechado para novas respostas.