=== Global Weather Pro: Weather Widget for WordPress ===
Contributors: alfloyd
Donate link: https://globalweatherpro.com/
Tags: weather-widget, weather, ai, weather-alerts, weather-forecast
Requires at least: 6.6
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 2.7.15
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html

Free WordPress weather widget plugin: forecasts, severe weather alerts and AI animations in a header widget, sidebar widget or Gutenberg block.

== Description ==

Global Weather Pro is a free WordPress weather widget plugin that displays accurate weather forecasts and critical severe weather alerts for any location in the world. It gives you three ways to put weather on your WordPress site: a comprehensive header widget, a compact sidebar widget, and a native Weather Widget block for the block editor and Full Site Editing themes. Effortlessly display current weather conditions, detailed 7-day forecasts, air quality, and severe weather alerts to keep your visitors informed and engaged.

The plugin also ships stunning, AI-generated animated images for all 60+ WeatherAPI weather conditions, displayed in the header widget. Make the widgets your own with 18 professional typefaces, and self-host every one of them with a single click for a fully Google-free, privacy-friendly setup.

All weather data and alerts are sourced from WeatherAPI, a well-known and trusted weather provider, ensuring reliable and professional-grade forecasts you can count on. Global Weather Pro handles all API communications through our dedicated service, meaning you get reliable data from top providers like WeatherAPI without needing to sign up for, manage, or pay for your own weather API key.

