В настоящее время я заканчиваю веб-сайт для своего клиента, и единственная функция, которую я не могу реализовать, — это показать правильный номер телефона пользователю в зависимости от местоположения.
Я пытался найти некоторые плагины, но безуспешно. Может быть, кто-то может помочь мне с фрагментом кода, который я могу реализовать эту функцию? Спасибо!
Пара вещей.
Поскольку геолокация может быть подделана, в идеале вы должны отобразить все доступные номера и иметь основной номер. Или даже лучше иметь номера для отслеживания звонков, которые меняются с помощью сценария на основе привлечения посетителей и источника рефералов.
За исключением всего этого, вы можете использовать такой ресурс, как ipstack
Вы делаете запрос к https://api.ipstack.com/
с IP-адресом, который вы хотите использовать (потенциально $_SERVER['REMOTE_ADDR']
?) и ваш ключ доступа. Таким образом, ваш URL-адрес запроса должен выглядеть следующим образом:
$ipstack_url = 'https://api.ipstack.com/123.456.789.001?access_key=YOURACCESSKEYHERE'
WordPress имеет встроенную функцию удаленного URL wp_remote_get()
что вы можете использовать, чтобы получить это значение.
$geo_info = wp_remote_retrieve_body( wp_remote_get( $ipstack_url ) );
Чтобы быть в курсе ipstack (и вашего лимита запросов), вы, вероятно, должны кешировать это с помощью WP_Transients API в течение не менее 24 часов (эти результаты не сильно изменятся, поэтому вы можете кэшировать еще дольше, если хотите). Вы получаете 10 000 запросов в месяц бесплатно, поэтому, если у вас сайт с высоким трафиком, это еще важнее
Теперь вы можете делать то, что хотите, с запросом ipstack для этого IP-адреса, например, отображать другой номер телефона в зависимости от текущего города.
Если мы объединим все это, вы получите что-то вроде этого:
// Get your IP however you want
$ip_addr = $_SERVER['REMOTE_ADDR'];
// You'll need an API Key
$api_key = 'YOURACCESSKEYHERE';
// Build your API URL
$api_url = "https://api.ipstack.com/$ip_addr?access_key=$api_key"; // Build the API Url
// Give your transient a unique, yet identifiable name
$transient_name = "ipstack-$ip_addr";
// Check for our transient, if it's not there set it for 24 hours
if( false === ( $transient = get_transient( $transient_name ) ) ){
set_transient( $transient_name, wp_remote_retrieve_body( wp_remote_get( $api_url ) ), 86400 );
}
// Decode the JSON response we got
$json = json_decode( get_transient( $transient_name ) );
// Do whatever you want with it
if( $json->city == 'Los Angeles' ){
echo 'Phone For LA: 123-456-7890';
} else if( $json->city == 'San Francisco' ){
echo 'Phone For SF: 321-654-0987';
} else {
echo 'Default Phone: 098-765-4321';
}
Других решений пока нет …