Resetear a moneda por defecto | Woocommerce Currency Switcher

Hola, tal vez me recuerden por consultas como “Restringir pasarela de pago” :rofl: :rofl:
Bueno, eso ya lo resolví, estoy usando el Plugin Woocommerce Currency Switcher y tengo un pequeño problema:

  • En la tienda, tengo productos físicos y digitales. Los digitales se pueden vender en dólares a través de Paypal, y los físicos, por una cuestión de costos de logística, solo se pueden vender en Argentina.

  • Pude poner como moneda base el peso argentino, y lograr que se restrinja la pasarela de pago según moneda (Mercado Pago para Pesos, Paypal para Dólares).

  • Para mostrar el switcher sólo en los productos digitales, lo que hice fue introducirlo como shortcode en cada uno de esos productos. Medio tedioso pero fue la mejor solución que encontré, y al ser pocos productos zafé.

:point_right:t3: Ahora bien, el problema con el que me encuentro es que al cambiar el switcher en uno de estos productos a dólares, si quiero seguir comprando o navegando, todo el sitio cambia a dólares.
Es decir, incluso los productos físicos (más allá de no tener el switcher) cambian a dólares automáticamente.

Por suerte di con el desarrollador (Muy buena onda) que me contestó sobre otras cosas y sobre esto mismo, pero no le estoy encontrando la vuelta al código que me dijo que agregue en functions.php, ya que me dijo que no existe esa opción nativamente en el plugin.

Me respondió lo siguiente:
Unfortunately the plugin does not have this feature.
You need code customization.
An example:

add_filter('wp_head',function(){
if(class_exists('WOOCS')  AND !(is_page('add_your_page')) ){
global $WOOCS;
$WOOCS->reset_currency();
}
});

But pay attention that you need to change this string:


https://codex.wordpress.org/Conditional_Tags

  • Aclaro, no sé prácticamente nada de PHP, pero por lo que leí, hay que cambiar el parámetro que está marcado para las páginas donde quiero que se resetee.
    Como no puedo poner cada una de ellas, lo que hice fue decirle que cambie en todas las páginas de determinada categoría (según lo que leí sobre Conditonal Tags en el Codex de WP).

Quedó así:

add_filter('wp_head',function(){
if(class_exists('WOOCS')  AND !(is_category ($kit-creativos)) ){
global $WOOCS;
$WOOCS->reset_currency();
}
});

Donde kit-creativos es slug de una de las categorías donde no quiero que se cambie la moneda.
Al parecer error no hay, pero si dejo esa función corriendo, no me deja ni siquiera cambiar el valor en el switcher de los productos digitales :scream:

Dejo el sitio en cuestión, previo deshabilitación de esa función, para que vean lo que comento al ppio:

Url de preguntas y respuestas con el desarrollador:

¿Alguno que la tenga clara con PHP, funciones y eso, que me pueda tirar alguna idea de qué estoy haciendo mal?
Mil gracias por anticipado!

Hola buenas noches, entiendo que el reset lo necesitás hacer en productos de esa categoría, entonces el código sería:

add_filter(‘wp_head’, function(){
if( class_exists(‘WOOCS’) && ( is_product_category(‘kit-creativos’)||( is_product() && has_term( ‘kit-creativos’, ‘product_cat’ ) ) ) ) {
global $WOOCS;
$WOOCS->reset_currency();
}
});

Espero te ayude.
Saludos!

Juan Manuel
Wayra Digital

Hola @wayramarketing, perdón por la tardanza en la respuesta, tuve una semana levantando muertos, jaja.
Ya me puse de nuevo con esto, y lamentablemente el código que me pasaste tampoco funciona. Es decir, sigue cambiándose a dólares todos los productos cuando cambio la moneda de uno de los digitales.

Más allá de eso, lo ideal, en realidad, sería poder distinguirlos por tipo de producto, así se abarcan varias categorías de productos físicos. Lo que necesito es que los productos digitales y/o descargables se puedan switchear a dólares pero los físicos no.
¿Creés que es posible eso? Sino ¿Sabés dónde puedo indagar para tener alguna punta? De PHP prácticamente nada yo, pero si lo leo y logro entender la estructura podría ir probando.

Gracias por tomarte el tiempo de responderme, lo valoro mucho!

Hola, desconzco este plugin, si lo que necesitás es ejecutar el reset para productos físicos podrías usar.

add_filter(‘wp_head’, function(){
global $product;
if( class_exists(‘WOOCS’) && is_product() && $product->is_type( [‘simple’,‘variable’] ) ) {
global $WOOCS;
$WOOCS->reset_currency();
}
});

Estoy medio complicado de tiempo para hacer pruebas, pero con $product->is_type(‘TIPO_DE_PRODUCTO’) podés ir filtrando.

Espero te ayude.

Saludos!

Juan Manuel
Wayra Digital

Gracias @wayramarketing, ya mismo lo pruebo!
Sin saber nada de PHP, a priori tengo mis dudas con [‘simple’,‘variable’] porque los productos virtuales no dejan de ser simples, o sea que también me los filtraría.
Estoy buscando en documentación cómo debería identificar a productos físicos o virtuales, pero no consigo dar con eso. :frowning_face:

Cualquier cosa te vuelvo a consultar, gracias de nuevo por tu tiempo!

Ahi lo probé, lamentablemente no funciona…
Estuve leyendo un poco y creo que lo que estoy buscando se declara como:
$product_options[‘downloadable’] o [‘virtual’] pero no encontré cómo se declaran los productos físicos.

¿Se podría cambiar el código para decir que, en vez que “si son físicos > no resetee el currency” para “si no son [‘downloadable’,‘virtual’] no resetee el currency”?

Espero haberme explicado, creo que ya estoy bajando los brazos con esto… :stuck_out_tongue_closed_eyes: