Extending the WP-DarkSky helper class and adding some Weather Icons by Eric Flowers.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* A helper class for that extends the WP-DarkSky helper class with Weather Icons. | |
* | |
* You'll need to add the Weather Icons stylesheet, web fonts, etc and enqueue them correctly. | |
* | |
* @see weathericons.io | |
* @see https://developer.wordpress.org/reference/functions/wp_enqueue_style/ | |
* @see https://darksky.net/dev/docs/ | |
* | |
* @link https://github.com/joshuadavidnelson/wp-darksky | |
* | |
* @since 1.0.0 | |
* @since 1.1.0 - Update for new Dark Sky API (versus old Forecast.io naming) | |
* | |
* @author Joshua David Nelson, josh@joshuadnelson.com | |
*/ | |
$args = array( | |
'api_key' => $api_key, // set your api key | |
'latitude' => $lat, // set your latitude | |
'longitude' => $long, // set your longitude | |
'query' => array( 'units' => 'us', 'exclude' => 'flags' ) | |
); | |
$forecast = new DarkSky\Weather_Icon_Forecast( $args ); | |
// Get the current forecast for a given latitude and longitude | |
$daily = isset( $forecast->daily['data'] ) ? $forecast->daily['data'] : ''; | |
$current = ''; | |
$title_attr = ''; | |
if( is_array( $daily ) ) { | |
$date_format = 'n/j/Y'; | |
$time_now = date( $date_format, current_time( 'timestamp' ) ); | |
foreach( $daily as $day ) { | |
if( isset( $day['time'] ) && $time_now == date( $date_format, $day['time'] ) ) { | |
// check the variables are setup | |
if( isset( $day['temperatureMin'], $day['temperatureMax'] ) && !empty( $day['temperatureMin'] ) && !empty( $day['temperatureMax'] ) ) { | |
// The temperature output | |
$current = number_format( $day['temperatureMin'], 0 ) . ' / ' . number_format( $day['temperatureMax'], 0 ); | |
// Set the icon, if there is one | |
$icon = !empty( $day['icon'] ) ? $forecast->get_icon( esc_attr( $day['icon'] ) ) : ''; | |
// set the title attribute to the forecast summary | |
$title_attr = !empty( $day['summary'] ) ? ' title="' . esc_attr( $day['summary'] ) . '"' : ''; | |
} | |
} | |
} | |
} | |
// If we have a valid forecast, we can build the widget | |
if( ! empty( $current ) ) | |
echo '<div class="widget weather-widget"><h5 class="title" id="weather-widget-title">Today\'s Weather</h5>' . $icon . '<span class="temp">' . $current . ' °</span></div>'; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* A helper class for that extends the WP-DarkSky helper class with Weather Icons. | |
* | |
* You'll need to add the Weather Icons stylesheet, web fonts, etc and enqueue them correctly. | |
* | |
* @see weathericons.io | |
* @see https://developer.wordpress.org/reference/functions/wp_enqueue_style/ | |
* @see https://darksky.net/dev/docs/ | |
* | |
* @link https://github.com/joshuadavidnelson/wp-darksky | |
* | |
* @since 1.0.0 | |
* @since 1.1.0 - Update for new Dark Sky API (versus old Forecast.io naming) | |
* | |
* @author Joshua David Nelson, josh@joshuadnelson.com | |
*/ | |
namespace DarkSky; | |
class Weather_Icon_Forecast extends Forecast { | |
/** | |
* Weather Icons mapped for Forecast.io. | |
* | |
* @since 1.0.0 | |
* | |
* @var string | |
*/ | |
private $icons = array( | |
'clear-day' => 'wi-forecast-io-clear-day', | |
'clear-night' => 'wi-forecast-io-clear-night', | |
'rain' => 'wi-forecast-io-rain', | |
'snow' => 'wi-forecast-io-snow', | |
'sleet' => 'wi-forecast-io-sleet', | |
'strong-wind' => 'wi-forecast-io-wind', | |
'fog' => 'wi-forecast-io-fog', | |
'cloudy' => 'wi-forecast-io-cloudy', | |
'partly-cloudy-day' => 'wi-forecast-io-partly-cloudy-day', | |
'partly-cloudy-night' => 'wi-forecast-io-partly-cloudy-night', | |
'hail' => 'wi-forecast-io-hail', | |
'thunderstorm' => 'wi-forecast-io-thunderstorm', | |
'tornado' => 'wi-forecast-io-tornado', | |
); | |
/** | |
* Build it. | |
* | |
* @uses wp_array_slice_assoc() | |
* @uses wp_parse_args() | |
* | |
* @since 1.0.0 | |
* | |
* @param array $args The array of arguments. | |
*/ | |
public function __construct( $args = array() ) { | |
parent::__construct( $args ); | |
} | |
/** | |
* Grab a weather icon. | |
* | |
* @since 1.0.0 | |
* | |
* @param string $icon_name The Dark Sky icon name. | |
* | |
* @return string $icon Icon print out or empty string. | |
*/ | |
public function get_icon( $icon_name ) { | |
if( array_key_exists( esc_attr( $icon_name ), $this->icons ) ) { | |
return '<i class="wi ' . $this->icons[ esc_attr( $icon_name ) ] . '"></i>'; | |
} else { | |
return ''; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment