✅Shortcode que Muestra Clima de Ciudad en WordPress

Imagina que estás planeando un viaje y visitas una página web que te muestra de inmediato el clima actual de la ciudad que deseas visitar. Con datos claros, visuales y actualizados, puedes saber si necesitarás llevar un paraguas, protector solar o ropa de abrigo. ¿No sería genial? Ahora, añadir esta funcionalidad a tu propia web de viajes es mucho más fácil de lo que parece.

El código que veremos aquí utiliza una API pública gratuita, Open-Meteo, que te permite obtener datos meteorológicos precisos y actualizados sin necesidad de registrarte. Esta API es ideal para proyectos pequeños o medianos, ya que simplifica el acceso a información como la temperatura, velocidad del viento y una descripción general del clima actual.

Para mejorar la experiencia visual, el código también emplea íconos atractivos de Font Awesome. Así, en lugar de mostrar solo números y texto, cada condición meteorológica (como un día soleado, nublado o con tormentas) tiene un ícono representativo que hace que la información sea mucho más comprensible y estética.

Además, el diseño está pensado para ser responsivo, lo que significa que se adapta automáticamente a cualquier dispositivo, ya sea un ordenador, tablet o smartphone. Con un simple atajo o shortcode, puedes insertar este módulo en cualquier parte de tu sitio web, eligiendo la ubicación que quieras y personalizando el nombre de la ciudad.

shortcode clima ciudad

Uso del Shortcode

El código que hemos creado incluye un shortcode llamado [weather]. Este shortcode es completamente personalizable, permitiéndote especificar la ubicación (latitud y longitud) y el nombre de la ciudad que deseas mostrar.

Por defecto, el shortcode mostrará el clima para la ciudad de Málaga, España. Sin embargo, puedes personalizarlo fácilmente añadiendo algunos parámetros.

Parámetros del shortcode

El shortcode acepta tres parámetros principales:

  1. latitude: La latitud de la ubicación deseada.
  2. longitude: La longitud de la ubicación deseada.
  3. city: El nombre de la ciudad que aparecerá en el diseño.

Si quieres mostrar el clima para una ubicación específica, como Bogotá (Colombia), puedes configurar el shortcode de la siguiente manera:

[weather latitude="4.7110" longitude="-74.0721" city="Bogotá"]

Este código mostrará la información meteorológica actual para Bogotá, incluyendo la temperatura, velocidad del viento y una descripción visual del clima gracias a los íconos.

El siguiente código tienes que agregarlo en el functions.php de tu tema hijo o utilizar un plugin como CODE SNIPPETS.

// Obtener el clima de una ubicación específica (con íconos de Font Awesome)
function get_weather_data($latitude, $longitude, $city) {
    $url = "https://api.open-meteo.com/v1/forecast?latitude={$latitude}&longitude={$longitude}&current_weather=true";

    $response = wp_remote_get($url);

    if (is_wp_error($response)) {
        return '<p class="weather-error"><i class="fas fa-exclamation-circle"></i> Clima no disponible.</p>';
    }

    $data = json_decode(wp_remote_retrieve_body($response), true);

    if (isset($data['current_weather'])) {
        $weather = $data['current_weather'];
        $description = interpret_weather_code($weather['weathercode']);
        $icon = get_weather_icon($weather['weathercode']);
        return '
            <div class="styled-weather">
                <span class="weather-info">
                    <i class="' . $icon . '"></i>
                    <strong>Clima en ' . esc_html($city) . ':</strong> ' . $description . ' | ' . $weather['temperature'] . '°C | Viento: ' . $weather['windspeed'] . ' km/h
                </span>
            </div>';
    }

    return '<p class="weather-error"><i class="fas fa-exclamation-circle"></i> Clima no disponible.</p>';
}

// Registrar el shortcode [weather]
add_shortcode('weather', 'render_weather_shortcode');
function render_weather_shortcode($atts) {
    $atts = shortcode_atts([
        'latitude' => '36.7213', // Valor por defecto (Málaga)
        'longitude' => '-4.4216', // Valor por defecto (Málaga)
        'city' => 'Málaga' // Nombre de ciudad por defecto
    ], $atts);

    $latitude = esc_attr($atts['latitude']);
    $longitude = esc_attr($atts['longitude']);
    $city = esc_attr($atts['city']);

    return get_weather_data($latitude, $longitude, $city);
}

// Estilos responsivos para el diseño
add_action('wp_enqueue_scripts', 'add_responsive_weather_styles');
function add_responsive_weather_styles() {
    // Cargar Font Awesome desde su CDN
    wp_enqueue_style('font-awesome', 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css');

    // Estilos personalizados
    wp_add_inline_style(
        'wp-block-library',
        '
        .styled-weather {
            display: inline-flex;
            align-items: center;
            font-size: 12px;
            font-weight: 500;
            color: #2c3e50;
        }

        .styled-weather i {
            margin-right: 8px;
            font-size: 12px;
            color: #3498db;
        }

        .weather-error {
            font-size: 12px;
            color: #e74c3c;
        }

        @media (max-width: 768px) {
            .styled-weather {
                font-size: 14px;
            }
            .styled-weather i {
                font-size: 16px;
            }
        }

        @media (max-width: 480px) {
            .styled-weather {
                font-size: 12px;
            }
            .styled-weather i {
                font-size: 14px;
            }
        }
        '
    );
}

// Función para interpretar el código del clima
function interpret_weather_code($code) {
    $descriptions = [
        0 => 'Despejado/Soleado',
        1 => 'Parcialmente nublado',
        2 => 'Nublado',
        3 => 'Muy nublado',
        45 => 'Neblina',
        48 => 'Neblina con escarcha',
        51 => 'Llovizna ligera',
        53 => 'Llovizna moderada',
        55 => 'Llovizna intensa',
        61 => 'Lluvia ligera',
        63 => 'Lluvia moderada',
        65 => 'Lluvia intensa',
        66 => 'Lluvia helada ligera',
        67 => 'Lluvia helada intensa',
        71 => 'Nieve ligera',
        73 => 'Nieve moderada',
        75 => 'Nieve intensa',
        77 => 'Granizo',
        80 => 'Chubascos ligeros',
        81 => 'Chubascos moderados',
        82 => 'Chubascos violentos',
        95 => 'Tormenta',
        96 => 'Tormenta con granizo ligera',
        99 => 'Tormenta con granizo intensa'
    ];

    return $descriptions[$code] ?? 'Condición desconocida';
}

// Función para obtener el ícono basado en el código del clima
function get_weather_icon($code) {
    $icons = [
        0 => 'fas fa-sun',
        1 => 'fas fa-cloud-sun',
        2 => 'fas fa-cloud',
        3 => 'fas fa-cloud-meatball',
        45 => 'fas fa-smog',
        48 => 'fas fa-cloud-moon-rain',
        51 => 'fas fa-cloud-rain',
        53 => 'fas fa-cloud-showers-heavy',
        55 => 'fas fa-cloud-rain',
        61 => 'fas fa-cloud-sun-rain',
        63 => 'fas fa-cloud-showers-heavy',
        65 => 'fas fa-cloud-rain',
        66 => 'fas fa-snowflake',
        67 => 'fas fa-snowflake',
        71 => 'fas fa-snowflake',
        73 => 'fas fa-snowflake',
        75 => 'fas fa-snowflake',
        77 => 'fas fa-cloud-rain',
        80 => 'fas fa-cloud-showers-heavy',
        81 => 'fas fa-cloud-showers-heavy',
        82 => 'fas fa-cloud-showers-heavy',
        95 => 'fas fa-bolt',
        96 => 'fas fa-bolt',
        99 => 'fas fa-bolt'
    ];

    return $icons[$code] ?? 'fas fa-question';
}

Lenguaje del código: PHP (php)

Entendiendo el Código

1. Función principal: get_weather_data

Esta función es el núcleo del sistema, responsable de obtener y procesar los datos meteorológicos. Recibe como parámetros la latitud, longitud y el nombre de la ciudad. Genera dinámicamente una URL para realizar una solicitud HTTP a la API de Open-Meteo y obtiene el clima actual de la ubicación especificada. Valida posibles errores en la respuesta y decodifica los datos en formato JSON. Finalmente, utiliza los datos obtenidos, como temperatura, velocidad del viento y el código del clima, para crear una salida HTML estilizada que incluye íconos representativos.

2. Shortcode para integrar la funcionalidad

La funcionalidad del clima se expone al usuario a través de un shortcode de WordPress llamado [weather]. Este shortcode permite al usuario especificar la ubicación deseada mediante parámetros personalizados: latitud, longitud y nombre de la ciudad. Si no se proporcionan estos valores, se utilizan valores predeterminados para mostrar el clima de Málaga, España. El shortcode es flexible y fácil de integrar en cualquier parte del sitio web.

3. Estilos personalizados y responsividad

El diseño visual del componente meteorológico está cuidadosamente estructurado para ser atractivo y funcional. Los íconos de Font Awesome se utilizan para representar diferentes condiciones meteorológicas, como soleado, nublado o lluvioso, mejorando la claridad visual. Además, se define un conjunto de estilos CSS responsivos para que el diseño se adapte a dispositivos de diferentes tamaños, garantizando una experiencia óptima tanto en escritorio como en móviles.

4. Interpretación del código del clima

La función de interpretación toma el código meteorológico proporcionado por la API y lo traduce en una descripción legible y comprensible, como «Despejado», «Lluvia ligera» o «Tormenta». Este mapeo se basa en una tabla predefinida que asocia cada código con una descripción específica.

5. Asignación de íconos meteorológicos

Similar a la interpretación textual, otra función asigna un ícono de Font Awesome a cada código del clima. Esto permite que la salida visual sea intuitiva, utilizando representaciones gráficas de condiciones como sol, nubes o tormentas.

6. Carga de recursos externos

La funcionalidad incluye la carga del paquete de estilos de Font Awesome desde su CDN para garantizar que los íconos estén disponibles. Además, se añaden estilos CSS en línea que personalizan el diseño y lo integran con el tema actual del sitio.

Integrar una funcionalidad como esta en tu sitio web no solo mejora la experiencia del usuario, sino que también añade un valor práctico y profesional. Con herramientas modernas como la API de Open-Meteo y el uso de WordPress, puedes ofrecer información meteorológica actualizada de manera visual y accesible, ideal para sitios de turismo, blogs de viajes o cualquier plataforma que busque destacar con características útiles y atractivas.

Nos vemos en el siguiente tutorial. Un saludo.

5/5 - (2 votos)
Compartir Artículo

Un comentario

  1. Fran Salas Master WP 1 año atrás

    Deja tus opiniones o dudas en los comentarios.

¿Tienes una duda o sugerencia sobre este artículo?

Puedes dejar un comentario de forma anónima, sin necesidad de registrarte ni proporcionar ningún dato personal. Tu mensaje se publicará como “Usuario Anónimo No Premium”, un perfil que agrupa a todos los visitantes no registrados.

Importante: para evitar el spam automático, todos los comentarios anónimos deben comenzar con el símbolo #. Ejemplo: # Tengo una duda sobre los shortcodes personalizados...

Este espacio está destinado exclusivamente a preguntas concretas, dudas o sugerencias relacionadas con el contenido del artículo. Por respeto a los demás lectores, no se publicarán temas sin relación.

Privacidad y normas:
  • No tienes que agregar tu nombre, correo ni ningún otro dato identificativo.
  • No se permiten enlaces en comentarios anónimos.
  • No se permiten símbolos especiales como < o > (menor y mayor que), ya que se consideran intentos de insertar código y serán bloqueados.
  • Todos los comentarios anónimos pasan por revisión antes de ser publicados y solo se aprobarán si aportan valor al contenido del artículo.
¿Quieres comentar con tu nombre y que tu mensaje se publique al instante? Inicia sesión o regístrate.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

0%