gravityflow_step_schedule_timestamp
Parameters
Parameter | Type | Definition |
---|---|---|
$schedule_timestamp | integer | The current scheduled timestamp (UTC) |
$schedule_type | string | The type of schedule defined in step settings. |
$step | Gravity_Flow_Step | The current step. |
Example 1 - Adjust delay based on a field value
add_filter( 'gravityflow_step_schedule_timestamp', 'schedule_business_hours', 10, 3 ); function schedule_business_hours( $schedule_timestamp, $schedule_type, $step ) { //Ensure you are only adjusting the desired form/step if ( $step->get_id() !== 76 ) { return $schedule_timestamp; } $entry = $step->get_entry(); if ( $entry && isset( $entry['2'] ) && $entry['2'] == 'No Service Level Agreement' ) { $schedule_timestamp = strtotime('+1 day', $schedule_timestamp ); } return $schedule_timestamp; }
Example 2 - Delay based on business hours
Scheduling a step gives you many options for how to delay the start of a step. This filter supports additional cases where more complex logic is needed to determine when the step should start - aka the length of the delay.
The example below covers a use case of delaying notifications for a particular step to only occur during business hours. After accounting for your timezone (as defined in WordPress settings), it compares the default scheduled timestamp of 5 minutes to a Monday-to-Friday, 9 to 5 business day. If appropriate, it will delay the notification to the next business day.
- Create a notification step
Specify a schedule delay of 5 minutes. This will be the default that applies to steps that are attempted during business hours.
Take note of the Step ID.
Add the snippet
- Include it in your theme functions.php file or a site plugin and update the values in lines 4 to 9 to match your scenario:
- Line 4 - The Step ID (76 in example)
- Line 8 - The $start_hour variable (24-hour time-zone matched)
- Line 9 - The $end_hour variable (24-hour time-zone matched)
add_filter( 'gravityflow_step_schedule_timestamp', 'schedule_business_hours', 10, 3 ); function schedule_business_hours( $schedule_timestamp, $schedule_type, $step ) { //Ensure you are only adjusting the desired form/step if ( $step->get_id() !== 76 ) { return $schedule_timestamp; } gravity_flow()->log_debug( __METHOD__ . '(): Default Schedule: ' . date( 'Y-m-d H:i:s', $schedule_timestamp ) ); //Define for your business irrespective of time-zone $start_hour = 9; $end_hour = 17; $current_timestamp = time(); $tz = get_option('timezone_string'); $dt = new DateTime("now", new DateTimeZone($tz)); $dt->setTimestamp($current_timestamp); $current_hour = $dt->format('H'); $current_day_of_week = $dt->format('N'); //Modify the value of $current_timestamp if you want to test the step arriving separate from actual time. gravity_flow()->log_debug( __METHOD__ . '(): Comparing '. $current_hour . ' against ' . $start_hour . ' - ' . $end_hour); //Weekday + Business Hours if ( in_array( $current_day_of_week, array( 1, 2, 3, 4, 5 ) ) && $current_hour >= $start_hour && $current_hour <= $end_hour ) { gravity_flow()->log_debug( __METHOD__ . '(): Business Hour Request - Proceeding with default schedule'); return $schedule_timestamp; } //Weekday + Before Business Hours if( in_array( $current_day_of_week, array( 1, 2, 3, 4, 5 ) ) && $current_hour <= $start_hour ) { $delay_hours = $start_hour - $current_hour; //Mon to Thurs + After Business Hours } else if( in_array( $current_day_of_week, array( 1, 2, 3, 4 ) ) && $current_hour >= $end_hour ) { $delay_hours = ( 23 - $current_hour ) + 1 + $start_hour; //Friday + After Business Hours } else if( in_array( $current_day_of_week, array( 5 ) ) && $current_hour >= $end_hour ) { $delay_hours = ( 23 - $current_hour ) + 1 + $start_hour + 48; //Saturday } else if( in_array( $current_day_of_week, array( 6 ) ) ) { $delay_hours = ( 23 - $current_hour ) + 1 + $start_hour + 24; //Sunday } else if( in_array( $current_day_of_week, array( 7 ) ) ) { $delay_hours = ( 23 - $current_hour ) + 1 + $start_hour; //Edge case handling } else { $delay_hours = 0; } $delayed_timestamp = $schedule_timestamp + ( $delay_hours * 60 * 60 ); $dt->setTimestamp($delayed_timestamp); gravity_flow()->log_debug( __METHOD__ . '(): Outside Business Hour Request'); gravity_flow()->log_debug( __METHOD__ . '(): Delaying by ' . $delay_hours . ' hour(s) to ' . $dt->format('Y-m-d h:m:s') ); return $delayed_timestamp; }
Note: The snippet above does not take into consideration minutes, only the hours and day such that:
- If the workflow step was requested at 11:43PM on a Tuesday,
It would be scheduled to send out at 9:43AM Wednesday. - If the workflow step was requested at 6:12AM on a Saturday,
It would be scheduled to send out at 9:12AM Monday.