Olá pessoal, hoje eu quero mostar para você como desabilitar Checkout para alguns Países e Estados no WooCommerce… Essa função é muito útil para sistema de e-commerce que o usuário deseja vender os seus produtos para determinados locais.

Eu já escreví um post com um conceito similiar, vocês podem ver o mesmo em Vender Somente para Estado Específico.

Com esse post, eu vou mostrar uma forma de como bloquear e dar um alerta em texto falando que o estado selecionado não tem método de entrega.

Eu, criei uma function chamada wc_checkout_validation() dentro dela eu vou determinar duas verificações.

<?php
/*
* Function - Disable Checkout for some Countries and States
*/
function wc_checkout_validation() {
$shipping_country = ! empty( $_POST['shipping_country'] ) ? $_POST['shipping_country'] : $_POST['billing_country'];
$shipping_state = ! empty( $_POST['shipping_state'] ) ? $_POST['shipping_state'] : $_POST['billing_state'];
// Add here States : More example look here -> wp-content/plugins/woocommerce/i18n/states/
$excluded_states = array(
'SP',
'DF',
'RS',
);
// Verification if you are in Brazil : More example look here -> wp-content/plugins/woocommerce/i18n/countries.php
if ( 'BR' != $shipping_country ) {
wc_add_notice( __( 'Desculpem-nos, infelizmente não vendemos para fora do Brasil.', 'odin' ), 'error' );
}
// Verification Brazilian States
if ( in_array( $shipping_state, $excluded_states ) ) {
// Here you generate State Label for your Alert, if you use a different country. Please, specific below your correct country.
$states = WC()->countries->get_states( 'BR' );
$state = $states[$shipping_state];
wc_add_notice( sprintf( __( 'Desculpem-nos, infelizmente não realizamos entregas para <strong>%s</strong>.', 'odin' ), $state ), 'error' );
}
}
add_action( 'woocommerce_checkout_process', 'wc_checkout_validation' );
view raw functions.php hosted with ❤ by GitHub

Antes de iniciar as verificações eu criei duas variáveis $shipping_country e $shipping_state as mesmas estão recebendo informações  sobre Países e Estados que vem do seu WooCommerce.

Logo abaixo eu apliquei a variável $excluded_states, dentro dela eu passei os meus estados específicos para desabilitar o checkout, como vocês podem ver eu só apliquei a sigla dos estados “SP, DF e RS” não tem necessidade de aplicar o nome completo do estado, essa função só precisa passar a sigla para funcionar.

Para ver a lista completa dos estados é só abrir o arquivo: wp-content/plugins/woocommerce/i18n/states/BR.php

Dentro do nosso primeiro IF eu criei a verificação, se o mesmo é diferente do que Brasil “BR” será exibido um alerta similar a esse:

alerta-pais

Agora, na proxíma verificacão nós vamos ver se o CEP digitado pelo cliente é igual à algum estado que nós declaramos dentro da nossa variável $excluded_states.

Nessa verificação eu comparo se $shipping_state é igual a algum estado que “excluimos” dentro da nossa variável $excluded_states, se o mesmo for igual a algum estado a função irá imprimir um alerta similar a esse:

alerta-spalerta-df alerta-rs

Para que o nosso estado fique com o nome completo, exemplo: “São Paulo, Distrito Federal e Rio Grande do Sul” invés de “SP, DF e RS”.

Eu criei uma variável chamada $states e dentro dela eu aplique uma verificação WC()->countries->get_states( BR );

* Se vocês estão trabalhando com um País diferente ‘BR’ é só aplicar a sigla dentro das aspas simples.

Após disso é só aplicar $state = $states[$shipping_state]; que o mesmo irá imprimir o nome completo do seu estado.

Espero que vocês tenham gostado desse tutorial e até breve, por favor se você gostou deixe seu like e também compartilha.

Até Mais,

César Ribeiro
Written by

Hi, my name’s Cesar H. Ribeiro, I’m Brazilian and I live in São Paulo country town. I’ve been working with Web Development since 2006, I’m Web Developer Freelancer, my main specialty is deploying custom Web Sites using the WordPress platform with base, transforming PSD/Layouts for Custom Themes. In feel years with Developer Freelancer, I worked with many agencies around the world like: Brazil, Australia, USA, Germany and Austria.

Related Posts