I had a client who needed to display today’s weather on a big display in many hotels he manages.
My solution was simply creating a WordPress website that displays today’s weather with the specific hotel related gallery and information.
The WordPress site hosts a page per location of each hotel and displays the Weather Atlas Widget using a shortcode dedicated for each location of the hotel.
The problem I discovered is that the one embedded on the homepage was updating properly, but not the other ones.
This was on a vanilla install of WordPress without any caching plugin. Deleting the browser cache did not help as well.
I tried deleting all the expired WordPress transient for the Weather Atlas plugin, but it did not solve the issue until I deleted all the transient files from the plugin whether it was expired or not.
So, the solution I developed is to delete all the transient from the plugin on an hourly basis using the wp_cron as it shows in the following code:
if( !wp_get_schedule( 'webspi_weather_atlas_transient_cleaner' ) ){
wp_schedule_event( time(), 'hourly', 'webspi_weather_atlas_transient_cleaner');
add_action( 'webspi_weather_atlas_transient_cleaner', 'webspi_clean_weather_atlas_transient' );
}
function webspi_clean_weather_atlas_transient(){
global $wpdb;
$sql = "SELECT *
FROM $wpdb->options
WHERE option_name LIKE '%\_transient\_weather\_atlas\_%'
ORDER BY option_name";
$transients = $wpdb->get_results( $sql );
foreach( $transients as $index => $trans ){
$trans_name = $trans->option_name;
if( strpos( $trans_name, 'weather_atlas_transient' ) !== false ){
$trans_name = preg_replace('/^_transient_/', '', $trans_name);
$deleted = delete_transient( $trans_name );
if( $deleted ){
error_log( $trans_name . ' deleted' );
} else {
error_log( $trans_name . ' could not be deleted' );
}
}
}
}
Above code is provided for your reference only without any warranty or legal responsibility.
Because I don’t want this customization to get overriden by the plugin update, simply dropped it in my child theme functions.php file and it is working fine.