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' ); |
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:
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:
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,