Este es el foro de soporte técnico de WPML, el plugin multilingüe de WordPress.

Todas las personas pueden leerlo pero solo los clientes de WPML pueden ingresar comentarios. El equipo de WPML responde en el foro 6 días a la semana, durante 22 horas por día.

This topic contains 6 respuestas, has 2 mensajes.

Last updated by Andrés hace 3 meses, 2 semanas.

Assigned support staff: Andrés.

Autor Publicaciones
julio 2, 2019 a las 5:43 pm #4129189

Mariano Ceruti

Hola! Necesito seguir con este hilo abierto hace un tiempo: https://wpml.org/es/forums/topic/necesito-que-en-el-front-end-aparezca-el-precio-automaticamente-en-distintas-mon/

El tema es que la función que ahí utilicé me funcionó mientras usé el conversor de monedas automático, pero ahora estoy usando precios manuales para las distintas monedas.

Podrían ayudarme con esto?

Copio nuevamente el código aquí:

function precio_pesos( $atts ) {
$atts = shortcode_atts( array(
'id' => null,
), $atts, 'bartag' );

$html = '';

if( intval( $atts['id'] ) > 0 && function_exists( 'wc_get_product' ) ){
$_product = wc_get_product( $atts['id'] );
$preciopesos = $_product->get_price();
$currency = "US";
$new_price = apply_filters('wcml_raw_price_amount', $preciopesos, $currency);
return $new_price;
}
}
add_shortcode( 'woocommerce_price', 'precio_pesos' );

Muchas gracias!

julio 3, 2019 a las 5:36 am #4131875

Andrés
Supporter

Languages: Inglés (English ) Español (Español ) Francés (Français )

Timezone: Europe/Paris (GMT+02:00)

Hola Mariano,

¡Bienvenido de nuevo!

Me temo que esta es una limitación del filtro wcml_raw_price_amount. Tal vez para este caso, el filtro wcml_product_custom_prices se ajuste más a lo que buscas.

Sin embargo, nos encontramos limitados en soporte en ahondar en tu caso ya que se trata de código personalizado.

Espero que esto te sea de ayuda.

Documentación:
https://wpml.org/wcml-hook/wcml_product_custom_prices/
https://wpml.org/wcml-hook/wcml_raw_price_amount/

Un saludo,
Andrés

julio 3, 2019 a las 1:49 pm #4137097

Mariano Ceruti

Hola Andrés! Un placer nuevamente.

Estuve viendo el filtro. Voy a probarlo. Pero tengo una duda. Cuando yo coloco manualmente los precios en otras monedas, ese valor queda guardado en alguna variable del array de producto? Porque teniendo esa variable puedo realizar la función que traiga ese valor.

Gracias!

julio 3, 2019 a las 3:35 pm #4137957

Andrés
Supporter

Languages: Inglés (English ) Español (Español ) Francés (Français )

Timezone: Europe/Paris (GMT+02:00)

He estado consultando con nuestros desarrolladores y ese filtro tal vez no te sea de utilidad. Lo que podrías hacer sería escribir un código personalizado donde puedas encontrar la ID del producto y luego llamar la meta para la divisa (currency), algo como _price_USD, por ejemplo.

Espero que te sirva de ayuda.

Saludos

julio 4, 2019 a las 2:12 pm #4144321

Mariano Ceruti

Hola Andres! Andrés, gracias por tu ayuda.

Te cuento que casi he logrado hacerlo, pero estoy con una traba y no encuentro dónde está el problema.

He hecho lo siguiente.


	/**
	 * Cambiar símbolo de la moneda
	 */
	add_filter('woocommerce_currency_symbol', 'change_existing_currency_symbol', 10, 2);

	function change_existing_currency_symbol( $currency_symbol, $currency ) {
		 switch( $currency ) {
			  case 'ARS': $currency_symbol = 'AR$'; break;
			  case 'US': $currency_symbol = 'USD'; break;
		 }
		 return $currency_symbol;
	}	

	// Obtener precio en USD 
	
	function precio_dolares() {		
		?><p class="precio_usd_p">USD <?php precio_otra_moneda (); ?></p> <?php
	}	
		
	function precio_otra_moneda () {
		global $product;
		global $product_currency;
		$product_id = $product->get_id();  
		$product_currency = get_woocommerce_currency();
		if ($product_currency == 'ARS') {
			$currency = 'USD';
			echo apply_filters( 'wcml_product_price_by_currency', $product_id, $currency );
		} else {
			$currency = 'ARS';
			echo apply_filters( 'wcml_product_price_by_currency', $product_id, $currency );			
		}			
	}	

El código de cambio de símbolo te lo copio por si tiene alguna relación, creo que no. Todo este código lo tengo en functions.php y se ejecuta como una acción en el módulo de la tienda, (woocommerce_after_shop_loop_item).

Como ves en las imágenes que adjunto, está funcionando cuando la moneda es pesos argentinos (ARS), arroja los valores correctos (no le prestes atención a los símbolos del frontend porque no los he cambiado aún, sólo a los valores). Sin embargo, cuando la moneda es dólares (USD) el precio que figura abajo resaltado, que debería ser el valor en pesos argentinos, no entiendo de dónde proviene.

Los valores correctos de los productos son:

1 - USD 40, AR$8
2- USD 30, AR$6
3- USD 20, AR$4

Podrías ayudarme con esto?

Gracias!

julio 4, 2019 a las 2:38 pm #4144623

Mariano Ceruti

Hola Andres! Ahí pude resolverlo, gracias a este topic: https://wpml.org/forums/topic/wcml_product_price_by_currency-returns-id-insted-of-price/

Eso era lo que estaban sucediendo, por lo tanto el código final queda como sigue:

	/**
	 * Cambiar símbolo de la moneda
	 */
	add_filter('woocommerce_currency_symbol', 'change_existing_currency_symbol', 10, 2);

	function change_existing_currency_symbol( $currency_symbol, $currency ) {
		 switch( $currency ) {
			  case 'ARS': $currency_symbol = 'AR$'; break;
			  case 'USD': $currency_symbol = 'USD'; break;
		 }
		 return $currency_symbol;
	}	
	
	// Obtener precio en USD 
	
	function precio_dolares() {		
		?><p class="precio_otra_moneda"><?php otra_moneda(); precio_otra_moneda (); ?></p> <?php
	}	
		
	function precio_otra_moneda () {
		global $product;
		global $product_currency;
		global $woocommerce_wpml;  
		$product_id = $product->get_id();  
		$product_currency = get_woocommerce_currency();
		if ($product_currency == 'ARS') {
			echo $woocommerce_wpml->multi_currency->prices->get_product_price_in_currency( $product_id, 'USD' );
		} else {			
			echo $woocommerce_wpml->multi_currency->prices->get_product_price_in_currency( $product_id, 'ARS' );			
		}			
	}
	
	function otra_moneda () {
		global $moneda;
		$product_currency = get_woocommerce_currency();
		if ($product_currency == 'ARS') {
			$moneda = "USD ";
			echo $moneda;
		} else {
			$moneda = "AR$ ";		
			echo $moneda;
		}			
	}

Muchas gracias!
Saludos!

julio 4, 2019 a las 3:04 pm #4144743

Andrés
Supporter

Languages: Inglés (English ) Español (Español ) Francés (Français )

Timezone: Europe/Paris (GMT+02:00)

La verdad es que lo has resuelto tu solo, pero gracias por compartir la solución, seguro le será útil a otros usuarios. 🙂

Saludos