Check out the live demos to see both widgets in action: [Sidebar Demo](https://globalweatherpro.com/sidebar-demo/)
[Header Demo](https://globalweatherpro.com/header-demo/)

**Features:**

- **Critical Weather Alerts:** Keep your audience safe and informed with timely notifications for severe weather events, sourced directly from WeatherAPI. Alerts are prominently displayed within the widget to ensure maximum visibility.
- **No API Keys Needed:** Instantly set up and deliver weather forecasts without any third-party signups or costs. Global Weather Pro handles all API communications through our dedicated service.
- **Block Editor & Full Site Editing Ready:** A native "Weather Widget" block works in the block editor, in Full Site Editing templates, and anywhere else blocks are allowed. The block is server-rendered and shares the exact same output pipeline as the classic widgets and shortcodes, so the weather block, the widget, and the shortcode all produce identical results.
- **Per-Block Location & Theme Overrides:** Each Weather Widget block can override the site-wide location and color theme, so you can show local weather for a different city on a different page or template without touching the global settings. Blocks with no override simply inherit your saved settings.
- **Responsive on Every Screen:** Both widgets adapt to the space they are given. On phones the header widget reflows into a single-column card that opens collapsed, so the current conditions are visible immediately and the full parameter readout and forecast strips are one tap away.
- **Dual Widget Design:** Comes with two specialized widgets, one designed for prominent header placement and another optimized for sidebars, ensuring a perfect fit for your theme's layout.
- **Professional Dark & Light Themes:** Choose between a rich, innovative Dark Mode featuring a slate-based palette with frosted glass effects and cyan accents, or a clean, polished Light Mode, both designed for a modern weather app aesthetic.
- **AI-Generated Animations:** Stunning AI-generated animated images for all 60+ weather conditions are displayed in the header of the weather widget, creating a beautiful user experience.
- **Accessibility Compliant (WCAG):** Built with comprehensive ARIA attributes, semantic HTML, keyboard navigation support, and reduced motion preferences for an inclusive experience for all users.
- **Detailed Hourly & Daily Forecasts:** Provide a true, 24-hour, hour-by-hour forecast and a 7-day forecast. Display key metrics like temperature, chance of rain, humidity, UV index, air quality, and more.
- **Shortcode Support:** Includes separate, reliable shortcodes for both the header and sidebar widgets ([gwpro_header_weather] and [gwpro_sidebar_weather]) for easy embedding anywhere on your site.
- **Flexible Placement (Blocks, Widgets & Shortcodes):** Seamlessly add weather to your header, footer, or sidebar using the block editor, the classic Widgets screen, or a shortcode in any post or page.
- **Font Customization:** Personalize the widget's appearance by choosing from 18 professional Google Fonts organized into Sans-Serif, Serif, Monospace, and Display categories, including Roboto, Open Sans, Inter, Montserrat, EB Garamond, Merriweather, Playfair Display, Roboto Mono, Poppins, and more. The widget layout stays pixel-consistent no matter which font you choose.
- **Privacy-First Font Self-Hosting:** Prefer not to link your site to Google's Font API? One click on the settings page downloads all 18 font families directly to your own server (each with its license file included), so visitor browsers never contact Google Fonts. Any font not yet downloaded automatically falls back to Google's CDN, so nothing ever breaks.

Whether you run a WordPress blog, a business website, or a community portal, Global Weather Pro makes it easy to share up-to-date local weather with your audience.

== Installation ==

1. Upload the plugin files to `/wp-content/plugins/global-weather-pro`, or install the plugin through the WordPress plugin screen.
2. Activate the plugin through the 'Plugins' menu.
3. Go to Settings > Global Weather Pro and save the location you want the weather widget to display.
4. Add the weather widget to your site using whichever method suits your theme:
   * **Block editor or Full Site Editing theme:** Edit any post, page, or template, click the block inserter, search for "Weather Widget," and place the block. In the block sidebar you can choose the header or sidebar layout and, optionally, override the location and color theme for that block only.
   * **Classic theme:** Navigate to "Appearance" > "Widgets" and add either the "Global Weather Pro Header" or "Global Weather Pro Sidebar" widget to your desired widget area.
   * **Shortcode:** Use [gwpro_header_weather] to display the header widget, or [gwpro_sidebar_weather] to display the sidebar widget, anywhere shortcodes are accepted.

== Frequently Asked Questions ==

= How do I add a weather widget to my WordPress site? =
There are three ways, and all of them produce the same widget.

Block editor or Full Site Editing theme: open any post, page, or site template, click the block inserter, and search for "Weather Widget." Choose the header or sidebar layout in the block settings sidebar.

Classic theme: navigate to "Appearance" > "Widgets" in your WordPress admin panel and add either the "Global Weather Pro Header" or "Global Weather Pro Sidebar" widget to your desired location, such as your header, footer, or sidebar.

Shortcode: embed the widgets directly into your posts and pages using [gwpro_header_weather] for the header widget or [gwpro_sidebar_weather] for the sidebar widget. Note that the original shortcode, [gwpro_global_weather_pro], now functions as an alias for the sidebar widget shortcode for backward compatibility, so any existing instances of the old shortcode continue to work without issue.

= Does this weather widget work with Gutenberg and block themes? =
Yes. Global Weather Pro registers a native "Weather Widget" block that works in the block editor, inside Full Site Editing templates and template parts, and anywhere else blocks are allowed. The block is server-rendered and reuses the same output pipeline as the classic widgets and the shortcodes, so there is one source of truth for the markup, the scripts, and the weather data.

This matters on a block theme, because block themes have no "Appearance" > "Widgets" screen at all. On those themes, use the block (or a shortcode block) rather than the classic Widgets screen.

= Can I show weather for more than one location on the same site? =
Yes, using the block. Each Weather Widget block can set its own location, which overrides the location saved in the plugin settings for that block only. A block with no location set simply inherits your global setting. The same applies to the dark and light color themes, so a block placed in a dark page template can differ from the site-wide default.

The classic widgets and the shortcodes always use the location saved under Settings > Global Weather Pro.

= Do I need a weather API key? =
No. Global Weather Pro routes all API communication through our own dedicated service, so you never have to sign up for, manage, renew, or pay for a weather API key of your own. Install the plugin, save a location, and the forecasts and severe weather alerts start working immediately.

= Does Global Weather Pro use AI to generate the forecasts? =
No, and the distinction matters. Global Weather Pro uses artificial intelligence for its visual layer only. Every one of the 60+ weather conditions reported by WeatherAPI (condition codes 1000-1282) has its own AI-generated animated image, displayed in the header of the weather widget so the animation always matches the reported condition, including day and night variants for clear skies.

The forecasts, air quality readings, and severe weather alerts themselves are not AI-generated or AI-predicted. They come directly from WeatherAPI, a professional meteorological data provider. Your visitors see AI-created artwork paired with real, trusted weather data.

= Do the AI weather animations slow down my site? =
No. All AI-generated animation files are bundled with the plugin and served from your own site, so displaying them requires no third-party image service, no AI API key, and no per-request AI costs. Nothing is generated on the fly at page load. The artificial intelligence work was done in advance, so the animations add no latency.

= How does the widget display severe weather alerts? =
Severe weather alerts are sourced from WeatherAPI and displayed prominently inside the widget so visitors see them immediately. Alerts appear alongside current conditions in the header widget, the sidebar widget, and the block, and no configuration is required. Alerts for the widget's location surface automatically whenever the provider issues them.

= Does this weather widget work with my WordPress theme? =
Global Weather Pro is designed to work with most WordPress themes, classic and block-based alike. If you experience any issues, please create a topic on our official WordPress support forum so our team and the community can assist you: [Official Plugin Support Page](https://wordpress.org/support/plugin/global-weather-pro/)

== Screenshots ==

1. The WordPress weather widget in the site header, desktop view, dark mode theme.
2. The compact sidebar weather widget on mobile, dark mode theme.
3. The weather widget embedded in a page via shortcode, mobile view, light mode theme.
4. The admin settings page for entering a custom weather location.
5. Shortcode section of the settings page with one-click copy buttons.

== Upgrade Notice ==

= 2.7.15 =
Fix release. The Global Weather Pro Header and Sidebar blocks now appear in the block inserter and load their weather data correctly in block theme templates. Recommended for anyone using the block editor or a block theme.

= 2.7.13 =
Documentation release. The Weather Widget block for the block editor and Full Site Editing themes, which has shipped since 2.7.0, is now documented in the installation instructions and FAQ. No code changes; upgrading is optional.

== Changelog ==

For the complete version history (all releases), see the readme.txt revision log: [https://plugins.trac.wordpress.org/log/global-weather-pro/trunk/readme.txt](https://plugins.trac.wordpress.org/log/global-weather-pro/trunk/readme.txt)

= 2.7.15 - 2026-09-16 =
* **Fix: The Block Never Appeared in the Block Inserter.** The block registration code looked for its block definition, editor script, and editor stylesheet in a folder that was not included in the plugin package. WordPress skips a block whose definition file is missing without reporting any error, so searching the inserter returned nothing, and the block described in the 2.7.14 documentation could not actually be added to a page. The block definitions and editor script now ship with the plugin.
* **Fix: Blocks in Block Theme Templates Loaded Without Their Weather Data.** Block themes build templates and template parts before the page head is output, which is earlier than the point where the widget scripts were registered. Weather data attached to a script that is not yet registered is discarded without warning, so the widget script loaded with no data and stopped with a "gwpro is not defined" error, and the widget stylesheet was skipped on the same pages. The scripts and styles are now registered before any widget, shortcode, or block renders, and the widget scripts fall back to their built-in error message instead of stopping if the data is ever missing.
* **Change: Separate Header and Sidebar Blocks.** The single "Weather Widget" block with a layout setting has been replaced by two blocks, "Global Weather Pro Header" and "Global Weather Pro Sidebar," named to match the classic widgets. Both appear when the inserter is searched for "weather widget," "weather," "forecast," or "Global Weather Pro," and both keep the per-block location and color theme overrides in the block settings sidebar.
* **Change: Each Block Can Be Placed Once Per Page.** The widgets rely on fixed element IDs, so two copies of the same block on one page would interfere with each other. The editor now prevents a second copy from being inserted. A header block and a sidebar block can still share the same page.
* **Change: Editor Placeholder Instead of a Blank Preview.** The weather display is assembled in the visitor's browser, a step the editor does not perform, so a live preview inside the editor would render empty. The editor now shows a labeled placeholder summarizing the block's location and theme settings, and the live weather appears on the published page.
* **Documentation: Block Instructions Updated.** The description, installation steps, and FAQ now refer to the two blocks by name. If a page or template shows a notice that it contains an unsupported block, that content was saved with the earlier "Weather Widget" block. Remove it and insert the Global Weather Pro Header or Sidebar block in its place.

= 2.7.14 - 2026-09-12 =
* **Documentation: The Weather Widget Block Is Now Documented.** The plugin has registered a server-rendered "Weather Widget" block for the block editor and Full Site Editing templates since 2.7.0, but no part of the readme ever mentioned it. The installation instructions and the first FAQ entry both directed site owners to "Appearance" > "Widgets," a screen that does not exist on a block theme, so anyone running a modern theme was told to follow steps they could not follow and had no way of discovering the block that would have worked. Blocks are now listed alongside widgets and shortcodes everywhere placement is described, with a note that block themes have no classic Widgets screen.
* **Documentation: Per-Block Location and Theme Overrides Are Now Documented.** Each block instance can override the site-wide location and color theme, which is what makes it possible to show weather for different cities on different pages. This capability was present but undocumented, so in practice no one knew to use it.
* **Documentation: Plugin Headers Completed.** Added the missing "Requires PHP" header to readme.txt, and added "Plugin URI", "Author URI", "Text Domain", "Domain Path", "Requires at least", and "Requires PHP" to the main plugin file. The text domain in particular was being passed to "wp_set_script_translations()" for the block editor script without ever being declared, which is the header WordPress uses to locate translation files.
* **Fix: Description Rendered Incorrectly on the Plugin Directory Page.** The opening paragraph of the Description began with a bold marker that was never closed, so the plugin's single most prominent block of copy rendered either entirely bold or with the markers visible as literal characters.
* **Fix: Removed a Changelog Entry for a Release That Does Not Exist.** An entry labeled 8.9.8 sat at the top of the changelog, above 2.7.11, describing a stable tag change to a version number the plugin has never had. It was the first thing anyone opening the Changelog tab would read.

= 2.7.11 - 2026-09-10 =
* **Fix: Header Widget Rendered Wider Than the Space It Was Given.** The card was set to the full width of its container and then given a margin on all four sides. A margin sits outside the measured box rather than within it, so the card was always about thirty-two pixels wider than the area it had to fit into, and the surplus was either clipped at the right edge or pushed out as a horizontal scrollbar on the page. The card also carried a minimum width equal to its container, which meant it could not give ground inside a narrow column, a flexible layout, or a page builder that expected its contents to adapt. Horizontal margin has been removed and the minimum width lifted, so the widget now fills exactly the width it is allotted and shrinks with it. Vertical spacing above and below the card is unchanged.
* **Fix: The Hourly and 7-Day Control Did Not Look Like a Control.** The two halves of the forecast switch were never shown together: whichever view was on screen had its own button hidden, leaving a single button carrying the name of the view the visitor was not currently looking at. Read cold by someone arriving at the page, a lone button reading "Hourly" above a seven-day forecast is far more easily taken for a caption describing the panel than for an invitation to change it, and there was nothing else to suggest otherwise. Both halves are now always on screen as a pair, with the active view filled in the widget's accent color and the alternative left plain, so the control reads as a choice between two options and shows at a glance which one is in effect.
* **Fix: Temperature Unit Buttons Were Not Recognizable as Buttons.** The Fahrenheit and Celsius controls were distinguished from one another only by a small difference in text color, applied from a script after the widget had already been drawn. They also declared no background or border of their own, so browsers fell back to the default grey system button styling, which matched neither theme and read as leftover page furniture rather than as part of the widget. The pair is now styled as a single segmented control with the selected unit filled in the accent color, and the selected state is set as the widget is built instead of on first interaction.
* **Fix: The Severe Weather Alert Icon Was Covered by the Forecast Buttons.** At tablet and desktop widths the alert icon and the forecast toggle were both pinned to the bottom-right corner of the card at fixed offsets that placed them in overlapping positions, and because the toggle is drawn later it sat on top. On a widget showing an active severe weather alert, the one element most worth seeing could therefore be obscured by a view switch. Both elements now sit in the card's normal flow, where the layout keeps them apart on its own rather than relying on measurements that only held at one particular card height. The equivalent correction was made for phone widths in 2.7.6; this extends it to every screen size.
* **Fix: Forecast Controls Announced the Wrong State to Screen Readers.** The forecast toggle's accessible descriptions were reversed, so the button that showed the seven-day forecast announced itself as switching to the hourly view and the hourly button announced the opposite. Its pressed state was likewise set the wrong way round when the widget was built and was never updated afterwards, so assistive technology was told the same view was selected no matter which the visitor had chosen. Both the descriptions and the pressed state are now correct at every step and are kept in step with what is on screen, and the same state now drives the visible highlighting as well, so the two cannot fall out of agreement again.

For older releases, see [changelog.txt](https://plugins.svn.wordpress.org/global-weather-pro/trunk/changelog.txt).

== Third-Party Services ==

**Global Weather Pro API**

- Fetches weather data.

- No personal data collected.

- Accessed at:

  - [https://www.pointforecaster.com/api/geocodedata](https://www.pointforecaster.com/api/geocodedata)
  - [https://www.pointforecaster.com/api/alerts](https://www.pointforecaster.com/api/alerts)
  - [https://www.pointforecaster.com/api/forecasthourly](https://www.pointforecaster.com/api/forecasthourly)
  - [https://www.pointforecaster.com/api/forecastdaily](https://www.pointforecaster.com/api/forecastdaily)

- Privacy Policy: [https://globalweatherpro.com/gwpro-privacy-policy](https://globalweatherpro.com/gwpro-privacy-policy)

**WeatherAPI**

- Provides weather forecasts and alerts.
- Location data (entered by site owner) sent; no personal data collected.
- Accessed at:
  - [https://api.weatherapi.com/v1/alerts.json](https://api.weatherapi.com/v1/alerts.json)
  - [https://api.weatherapi.com/v1/forecast.json](https://api.weatherapi.com/v1/forecast.json)
- Weather condition icons served from: [https://cdn.weatherapi.com/weather/](https://cdn.weatherapi.com/weather/)
- Privacy Policy: [https://www.weatherapi.com/privacy.aspx](https://www.weatherapi.com/privacy.aspx)

**Geoapify API**

- Provides geolocation services.
- No personal data collected.
- Accessed at: [https://api.geoapify.com/v1/geocode/search](https://api.geoapify.com/v1/geocode/search)
- Privacy Policy: [https://www.geoapify.com/privacy-policy/](https://www.geoapify.com/privacy-policy/)

**Google Fonts API**
- This service is used to load and display the custom font selected in the widget settings, but only for fonts that have not yet been self-hosted. Once a font is downloaded via Settings > "Download & Self-Host All Fonts," it is served entirely from your own server and visitor browsers never contact Google.
- **Personal Data**: When a font loads from Google's CDN, Google may collect data such as visitor IP addresses in order to serve the font files. Self-hosted fonts send no visitor data to Google.
- **Access**: Visitor browsers access https://fonts.googleapis.com (stylesheet) and https://fonts.gstatic.com (font files) only while a selected font is not self-hosted. When the site owner runs the one-click download tool, these same two endpoints are contacted once, server-side by your WordPress site, never by your visitors, to fetch the font files.
- **Privacy Policy**: Refer to Google's privacy policy here: https://policies.google.com/privacy.

== Third-Party Fonts & Licenses ==

This plugin offers 18 Google Fonts as font-family options. When downloaded via Settings > "Download & Self-Host All Fonts," the actual font files are saved to this plugin's own /uploads/ directory (one subfolder per font, each including a LICENSE.txt). Both licenses below permit free use, modification, and self-hosted redistribution:

* **Apache License, Version 2.0** (Roboto, Roboto Mono) — http://www.apache.org/licenses/LICENSE-2.0
* **SIL Open Font License, Version 1.1** (Open Sans, Inter, Lato, Source Sans Pro, Raleway, Montserrat, Nunito, EB Garamond, Merriweather, Playfair Display, Lora, Crimson Text, Source Code Pro, Fira Code, Poppins, Quicksand) — https://scripts.sil.org/OFL

Until a given font is self-hosted, it is instead loaded live from Google Fonts under the same license terms; see "Google Fonts API" under Third-Party Services above for that data flow.
