Install
This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/adamsilverstein/wp-weather-block-2/archive/refs/heads/main.zipWeather Block WordPress Plugin
A modern WordPress block plugin that displays current weather conditions for user-specified locations using the OpenWeatherMap API.
Features
- 🌤️ Real-time Weather Data: Fetches current weather conditions from OpenWeatherMap API
- 🎨 Theme Support: Light, Dark, and Auto modes that respect system preferences
- 🌡️ Temperature Units: Support for both Celsius and Fahrenheit
- ⚡ Performance Optimized: 15-minute server-side caching to minimize API calls
- 🔒 Security First: Proper nonces, data sanitization, and secure API handling
- ♿ Accessible: WCAG 2.1 AA compliant with screen reader support
- 📱 Responsive: Mobile-friendly design that works on all devices
- 🌍 Internationalized: Full translation support for multiple languages
- 🧪 Well Tested: Comprehensive test suite with 80%+ code coverage
Requirements
- WordPress 6.0 or higher
- PHP 7.4 or higher
- OpenWeatherMap API key (free tier available)
Installation
From Source
-
Clone this repository:
git clone https://github.com/adamsilverstein/wp-weather-block-2.git cd wp-weather-block-2 -
Install dependencies:
npm install composer install -
Build the plugin:
npm run build -
Configure your API key in
weather-block.php:define( 'WEATHER_BLOCK_API_KEY', 'your_openweathermap_api_key_here' ); -
Create a distribution package:
npm run plugin-zip
WordPress Installation
- Upload the plugin files to
/wp-content/plugins/weather-block/ - Activate the plugin through the WordPress admin
- Add your OpenWeatherMap API key to
wp-config.php:define( 'WEATHER_BLOCK_API_KEY', 'your_api_key_here' );
Usage
Setting up the API Key
- Go to WordPress Admin → Settings → Weather Block
- Sign up for a free OpenWeatherMap API account at openweathermap.org
- Get your API key from your OpenWeatherMap dashboard
- Enter the API key in the settings page
- Click "Test API Key" to verify it works
- Save the settings
Adding a Weather Block
- In the WordPress block editor, click the "+" button to add a new block
- Search for "Weather Block" and select it
- In the block sidebar, enter a city name (e.g., "New York", "London", "Tokyo")
- Choose your preferred temperature units (Celsius or Fahrenheit)
- Select a display mode (Light, Dark, or Auto)
- The block will automatically fetch and display weather data
Block Settings
- Location: Enter any city name supported by OpenWeatherMap
- Temperature Units:
- Metric (Celsius, °C)
- Imperial (Fahrenheit, °F)
- Display Mode:
- Light: Light theme with blue gradient
- Dark: Dark theme with gray gradient
- Auto: Automatically adapts to user's system theme preference
Development
Setup Development Environment
# Install dependencies
npm install
composer install
# Start development build (watches for changes)
npm run start
# Run linting
npm run lint:js
npm run lint:css
npm run lint:php
# Run tests
npm run test:unit
npm run test:php
npm run test:e2e
Code Quality
This plugin maintains high code quality standards:
- PHP: WordPress Coding Standards (PHPCS) + PHPStan level 5
- JavaScript: ESLint with WordPress rules
- CSS: Stylelint with WordPress configuration
- Testing: PHPUnit, Jest, and Playwright for comprehensive coverage
Project Structure
wp-weather-block/
├── src/ # Source files
│ └── weather-block/
│ ├── block.json # Block configuration
│ ├── edit.js # Block editor component
│ ├── save.js # Block save function
│ ├── style.scss # Frontend styles
│ ├── editor.scss # Editor styles
│ └── view.js # Frontend JavaScript
├── build/ # Compiled assets
├── includes/ # PHP classes
│ └── WeatherApi.php # Weather API handler
├── tests/ # Test suites
│ ├── php/ # PHPUnit tests
│ ├── js/ # Jest tests
│ └── e2e/ # Playwright tests
├── memory-bank/ # Project documentation
├── weather-block.php # Main plugin file
├── package.json # npm configuration
├── composer.json # Composer configuration
└── README.md # This file
API Integration
The plugin uses the OpenWeatherMap Current Weather Data API:
- Endpoint:
https://api.openweathermap.org/data/2.5/weather - Caching: 15-minute WordPress Transients
- Rate Limiting: Respects API limits with proper error handling
- Security: API key stored securely, never exposed to frontend
Caching Strategy
Weather data is cached using WordPress Transients:
- Cache Duration: 15 minutes
- Cache Key: Based on location and units (
weather_block_{md5(location+units)}) - Cache Invalidation: Automatic expiration, manual clearing available
- Performance: Reduces API calls and improves page load times
Testing
Running Tests
# PHP Unit Tests
composer test
# or
./vendor/bin/phpunit
# JavaScript Unit Tests
npm run test:unit
# End-to-End Tests
npm run test:e2e
# All Tests
npm test
Test Coverage
The plugin maintains high test coverage:
- PHP: 80%+ coverage with PHPUnit
- JavaScript: 80%+ coverage with Jest
- Visual Regression: Playwright tests for UI consistency
Security
Security Features
- Nonce Verification: All API requests use WordPress nonces
- Data Sanitization: All user input and API responses are sanitized
- Capability Checks: API access restricted to users with
edit_postscapability - Input Validation: Location and units parameters are validated
- Error Logging: Security events are logged for monitoring
API Key Security
- Store API keys in
wp-config.php(recommended) or use a secure settings page - Never commit API keys to version control
- Use environment variables in production
- Regularly rotate API keys
Accessibility
The Weather Block is designed to be fully accessible:
- WCAG 2.1 AA Compliant: Meets accessibility standards
- Screen Reader Support: Proper ARIA labels and descriptions
- Keyboard Navigation: Full keyboard accessibility
- High Contrast: Supports high contrast mode
- Reduced Motion: Respects user's motion preferences
- Focus Management: Clear focus indicators
Internationalization
The plugin is fully internationalized:
- Text Domain:
weather-block - Translation Functions: All strings use WordPress i18n functions
- RTL Support: Right-to-left language support
- Date/Time Formatting: Respects WordPress locale settings
Adding Translations
- Generate POT file:
wp i18n make-pot . languages/weather-block.pot - Create language-specific PO files
- Compile to MO files for production
Performance
Optimization Features
- Caching: 15-minute server-side caching reduces API calls
- Lazy Loading: Weather icons loaded on demand
- Minification: CSS and JavaScript are minified in production
- CDN Ready: Static assets can be served from CDN
- Database Optimization: Efficient transient storage
Performance Metrics
- Time to Interactive: < 2 seconds on average connections
- API Response Time: Cached responses serve in < 100ms
- Bundle Size: Optimized JavaScript bundle < 5KB gzipped
Browser Support
- Chrome 90+
- Firefox 88+
- Safari 14+
- Edge 90+
- Mobile browsers with ES6 support
Contributing
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes following the coding standards
- Add tests for new functionality
- Run the test suite:
npm test - Commit using conventional commits:
git commit -m "feat: add amazing feature" - Push to your branch:
git push origin feature/amazing-feature - Open a Pull Request
Coding Standards
- Follow WordPress PHP Coding Standards
- Use ESLint for JavaScript
- Write comprehensive tests
- Document all functions and classes
- Use semantic versioning
Changelog
0.1.0 (2025-01-28)
- Initial release
- Weather data display with OpenWeatherMap API
- Theme support (Light/Dark/Auto)
- Temperature units (Celsius/Fahrenheit)
- 15-minute caching system
- Full accessibility support
- Comprehensive test suite
- WordPress 6.0+ compatibility
License
This project is licensed under the GPL-2.0-or-later License - see the LICENSE file for details.
Support
- Documentation: Plugin Documentation
- Issues: GitHub Issues
- WordPress Support: WordPress.org Plugin Page
Credits
- OpenWeatherMap: Weather data provided by OpenWeatherMap
- WordPress: Built for the WordPress platform
- Contributors: Thanks to all contributors who help improve this plugin
Made with ❤️ for the WordPress community