Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
10
respostas

Wordpress - Redirecionar URL conforme localização

Como adicionar um parâmetro de url que identifique a cidade onde meu leitor está e seja capaz de trazer esse filtro na Url (Ex. meusite.com.br/são-paulo/ ou meusite.com.br/rio-de-janeiro. Desta forma, criaríamos conteúdo personalizado para cada cidade que estariam alocados em paginas especificas para cada uma dessas urls. Ex. meusite.com.br/são-paulo/noticias traria as noticias do dia a dia de são Paulo...... da mesma forma, meusite.com.br/rio-de-janeiro/noticias traria a página que eu criei que so apresentas anoticias do rio de janeiro.

10 respostas

Oi Thiago, tudo bem? Nativamente o WordPress não tem algo desse tipo até onde sei, o que você pode fazer é utilizar um plugin tipo o GeoIP (https://wordpress.org/plugins/geoip-detect/) e combinar o resultado da API desse plugin com a função wp_redirect (https://developer.wordpress.org/reference/functions/wp_redirect/)

Eu pessoalmente nunca precisei fazer algo desse tipo, mas você pode tentar!

Olá Wanderson, tudo bem e você? Ótimo, vou analisar o plugin e a função e caso tenha alguma dúvida aviso.

Boa, não esquece de dar um feedback aqui!

Ajudou bastante, muito obrigado.

Tiago, se a resposta resolveu seu problema, marca o post como solucionado por favor? Assim outros alunos já saberão que o assunto foi solucionado. Tá bem? Abs!

Boa tarde, não consegui fazer funcionar ainda, estou analisando a melhor forma mas realmente não estou encontrando. O Geo IP tanto quanto outros plugins de localização são focados em países, porém a utilização que preciso seria para diferentes cidades do Brasil e isso eu não encontrei em nenhum lugar. Tentei me iluminar com o que o Wanderson passou aqui mas realmente não consigo ver com isso pode fazer funcionar já que o plugin é focado em países. Mesmo assim muito obrigado e, caso conheçam algo a mais, será de grande ajuda.

Tiago, pena não ter ajudado muito, mas você é desenvolvedor? Poderia tentar uma alternativa programaticamente usando a Geolocation API (https://developer.mozilla.org/en-US/docs/Web/API/Geolocation/Using_geolocation) e o Google Maps APT(https://developers.google.com/maps/documentation/geocoding/start)

solução!

Em PHP você pode resolver este problema da seguinte forma:

<?
error_reporting(E_ALL); // Somente ambiente teste
ini_set('display_errors', '1'); // Somente ambiente teste
ini_set("allow_url_fopen", "ON");

function getRealUserIp(){
    switch(true){
      case (!empty($_SERVER['HTTP_X_REAL_IP'])) : return $_SERVER['HTTP_X_REAL_IP'];
      case (!empty($_SERVER['HTTP_CLIENT_IP'])) : return $_SERVER['HTTP_CLIENT_IP'];
      case (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) : return $_SERVER['HTTP_X_FORWARDED_FOR'];
      default : return $_SERVER['REMOTE_ADDR'];
    }
}

$ip = getRealUserIp();
$details = json_decode(file_get_contents("http://ipinfo.io/{$ip}/json"));
$posicao = explode(",", $details->loc);
$latitude = $posicao[0];
$longitude = $posicao[1];

$localizacao = "";

$baseUrl = "http://maps.google.com/maps/api/geocode/json?latlng=$latitude,$longitude&sensor=false";
$requestUrl    = str_replace(" ", "+", str_replace("+", "%2B", utf8_encode($baseUrl)));
$string = file_get_contents($requestUrl);
$json_retorno = json_decode($string, true);
if ($json_retorno["status"]=="OK"){
    $bairro = $json_retorno["results"][0]["address_components"][2]["short_name"];
    $cidade = $json_retorno["results"][0]["address_components"][4]["short_name"];
    $estado = $json_retorno["results"][0]["address_components"][5]["short_name"];
    if ($bairro <> ""){
        $localizacao .= "Bairro: " . $bairro . " - ";
    }
    if ($cidade <> ""){
        $localizacao .= "Cidade: " . $cidade . " - ";
    }
    if ($estado <> ""){
        $localizacao .= "Estado: " . $estado;
    }
}
echo ("Sua localização atual:" . $localizacao);
?>

Boa Daniel! Neste caso Thiago, tudo que você precisa fazer é colocar esse código dentro do seu tema em uma função e usar. Agradeça ao Daniel pelo tempo e código que ele implementou! =)

Muito obrigado a todos pela ajuda. Irei utilizar esse código é retorno. Eu utilizei o javascript para olhar um geolocalizador e lá dentro fiz o If por cidade.. funcionou mas ficou muito lento. Assim que testar retorno aqui. Muito obrigado por toda a ajuda.