Files
2025-02-24 22:33:42 +01:00

65 lines
2.1 KiB
PHP

<?php
/**
* /!\ This is currently only supported for when WooCommerce is enabled, and the geolocation is enabled.
*/
if (!defined('ABSPATH')) die('No direct access allowed');
/**
* Get the country code
*
* @return string
*/
function wpo_cache_get_visitor_country_code() {
static $country_code;
if (!empty($country_code)) return $country_code;
$defaults = wpo_cache_config_get('default_values');
// 1. check if the server has geolocated the user already:
if (!empty($_SERVER['HTTP_CF_IPCOUNTRY']) && !in_array($_SERVER['HTTP_CF_IPCOUNTRY'], array('XX', 'T1'))) {
// CloudFlare has a variable available.
$country_code = strtoupper($_SERVER['HTTP_CF_IPCOUNTRY']);
} elseif (!empty($_SERVER['GEOIP_COUNTRY_CODE'])) {
// WP.com VIP has a variable available.
$country_code = strtoupper($_SERVER['GEOIP_COUNTRY_CODE']);
} elseif (!empty($_SERVER['HTTP_X_COUNTRY_CODE'])) {
// VIP Go has a variable available also.
$country_code = strtoupper($_SERVER['HTTP_X_COUNTRY_CODE']);
} elseif (isset($defaults['wc_geolocate']) && $defaults['wc_geolocate']) {
// wc_geolocate is only true if PHP is >= 5.4
include 'inc/geolite2-compatibility.php';
$country_code = wpo_get_country_code_from_geolite2($defaults['wc_geolocate_database'], $defaults['WC_ABSPATH']);
}
if (!empty($country_code)) return $country_code;
// 3. Use default country
if (isset($defaults['wc_default_country'])) {
$country_code = $defaults['wc_default_country'];
return $country_code;
}
return '';
}
/**
* Get the user's IP Address (Extracted from WooCommerce WC_Geolocation::get_ip_address())
*
* @return string
*/
function wpo_cache_get_visitor_ip_address() {
if (isset($_SERVER['HTTP_X_REAL_IP'])) {
return $_SERVER['HTTP_X_REAL_IP'];
} elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
// Proxy servers can send through this header like this: X-Forwarded-For: client1, proxy1, proxy2
// Make sure we always only send through the first IP in the list which should always be the client IP.
return (string) trim(current(preg_split('/,/', $_SERVER['HTTP_X_FORWARDED_FOR'])));
} elseif (isset($_SERVER['REMOTE_ADDR'])) {
return $_SERVER['REMOTE_ADDR'];
}
return '';
}