Description
This plugin displays current weather and an optional forecast. It can aggregate data from free global weather providers (Open-Meteo, SMHI, Yr/MET Norway, FMI, Open-Weathermap, and Weatherapi.com) and compute a simple consensus. Works worldwide with excellent coverage in Europe and beyond.
Features
– Shortcode [spelhubben_weather], Gutenberg block, and classic widget
– 6 Weather Providers: Open-Meteo, SMHI, Yr (MET Norway), FMI, Open-Weathermap, Weatherapi.com — enable any combination
– Icon Themes: Classic, Modern Flat, Modern Gradient, Modern 2026, Modern 3D (selectable in admin settings)
– Multiple Layouts: inline, compact, card, detailed
– Daily Forecast: 3–10 days customizable
– Provider Comparison: Side-by-side data from all enabled providers
– Leaflet Map: OpenStreetMap tiles with proper attribution (ODbL)
– Wind direction display: Rotated arrow with cardinal labels (optional via show=wind_dir)
– Local Icons: SVG icons (no CDN dependency), responsive scaling
– Performance: 6-30x faster settings page, lazy-loaded plugin showcase, optimized caching
– Fully GDPR Compliant: No cookies, no tracking, no personal data collection
– Translation-Ready: English base strings, Swedish and Norwegian translations included
Not affiliated with Open-Meteo, SMHI, Yr/MET Norway, FMI, Leaflet, or OpenStreetMap. Names are used for descriptive purposes only. Map data © OpenStreetMap contributors (ODbL).
License
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
Full license text is included in the LICENSE file in the plugin root.
Feedback & Bug Reports
Feedback and bug reports can be posted here: https://github.com/K3NT4/spelhubben-weather/issues
For common questions see the FAQ: https://github.com/K3NT4/spelhubben-weather/blob/main/Docs/FAQ.md
For Roadmap: https://github.com/users/K3NT4/projects/2
License: GPLv3 or later
License URI: https://www.gnu.org/licenses/gpl-3.0.html
Weather widget & block with optional map and daily forecast. Can combine Open-Meteo, SMHI, Yr/MET, FMI, Open-Weathermap, and Weatherapi.com data.
Translations
The plugin is fully translatable and includes built-in translations for Swedish (sv_SE) and Norwegian Bokmål (nb_NO).
How to translate the plugin
Option 1: Contribute to translate.wordpress.org (recommended)
– Visit translate.wordpress.org
– Select your language and add translations via the browser interface
– Your translations will automatically be included in future releases
Option 2: Local translation files
If you need to add or modify translations locally:
-
Generate or update the POT file (translation template):
wp i18n make-pot . languages/spelhubben-weather.pot --slug=spelhubben-weather -
Create a PO file for your language (e.g.,
spelhubben-weather-de_DE.po):- Copy the
.potfile and rename to match your locale (e.g.,de_DE) - Use a translation tool like Poedit or a text editor
- Translate all strings in the PO file
- Save the file as
spelhubben-weather-de_DE.po
- Copy the
-
Generate the MO file (compiled binary format):
msgfmt spelhubben-weather-de_DE.po -o spelhubben-weather-de_DE.mo -
Place files in the plugin:
- Store both
.poand.mofiles in/languages/ - Also generate a
.l10n.phpfile (WordPress 6.0+):
wp i18n make-json languages/spelhubben-weather-de_DE.po --no-purge
- Store both
-
Activate your translation:
- Change your WordPress language to match the locale code (Settings General Site Language)
- The plugin will automatically load the translated strings
Translation file structure:
languages/
spelhubben-weather.pot (template for all translations)
spelhubben-weather-sv_SE.po (Swedish source text)
spelhubben-weather-sv_SE.mo (Swedish compiled)
spelhubben-weather-sv_SE.l10n.php
spelhubben-weather-nb_NO.po (Norwegian source text)
spelhubben-weather-nb_NO.mo (Norwegian compiled)
spelhubben-weather-nb_NO.l10n.php
What gets translated:
– All frontend strings (shortcode output, widget labels, weather descriptions, WMO codes)
– Admin settings and UI labels
– JavaScript strings (expand/collapse, status messages)
– Error messages and notices
Best practices:
– Use context clues in the POT file (msgctxt) to distinguish similar phrases
– Test your translation in WordPress to ensure formatting and plurals work correctly
– Check that translated UI aligns properly in your language (RTL vs LTR)
Screenshots

Frontend examples: inline, compact, card, detailed, with optional map. 
Frontend example: New look and wind direction 
Settings page: defaults, providers, cache, units & format. 
Alerts page: active warnings and smart recommendations for extreme conditions. 
Shortcodes page: searchable examples, copy buttons, and admin live preview. 
Performance page: cache statistics, API usage and “Clear cache” action.
Blocks
This plugin provides 1 block.
- Spelhubben Weather Current weather and optional daily forecast with map, subtle animations, and multiple layouts.
Installation
- Upload/activate the plugin.
- Go to Settings Spelhubben Weather and set defaults (place, shown fields, layout, providers, cache time, units/format).
- Add weather to your site in any of these ways:
Block (Gutenberg)
- Edit a page/post click Add block search for “Spelhubben Weather”.
- Optional: override defaults in the block sidebar (place/lat,lon, layout, map, forecast).
Shortcode
- Insert
[spelhubben_weather]anywhere shortcodes are supported. - Examples:
- Basic:
[spelhubben_weather] - Compact with map & animation:
[spelhubben_weather place="Gothenburg" layout="compact" map="1" animate="1"] - Inline no map:
[spelhubben_weather lat="57.7089" lon="11.9746" layout="inline" map="0" show="temp,icon"] - Detailed + daily forecast (5 days) + provider mix:
[spelhubben_weather place="Umeå" layout="detailed" forecast="daily" days="5" providers="smhi,yr,openmeteo,fmi"] - With wind direction:
[spelhubben_weather place="Stockholm" show="temp,wind,wind_dir,icon" layout="compact" animate="1"]
- Basic:
Classic Widget
- Go to Appearance Widgets add Spelhubben Weather.
- Configure per-widget options (title, place or lat/lon, fields, layout, map, forecast, days, CSS class).
FAQ
-
Where does the data come from?
-
From public APIs such as Open-Meteo, SMHI, Yr/MET Norway, and FMI (Finnish Meteorological Institute). You choose providers under Settings Spelhubben Weather or per block/shortcode/widget via the
providersattribute. -
Do I need an API key?
-
No. Open-Meteo, SMHI, and FMI do not require keys. For Yr/MET Norway it’s recommended to include contact info (email/URL) in Settings Spelhubben Weather Yr contact/UA so your User-Agent is compliant.
-
Block, shortcode or widget — what’s the difference?
-
All three render the same UI. Use the block in the block editor, the shortcode in classic content areas, and the widget in sidebars (Appearance Widgets). Each lets you override global defaults.
-
How do place and coordinates work?
-
Tide (experimental)
-
If you’re testing tide support in version 1.9.7:
- Enabling: Turn on
Tidesin Settings Spelhubben Weather and select a provider (WorldTides, NOAA or Custom endpoint). WorldTides typically requires an API key. - Shortcode: Use
extras="tides"ortides="1"to show tide events, e.g.[spelhubben_weather place="Gothenburg" extras="tides"]. - Providers: WorldTides (global, commercial), NOAA Tides & Currents (US only), or supply a custom endpoint that returns JSON with
events/extremes/dataarrays (items should includetime, and optionallytypeandheight). - Troubleshooting: Use
tests/tide_test.phpto validate provider responses and caching. Ensure provider settings and API key are correct; tide results are cached according to the configured TTL.
If
latandlonare provided they take precedence. Otherwise the plugin geocodes theplacestring (e.g.place="Umeå"). Set a global default place in settings.
rontend assets are registered - Enabling: Turn on
-
What fields can I show/hide?
-
Use
show="temp,wind,icon"(comma separated). Defaults are set in settings. Addwind_dirto show wind direction arrow and label. -
How do layouts work?
-
Choose
layout="inline|compact|card|detailed". “Detailed” supports the multi-day forecast row. -
Can I see individual provider data (for comparison)?
-
Yes! Use
comparison="1"to show all enabled providers’ data side-by-side. Useful for debugging or comparing which providers are available in your location.
Example:[spelhubben_weather place="Stockholm" comparison="1" providers="openmeteo,smhi,yr,fmi,openweathermap,weatherapi"] -
What icon themes are available?
-
The plugin offers multiple themes: Classic (traditional), Modern Flat (clean, minimalist), Modern Gradient (contemporary with subtle gradients), Modern 2026 (duotone/stroke modern style), and Modern 3D (subtle gradients + drop-shadows). Choose in Settings Spelhubben Weather Icon style. All themes include icons for sun, partly-cloudy (including alternate), cloud, fog, rain, sleet, snow, storm/thunder, and hail where applicable.
-
How do I enable the map and set its size?
-
map=”1″ shows a Leaflet map (OpenStreetMap). Control height with
map_height="240"(px). Global defaults exist in settings. -
How do I enable animations?
-
animate=”1″ adds subtle UI animation. Global default is in settings. The renderer also accepts
true,yes, oronas truthy values for convenience. -
How do I get a daily forecast?
-
Set
forecast="daily"anddays="3–10". Example:forecast="daily" days="5". -
How do i use Moon phase?
-
Use the new
phaseandilluminationfields to show moon information. Example shortcode:[spelhubben_weather show="temp,icon,phase,illumination"]— available in Block inspector and Widget options as well. -
Can I mix providers and get a consensus?
-
Yes. Set
providers="smhi,yr,openmeteo,fmi"(order doesn’t matter). The plugin calculates a simple consensus across available providers for the displayed fields. -
Units & format?
-
Pick a preset with
units="metric|metric_kmh|imperial". You can override parts viatemp_unit="C|F",wind_unit="ms|kmh|mph",precip_unit="mm|in", anddate_formatfor forecast labels. All have global defaults in settings (Units & format section). -
Caching — how long is data stored?
-
Responses are cached with WordPress transients. Change TTL (minutes) in settings. Clear via the Clear cache button on the Performance page (Settings Performance) or by changing attributes (which creates a new cache key).
-
Does it work without JavaScript?
-
Yes, rendering is server-side. The map (Leaflet) requires JS.
-
Translations?
-
The plugin is fully translatable. Included translations: Swedish (sv_SE), Norwegian (nb_NO). Strings are also available on translate.wordpress.org. Ship
.pot/.po/.moin/languages. -
GDPR / privacy?
-
The plugin does not set cookies by itself. If you enable the map, Leaflet/OpenStreetMap tiles are requested client-side. Mention OSM in your privacy notice if needed.
-
Troubleshooting tips
-
- Nothing shows: check that at least one provider is selected in settings.
- Wrong location: provide exact
lat/lonor a more specificplace(e.g. “Uddevalla, SE”). - Map not visible: ensure
map="1"and that your theme/container is wide/tall enough; increasemap_height. - Rate limiting: reduce refreshes or increase cache TTL.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“Spelhubben Weather” is open source software. The following people have contributed to this plugin.
Contributors“Spelhubben Weather” has been translated into 2 locales. Thank you to the translators for their contributions.
Translate “Spelhubben Weather” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
- = 1.9.8 =
- Fixed: Fixed an issue where the Leaflet map could fail to load on live/optimized sites due to script handle conflicts with themes or other plugins.
- Improved: Renamed Leaflet asset handles to unique, plugin-specific names to prevent collisions and ensure correct dependency resolution.
- Improved: Removed forced defer handling for Leaflet/map scripts to avoid broken load order when caching/optimization plugins are active.
- Improved: Improved map initialization logic to prevent infinite retry loops and reduce console spam when Leaflet isn’t available.
-
Improved: Kept Leaflet/map assets conditionally loaded only on pages where the widget/block/shortcode is actually rendered.
-
= 1.9.7 =
-
Experimental: Tide support added for testing — opt-in feature. Adds support for WorldTides (API key), NOAA (US-only), and a configurable custom endpoint. Shortcode support via
extras="tides"ortides="1". Admin visibility can be toggled while rolling out to selected users. Responses are cached; configure TTL in Settings. -
= 1.9.5 =
-
New: Moon phase support —
phase(name) andillumination(percent) available in renderer, shortcodes, block and widget. -
= 1.9.4 =
-
Fixed: Wind direction cardinal calculation and arrow rotation; ensured text-domain i18n call fixed for VC integration; asset sanitization workaround for wind arrow rotation (data-deg + frontend JS).
-
= 1.9.3 =
- New:
wind_unitoverride in Block inspector, Widget settings and Shortcodes Quick Builder. - Improved:
metric_kntpreset for metric display with knots. - Fixed: Wind direction arrow rotation corrected to match compass degrees.
- Fixed: Shortcode
wind_unitreliably overrides resolved units and renderer emitsdata-svv-wind-unitfor debugging. - Fixed: Alert threshold comparisons now converted into display units to avoid false alerts.
- Fixed: PHP parse error in admin page resolved.
- Changed: Plugin version bumped to 1.9.3; readme stable tag updated.
- = 1.9.2 =
- New: Shortcode/Block/Widget
themeattribute —theme="auto|light|dark"to force UI theme per instance (defaultauto). - New: Quick Builder theme selector in admin Shortcodes page; example shortcode added.
- Improved: Renderer emits
data-svv-themeandsvv-theme-<value>class for easier CSS targeting. - Improved: Frontend CSS and map styling — darker Leaflet tiles in dark theme and darker alert box styles for better contrast.
-
Changed: Admin JS updated to include
themewhen generating shortcodes; docs updated across readmes. -
= 1.9.0 =
- New: Weather Alerts system with smart recommendations for extreme conditions
- New: Storm Warning alert for wind speeds exceeding 24.5 m/s
- New: Settings Export & Import feature for easy configuration management
- New: Performance Dashboard to track API usage, cache efficiency, and response times
- New: Full Dark Mode support for all frontend and admin interfaces
- New: 3 Gutenberg Block Patterns (Compact, Detailed, Forecast)
- New: Alert toggles for Blocks, Widgets, and Shortcodes
- New: Wind direction display (
wind_dir) — rotated arrow + cardinal labels (optional viashow=wind_dir) - New: Shortcode Quick Builder in admin Shortcodes page with selectable options, one-click copy and live preview
- New: Rotating Tips panel on the Settings page with contextual admin tips (Shortcodes, Alerts, Performance)
- New: Compact action buttons in the Tips panel for quick access to Shortcodes, Alerts and Performance
- New: “Reset to defaults” button on the Settings page (nonce-protected) to restore plugin defaults
- Improved: Tips text is translation-ready, rotates more slowly for readability (15s), and uses
aria-livefor accessibility
- Improved:
animateattribute parsing is more tolerant (accepts1,true,yes,on) - Improved: Full English translation and i18n readiness (English is now the base language)
- Improved: Refined alert thresholds based on meteorological standards
1.8.6
- Fixed: Map not rendering in widgets due to missing Leaflet asset detection
- Fixed: Block name mismatch (
spelhubben/weatherspelhubben-weather/spelhubben-weather) preventing proper asset enqueuing - Improved: Enhanced Leaflet initialization with better timing and error handling in
map.js - Improved: Added widget detection in asset loading logic using
is_active_widget() - Improved: Added fallback height (
height: 240px;) to.svv-mapCSS class for better Leaflet container sizing - Improved: Better error reporting and retry logic in map initialization with Leaflet availability checks
1.8.5
- Performance: Conditional Leaflet asset loading — only loads when shortcode or Gutenberg block is present on the page.
- Fix: Added
.htaccessfiles to prevent WordPress rewrite rules from interfering with static assets. - Fix: Ensure correct MIME types for CSS and JS files to prevent browser strict MIME checking warnings.
- UX: Eliminates unnecessary 404 errors on pages without weather widget.
1.8.4
- Maintenance: Added centralized configuration constants file (
includes/constants.php) for improved code maintainability and reduced magic numbers. - Performance: Settings page now loads 6-30x faster with lazy-loaded WP.org plugin showcase via AJAX.
- Fix: Fixed memory leaks from uncleanup event listeners in admin interface with proper cleanup handlers.
- Fix: Fixed WMO weather code duplication—fog (codes 45, 48) now displays correctly instead of showing cloud icon.
- Fix: Fixed geocoding cache to include API language, ensuring proper locale-specific results for multi-language sites.
- Fix: Fixed widget null-safety with null-coalesce operators to prevent PHP Notices.
- Fix: Standardized API error handling with consistent response validation across all providers.
- Fix: Fixed syntax error in WP.org plugin showcase API call (missing closing parenthesis).
- Compliance: Verified full WordPress Consent API and GDPR compliance—no cookies, no tracking, no personal data collection.
- Code Quality: Debounce timeout optimized (400ms 600ms) reducing AJAX traffic by 50% during live preview.
- Documentation: Comprehensive audit and testing guides included for developers.
1.8.3
- Version bump for production release.
1.8.2
- Fix: WordPress naming convention compliance – all global functions and variables now use proper
sv_vader_prefix. - Fix: Corrected asset paths for Leaflet library (vendor directory structure).
- Tech: Code review and standards compliance (no breaking changes).
- Tested up to: WordPress 6.9
1.8.1
- New: 3 selectable icon themes: Classic, Modern Flat, and Modern Gradient (set in Settings Icon style).
- Performance: Optimized icon rendering with static variable caching for icon style preference (reduces repeated
sv_vader_get_options()calls). - Tech: Added private helper method
build_icon_url()to centralize icon URL logic and improve maintainability. - All icon themes include: sun, partly-cloudy, cloud, fog, rain, sleet, snow, thunderstorm (8 distinct weather conditions per theme).
- Updated README and readme.txt with icon theme documentation and admin settings guide.
1.8.0
- BREAKING CHANGE: Removed legacy
[sv_vader …]shortcode. Use[spelhubben_weather …]exclusively. - New Providers: Added Open-Weathermap and Weatherapi.com for better global coverage (6 total providers).
- New Feature:
comparison="1"attribute shows all providers’ data side-by-side for easy comparison and debugging. - Performance: Fixed memory leak in map.js (persistent MutationObserver, proper ResizeObserver cleanup).
- Performance: Added 7-day transient caching for geocoding lookups to reduce external API calls.
- Performance: CSS containment (
contain: layout style paint) optimizes rendering on pages with multiple weather cards. - Caching: Improved debounce function to prevent race conditions during window resizes.
- Security: Fixed unsafe XML parsing in FMI provider (now uses
LIBXML_NOCDATAflag with proper error handling). - Feature: New plugin showcase on settings page displaying other Spelhubben plugins (grid layout, auto-fetches from WordPress.org).
- UX: Plugin showcase auto-excludes Spelhubben Weather itself to avoid redundancy.
- Tested up to: WordPress 6.8+
1.7.5
- Tested up to: 6.9
- New: FMI (Finnish Meteorological Institute) as a free, optional provider (t2m, ws_10min, r_1h, n_man via WFS). Toggle in Settings Providers and via
providers="…"in block/shortcode/widget. - Shortcodes/Blocks:
providersnow acceptsfmi. - Docs: Updated examples and FAQ to include FMI.
1.7.0
- New: Shortcodes admin page with searchable examples, one-click copy & copy all.
- New: Live preview inside WP-admin (sandboxed iframe) that renders shortcodes and loads front assets (Leaflet, widget CSS/JS).
- New: Units & format settings (preset + overrides: temp/wind/precip units,
date_format). - New: Clear cache button (transients) on settings page.
- New: Translations included: Swedish (sv_SE), Norwegian (nb_NO), English (en_US).
- UX: Unified light card design across admin pages.
- Tech: Robust admin enqueue with cache-busting via
filemtime. - i18n: All admin strings localized (including JS: expand/collapse, statuses).
- Docs: Marked legacy shortcode as deprecated – will be removed soon.
1.6.2
- Minor fixes and readme updates.
1.6.1
- Version bump for WordPress.org sync. No functional changes.
