WPCS - WordPress Currency Switcher Professional

¿Cómo mostrar el código de la moneda actual en WordPress?

Aprende a mostrar el código de la moneda actual en WordPress con un shortcode personalizado que devuelve solo el código (por ejemplo, "USD", "EUR", "GBP") sin ningún texto adicional.

El problema

WPCS incluye el shortcode [wpcs_current_currency] que muestra la moneda actual, pero su resultado es:

Current currency is: USD

Lo que suele hacer falta: solo el código de la moneda: USD

Esto resulta útil cuando:

  • Se envían datos de la moneda a aplicaciones externas
  • Se muestra la moneda dentro de tu propio texto
  • Se integra con formularios u otros plugins
  • Se crean presentaciones de precios personalizadas

Solución: crear un shortcode personalizado

Añade este código al archivo functions.php de tu tema hijo o usa el plugin Code Snippets:

Versión básica (solo el código de la moneda)

/**
 * Custom shortcode to display current currency code
 * Usage: [current_currency]
 * Output: USD (or EUR, GBP, etc.)
 */
add_shortcode('current_currency', function() {
    if (class_exists('WPCS')) {
        global $WPCS;
        return $WPCS->current_currency;
    }
    return '';
});

Uso:
[current_currency]

Resultado:
USD

Versión ampliada (con varias opciones)

Esta versión ofrece más flexibilidad con distintos formatos de salida:

/**
 * Extended currency shortcode with options
 * Usage: [get_currency info="code"]
 * Options:
 * - code: USD
 * - symbol: $
 * - name: US Dollar
 */
add_shortcode('get_currency', function($atts) {
    if (!class_exists('WPCS')) {
        return '';
    }
    
    global $WPCS;
    
    // Default attributes
    $atts = shortcode_atts(array(
        'info' => 'code', // code, symbol, or name
    ), $atts);
    
    $currency = $WPCS->current_currency;
    
    // Get currency data
    $currencies = $WPCS->get_currencies();
    
    switch ($atts['info']) {
        case 'symbol':
            // Return currency symbol ($, €, £)
            return isset($currencies[$currency]['symbol']) ? $currencies[$currency]['symbol'] : '';
            
        case 'name':
            // Return currency name (US Dollar, Euro, etc.)
            return isset($currencies[$currency]['name']) ? $currencies[$currency]['name'] : '';
            
        case 'code':
        default:
            // Return currency code (USD, EUR, GBP)
            return $currency;
    }
});

Ejemplos de uso:
Currency code: [get_currency info="code"]
Currency symbol: [get_currency info="symbol"]
Currency name: [get_currency info="name"]

Resultado:
Currency code: USD
Currency symbol: $
Currency name: US Dollar

Dónde añadir el código

Opción 1: functions.php del tema hijo (recomendado)

  1. Ve a Apariencia → Editor de temas (Appearance → Theme Editor)
  2. Selecciona el tema hijo (Child Theme) (¡importante!)
  3. Abre functions.php
  4. Pega el código al final del archivo
  5. Haz clic en Actualizar archivo (Update File)

Por qué un tema hijo:

  • Las actualizaciones del tema padre no borrarán tu código
  • Más seguro y fácil de mantener

Opción 2: plugin Code Snippets (más sencillo)

  1. Instala el plugin Code Snippets: https://wordpress.org/plugins/code-snippets/
  2. Ve a Snippets → Añadir nuevo (Snippets → Add New)
  3. Pega el código
  4. Configúralo en "Ejecutar en todas partes" ("Run everywhere")
  5. Activa el snippet

Ventajas:

  • No hace falta editar archivos del tema
  • Fácil de activar y desactivar
  • Se mantiene al cambiar de tema

Casos de uso reales

Caso 1: texto de precio personalizado

En lugar de:

Current currency is: USD
Price: $99

Puedes escribir:
Price in [current_currency]: $99

Resultado:
Price in USD: $99

Caso 2: integración con formularios

Envía el código de la moneda a una aplicación externa mediante un campo oculto:

<form>
    <input type="hidden" name="currency" value="[current_currency]">
    <input type="text" name="amount">
    <button type="submit">Submit</button>
</form>

Caso 3: contenido condicional

Combínalo con plugins de shortcodes condicionales:

[if currency="USD"]
Special offer for US customers!
[/if]

Caso 4: texto dinámico

Your cart total in US Dollar: $99.00

Resultado:
Your cart total in US Dollar: $99.00

Caso 5: comparación entre varias monedas

Price: $99 [current_currency]
(Approximately €90 EUR or £80 GBP)

Avanzado: obtener la moneda detectada por GeoIP

Si quieres mostrar la moneda detectada automáticamente por GeoIP (no necesariamente la moneda activa en ese momento):

/**
 * Get GeoIP detected currency
 * Usage: [geoip_currency]
 */
add_shortcode('geoip_currency', function() {
    if (!class_exists('WPCS')) {
        return '';
    }
    
    global $WPCS;
    
    // Get currency detected by GeoIP
    $geo_currency = $WPCS->get_currency_by_country(
        $WPCS->get_user_country_code()
    );
    
    return $geo_currency ? $geo_currency : $WPCS->default_currency;
});

Caso de uso: mostrar al usuario qué moneda se detectó según su ubicación:
We detected you're browsing from [geoip_currency] region.
Currently viewing prices in [current_currency].

Avanzado: obtener toda la información de la moneda

Obtén todos los datos de la moneda actual:

/**
 * Get comprehensive currency data
 * Usage: [currency_info]
 */
add_shortcode('currency_info', function() {
    if (!class_exists('WPCS')) {
        return '';
    }
    
    global $WPCS;
    
    $currency = $WPCS->current_currency;
    $currencies = $WPCS->get_currencies();
    $data = $currencies[$currency];
    
    $output = sprintf(
        'Code: %s | Symbol: %s | Name: %s | Rate: %s',
        $currency,
        $data['symbol'],
        $data['name'],
        $data['rate']
    );
    
    return $output;
});

Resultado:
Code: EUR | Symbol: € | Name: Euro | Rate: 0.92

Dar estilo al resultado

Puedes envolver el resultado en HTML para darle estilo:

add_shortcode('styled_currency', function() {
    if (!class_exists('WPCS')) {
        return '';
    }
    
    global $WPCS;
    $currency = $WPCS->current_currency;
    
    return '<span class="currency-badge">' . esc_html($currency) . '</span>';
});

Después añade el CSS:
.currency-badge {
    background: #007bff;
    color: white;
    padding: 2px 8px;
    border-radius: 3px;
    font-size: 12px;
    font-weight: bold;
}

Resultado:
<span style="background:#007bff;color:white;padding:2px 8px;border-radius:3px;font-size:12px;font-weight:bold;">USD</span>

Solución de problemas

El shortcode no muestra nada

Problema: [current_currency] aparece en blanco

Posibles causas:

  1. WPCS no está activo
    • Comprueba que el plugin WPCS esté instalado y activado
    • Revisa la página de plugins
  2. El código no se añadió correctamente
    • Comprueba que el código esté en functions.php o en Code Snippets
    • Busca errores de sintaxis de PHP
    • Consulta el registro de errores (si WP_DEBUG está activado)
  3. Conflicto con el nombre del shortcode
    • Otro plugin podría usar el mismo nombre de shortcode
    • Prueba con otro nombre: [my_currency] en su lugar

Solución: añade una comprobación de errores a tu shortcode:

add_shortcode('current_currency', function() {
    if (!class_exists('WPCS')) {
        return '<!-- WPCS plugin not found -->';
    }
    
    global $WPCS;
    
    if (!isset($WPCS->current_currency)) {
        return '<!-- Currency not set -->';
    }
    
    return $WPCS->current_currency;
});

Consulta el código fuente de la página para ver el mensaje de error.

Se muestra una moneda incorrecta

Problema: el shortcode muestra una moneda incorrecta

Posibles causas:

  1. Problema de caché
    • Vacía todas las cachés (WordPress, navegador, servidor)
    • Prueba en modo incógnito
  2. La moneda aún no se ha cambiado
    • El usuario no ha cambiado la moneda manualmente
    • La detección por GeoIP no funciona
    • Revisa los ajustes de WPCS

Solución:

  • Vacía las cachés
  • Prueba el cambio de moneda manualmente
  • Comprueba que GeoIP esté configurado en WPCS

El shortcode funciona en entradas pero no en widgets

Problema: el shortcode se muestra en las entradas, pero no en los widgets de la barra lateral

Causa: WordPress no procesa shortcodes en los widgets de forma predeterminada

Solución: añade este código para habilitar los shortcodes en los widgets:

add_filter('widget_text', 'do_shortcode');

Los caracteres especiales se muestran mal

Problema: los símbolos de moneda como € o £ aparecen como �

Solución: usa esc_html() para codificarlos correctamente:

add_shortcode('current_currency', function() {
    if (class_exists('WPCS')) {
        global $WPCS;
        return esc_html($WPCS->current_currency);
    }
    return '';
});

Uso en plantillas PHP

Si necesitas usarlo en archivos de plantilla PHP en lugar de shortcodes:

<?php
if (class_exists('WPCS')) {
    global $WPCS;
    echo esc_html($WPCS->current_currency);
}
?>

O con el shortcode:
<?php echo do_shortcode('[current_currency]'); ?>

Buenas prácticas

  1. Comprueba siempre que WPCS exista

    if (class_exists('WPCS')) {
           // Your code
       }

     

    Así se evitan errores si WPCS se desactiva

  2. Usa nombres de shortcode únicos
    • Evita nombres genéricos como [currency]
    • Usa nombres con prefijo: [my_site_currency]
  3. Escapa la salida
    return esc_html($WPCS->current_currency);

    Evita vulnerabilidades XSS
  4. Prueba tras las actualizaciones de WPCS
    • Las actualizaciones del plugin pueden cambiar la API
    • Prueba tus shortcodes personalizados después de actualizar
  5. Documenta tus shortcodes
    • Anota qué hace cada shortcode
    • Añade comentarios en el código

Alternativa: usar la función integrada de WPCS

En lugar de crear un shortcode, puedes usar la función de WPCS directamente en PHP:

$currency = wpcs_current_currency();
echo $currency; // Outputs: USD

Funciones disponibles:

  • wpcs_current_currency() - Obtiene el código de la moneda actual
  • wpcs_convert_price($amount, $from, $to) - Convierte entre monedas
  • wpcs_get_user_currency() - Obtiene la moneda seleccionada por el usuario

Resumen

Solución rápida (lista para copiar y pegar):

/**
 * Display current currency code
 * Usage: [current_currency]
 * Output: USD (or EUR, GBP, etc.)
 */
add_shortcode('current_currency', function() {
    if (class_exists('WPCS')) {
        global $WPCS;
        return esc_html($WPCS->current_currency);
    }
    return '';
});

Añadir en:

  • functions.php del tema hijo, O BIEN
  • Plugin Code Snippets

Úsalo en cualquier lugar:

[current_currency]

Resultado:
USD

¡Eso es todo! Sencillo, limpio y funciona en cualquier lugar donde se admitan shortcodes.