woocommerce_wpml = $woocommerce_wpml; $this->args = $args; add_action( 'wcml_before_multi_currency_ui', [ $this, 'render' ] ); } public function get_model() { $currencies_not_used = array_diff( array_keys( $this->args['wc_currencies'] ), array_keys( $this->args['currencies'] ), [ $this->args['default_currency'] ] ); $current_currency = empty( $this->args['currency_code'] ) ? current( $currencies_not_used ) : $this->args['currency_code']; $exchange_rate_services = $this->woocommerce_wpml->multi_currency->exchange_rate_services; $exchange_rates_automatic = $exchange_rate_services->get_setting( 'automatic' ); if ( $exchange_rates_automatic ) { $service_id = $exchange_rate_services->get_setting( 'service' ); $services = $exchange_rate_services->get_services(); $exchange_rates_service = isset( $services[ $service_id ] ) ? $services[ $service_id ]->get_name() : ''; } else { $exchange_rates_service = ''; } $tracking_link = new WCML_Tracking_Link(); $model = [ 'args' => $this->args, 'form' => [ 'select' => __( 'Select currency', 'woocommerce-multilingual' ), 'rate' => [ 'label' => __( 'Exchange Rate', 'woocommerce-multilingual' ), 'only_numeric' => __( 'Only numeric', 'woocommerce-multilingual' ), 'min' => '0.01', 'step' => '0.01', 'set_on' => empty( $this->args['currency']['updated'] ) ? '' : sprintf( __( 'Set on %s', 'woocommerce-multilingual' ), date( 'F j, Y g:i a', strtotime( $this->args['currency']['updated'] ) ) ), 'previous' => empty( $this->args['currency']['previous_rate'] ) ? '' : ' ' . sprintf( __( '(previous value: %s)', 'woocommerce-multilingual' ), $this->args['currency']['previous_rate'] ), ], 'preview' => [ 'label' => __( 'Currency Preview', 'woocommerce-multilingual' ), 'value' => $this->get_price_preview( $current_currency ), ], 'position' => [ 'label' => __( 'Currency Position', 'woocommerce-multilingual' ), 'left' => __( 'Left', 'woocommerce-multilingual' ), 'right' => __( 'Right', 'woocommerce-multilingual' ), 'left_space' => __( 'Left with space', 'woocommerce-multilingual' ), 'right_space' => __( 'Right with space', 'woocommerce-multilingual' ), ], 'thousand_sep' => [ 'label' => __( 'Thousand Separator', 'woocommerce-multilingual' ), ], 'decimal_sep' => [ 'label' => __( 'Decimal Separator', 'woocommerce-multilingual' ), ], 'num_decimals' => [ 'label' => __( 'Number of Decimals', 'woocommerce-multilingual' ), 'only_numeric' => __( 'Only numeric', 'woocommerce-multilingual' ), ], 'rounding' => [ 'label' => __( 'Rounding to the nearest integer', 'woocommerce-multilingual' ), 'disabled' => __( 'Disabled', 'woocommerce-multilingual' ), 'up' => __( 'Up', 'woocommerce-multilingual' ), 'down' => __( 'Down', 'woocommerce-multilingual' ), 'nearest' => __( 'Nearest', 'woocommerce-multilingual' ), 'increment' => __( 'Increment for nearest integer', 'woocommerce-multilingual' ), 'rounding_tooltip' => sprintf( __( 'Round the converted price to the closest integer. %se.g. 15.78 becomes 16.00', 'woocommerce-multilingual' ), '
' ), 'increment_tooltip' => sprintf( __( 'The resulting price will be an increment of this value after initial rounding.%se.g.:', 'woocommerce-multilingual' ), '
' ) . '
' . __( '1454.07 » 1454 when set to 1', 'woocommerce-multilingual' ) . '
' . __( '1454.07 » 1450 when set to 10', 'woocommerce-multilingual' ) . '
' . __( '1454.07 » 1500 when set to 100', 'woocommerce-multilingual' ) . '
', 'autosubtract_tooltip' => __( 'The value to be subtracted from the amount obtained previously.', 'woocommerce-multilingual' ) . '

' . __( 'For 1454.07, when the increment for the nearest integer is 100 and the auto-subtract amount is 1, the resulting amount is 1499.', 'woocommerce-multilingual' ), ], 'autosubtract' => [ 'label' => __( 'Autosubtract amount', 'woocommerce-multilingual' ), 'only_numeric' => __( 'Only numeric', 'woocommerce-multilingual' ), ], 'payment_gateways' => [ 'label' => __( 'Payment Gateways', 'woocommerce-multilingual' ), 'settings_label' => sprintf( __( 'Custom settings for %s', 'woocommerce-multilingual' ), $current_currency ), 'learn_url' => $tracking_link->generate( 'https://wpml.org/?page_id=290080#payment-gateways-settings', 'payment-gateways-settings', 'documentation' ), 'learn_txt' => __( 'Learn more', 'woocommerce-multilingual' ), ], 'number_error' => __( 'Please enter a valid number', 'woocommerce-multilingual' ), 'cancel' => __( 'Cancel', 'woocommerce-multilingual' ), 'save' => __( 'Save', 'woocommerce-multilingual' ), ], 'automatic_rates' => $exchange_rates_automatic, 'automatic_rates_tip' => sprintf( __( 'Exchange rate updated automatically from %s', 'woocommerce-multilingual' ), $exchange_rates_service ), 'current_currency' => $current_currency, 'active_currencies' => $this->woocommerce_wpml->multi_currency->get_currencies( true ), 'payment_gateways_enabled' => $this->woocommerce_wpml->multi_currency->currencies_payment_gateways->is_enabled( $current_currency ), 'payment_gateways' => $this->woocommerce_wpml->multi_currency->currencies_payment_gateways->get_gateways(), ]; return $model; } public function enqueue_resources() { wp_enqueue_style( 'otgsSwitcher' ); } public function render() { $this->enqueue_resources(); echo $this->get_view(); } protected function init_template_base_dir() { $this->template_paths = [ WCML_PLUGIN_PATH . '/templates/multi-currency/', ]; } public function get_template() { return 'custom-currency-options.twig'; } public function get_currency_symbol( $code ) { return get_woocommerce_currency_symbol( $code ); } public function get_price_preview( $currency ) { if ( isset( $this->args['currencies'][ $currency ] ) ) { $this->current_currency_for_preview = $currency; add_filter( 'option_woocommerce_currency_pos', [ $this, 'filter_currency_pos' ] ); $args = [ 'currency' => $currency, 'decimal_separator' => $this->args['currencies'][ $currency ]['decimal_sep'], 'thousand_separator' => $this->args['currencies'][ $currency ]['thousand_sep'], 'decimals' => $this->args['currencies'][ $currency ]['num_decimals'], 'price_format' => get_woocommerce_price_format(), ]; $price = wc_price( '1234.00', $args ); remove_filter( 'option_woocommerce_currency_pos', [ $this, 'filter_currency_pos' ] ); unset( $this->current_currency_for_preview ); } else { $args = [ 'currency' => $currency, 'price_format' => get_woocommerce_price_format(), ]; $price = wc_price( '1234.00', $args ); } return $price; } public function filter_currency_pos( $value ) { if ( isset( $this->args['currencies'][ $this->current_currency_for_preview ]['position'] ) ) { $value = $this->args['currencies'][ $this->current_currency_for_preview ]['position']; } return $value; } }