English (United Kingdom)
Knowledge Base  >  Vik Booking  >  For Developers  >  Currency Converter customization

It is possible to define specific hooks to overwrite or extend the default currency conversion functionalities. The hooks available allow to integrate custom conversion/exchange rates calculation, and to define the symbol to use for a specific currency, the number of decimals, the decimals/thousands separator symbols etc..

It is necessary to create a custom WordPress plugin to declare these hooks compatible with Vik Booking.

<?php
/*
Plugin Name:  VBO Custom Currency Conversion
Plugin URI:   https://vikwp.com/
Description:  Helper plugin to override the currency conversion functions in Vik Booking.
Version:      1.0
Author:       E4J s.r.l.
Author URI:   https://vikwp.com
License:      GPL2
License URI:  https://www.gnu.org/licenses/gpl-2.0.html
*/

// No direct access
defined('ABSPATH') or die('No script kiddies please!');

/**
 * Filter to override a conversion rate between two currencies.
 * 
 * @param 	float 	$conv_rate 		the conversion rate processed by other plugins, null by default.
 * @param   string 	$from_currency 	the currency to convert from (i.e. default currency in Vik Booking).
 * @param 	string 	$to_currency 	the currency to convert to (ISO 4217 Alpha-3 code).
 * 
 * @return 	float|int 				the conversion rate between the two currencies, or null.
 */
add_filter('vikbooking_get_conversion_rate', function($conv_rate, $from_currency, $to_currency) {
	if (!is_null($conv_rate)) {
		// another plugin must have set a custom conversion rate already
		return $conv_rate;
	}

	if ($from_currency === 'EUR' && $to_currency === 'USD') {
		// return a static conversion rate between EUR and USD
		return 1.50;
	}

	if ($to_currency === 'XXX') {
		// return a static conversion rate for the custom currency code "XXX"
		return 2;
	}

	// return null to not interfere with the default conversion value
	return null;
}, 10, 3);

/**
 * Filter to override the symbol, number of decimals, decimals and thousands separators of a currency.
 * 
 * @param 	array 	$currency_info 	the information array processed by other plugins, null by default.
 * @param 	string 	$currency_code 	the currency ISO 4217 Alpha-3 code to parse.
 * 
 * @return 	array 					associative list of currency information, or null.
 */
add_filter('vikbooking_get_currency_data', function($currency_info, $currency_code) {
	if (!is_null($currency_info)) {
		// another plugin must have set custom information already
		return $currency_info;
	}

	if ($currency_code === 'USD') {
		// return custom information for the currency code USD
		return [
			'symbol' 			  => '&#128561;',
			'decimals' 			  => 3,
			'decimals_separator'  => '.',
			'thousands_separator' => ',',
		];
	}

	if ($currency_code === 'XXX') {
		// return custom information for the dummy currency code "XXX"
		return [
			'symbol' 			  => '&#128513;',
			'decimals' 			  => 0,
			'decimals_separator'  => '',
			'thousands_separator' => '',
		];
	}

	// return null to not interfere with the default currency information
	return null;
}, 10, 2);

/**
 * Filter to add a custom currency code to the available list.
 * 
 * @param 	bool 	$exists 		true if exists, false if it doesn't, null by default.
 * @param 	string 	$currency_code 	the currency ISO 4217 Alpha-3 code to parse.
 * 
 * @return 	bool 					true if exists, false if it doesn't, or null.
 */
add_filter('vikbooking_check_currency_exists', function($exists, $currency_code) {
	if (!is_null($exists)) {
		// another plugin must have processed this currency already
		return $exists;
	}

	if ($currency_code === 'XXX') {
		// add the dummy currency code "XXX" to the list of available currencies
		return true;
	}

	// return null to not interfere with the default currency validation
	return null;
}, 10, 2);

By creating a PHP file with a name like "vbo_custom_currency_conversion.php" and with the above code inside it, you will have your own custom-coded WordPress plugin to manipulate the default currency exchange functionalities.

Do not forget to install and activate the plugin on your WordPress website, or the hooks won't be registered by WordPress itself.

Last Update: 2023-02-21
Helpful?
100% of people found this helpful.
This site uses cookies. By continuing to browse you accept their use. Further information