Docs

Docs

menu-to-close

Visibilidad de Joinchat por países

Introducción

Hay ocasiones en las que una compañía solo ofrece sus servicios o productos en un único territorio, no tiene sentido por tanto que mostremos el botón flotante de Joinchat fuera de esa localización. Vamos a ver cómo podemos definir en qué país o países se muestra Joinchat, ocultando este canal de contacto al resto.

Para implementar esta funcionalidad vamos a usar un «Snippet» y como en otras ocasiones utilizaremos el plugin Code Snippets, y desde aquí podéis descargar el JSON para poder importarlo desde dicho plugin, pero si te sientes cómodo puedes hacerlo como prefieras.

Código

function joinchat_hide_by_country( $show ) {

	// true for included countries, false for excluded countries.
	$is_whitelist = true;

	// List of countries.
 // Edit list to your needs, e.g. for Iberian Peninsula (Spain & Portugal)
	$countries = array(
		'ES',
		'PT',
	);

	// Keep privacy anonymize user ip.
	$user_ip = wp_privacy_anonymize_ip( $_SERVER['REMOTE_ADDR'] );
	$cached_ip = 'ipcountry_' . md5( $user_ip );

	if ( ! $country = get_transient( $cached_ip ) ) {

		// Retreive two-letter country code (ISO 3166-1 alpha-2).
		// For more options view API doc (https://ip-api.com/docs).
		$response = wp_remote_get( 'http://ip-api.com/json/' . $user_ip . '?fields=status,countryCode' );
		$data = json_decode( wp_remote_retrieve_body( $response ) ?: '{"status":"error"}' );

		if ( $data && $data->status === 'success' ) {
			$country = $data->countryCode;

			// Cache country in transient (1 day) for faster future responses
			// and don't pass rate limit (45 requests per minute from an IP address).
			set_transient( $cached_ip, $country, DAY_IN_SECONDS );
		}
	}

	if ( ! $country ) {
		return $show;
	}

	// Check current country.
	if ( $is_whitelist && ! in_array( $country, $countries ) || ! $is_whitelist && in_array( $country, $countries ) ) {
		return false;
	}

	return $show;

}
add_filter( 'joinchat_show', 'joinchat_hide_by_country' );
Lenguaje del código: PHP (php)

Como podéis ver está perfectamente comentado y es muy simple, solamente tenéis que añadir los países en los que deseáis que se muestre Joinchat, en el ejemplo que os damos se trataría de la península Ibérica (‘ES’ y ‘PT’), de tal forma que solo los visitantes de estos países verán el botón flotante de Joinchat para poder contactar.

Para hacer esto posible usaremos la API pública de Gelolocation IP-API. Es gratuita con un límite de 45 peticiones por minuto desde la misma IP. Para no repetir llamadas a la API consultando la misma IP de usuario y tener una respuesta más rápida, el resultado se guarda en caché en un «transient» durante 24 horas.

Otro punto importante es que la IP del usuario se anonimiza para mantener la privacidad y no tener ningún problema con la GDPR 😉

Los códigos de país deben usar el formato de dos letras (ISO 3166-1 alfa-2).

NOTA

⚠️ Esta consulta se realiza en el servidor con cada petición por lo que no funcionará con caché de página.

🌟 Para una integración perfecta de la visibilidad por países en Joinchat con soporte de caché de página puedes adquirir Joinchat Freelance o Agency y solicitar el add-on Joinchat Country Visibility.

Visibilidad por países
Visibilidad de Joinchat por países