I´m doing some setting to enable/disable a cron task and choose a time to run this task.
When I disable the cron task and enable it after without changed the time, my timestamp is in the past and make this error :
WP Control Plugin Result
My code
function scheduled_task_activation(){
$hook = 'my_hook';
$options_values = get_option( "option_name" );
$is_cron_active = (!empty( $options_values['cron-sync-active'] ) ) ? true : false;
$cron_sync_time = (!empty( $options_values['cron-sync-time'] ) ) ? $options_values['cron-sync-time']: "00:00:00";
if( !$is_cron_active ){
if( wp_next_scheduled( $hook ) ){
wp_clear_scheduled_hook( $hook );
}
}
else if ( ! wp_next_scheduled( $hook ) || ( $cron_sync_time !== get_option( "cron_time_used") ) ) {
if( $cron_sync_time !== get_option( "cron_time_used" ) )
wp_clear_scheduled_hook( $hook ); //avoid dupplication
var_dump( $cron_sync_time ); //Output : (string) "04:30"
wp_schedule_event( strtotime($cron_sync_time), 'daily', $hook);
update_option( "cron_time_used", $cron_sync_time );
}
}
If $cron_sync_time
is a string "04:30", why the timestamp should be in the past ?
Someone knows the way to fix this ?
I´m doing some setting to enable/disable a cron task and choose a time to run this task.
When I disable the cron task and enable it after without changed the time, my timestamp is in the past and make this error :
WP Control Plugin Result
My code
function scheduled_task_activation(){
$hook = 'my_hook';
$options_values = get_option( "option_name" );
$is_cron_active = (!empty( $options_values['cron-sync-active'] ) ) ? true : false;
$cron_sync_time = (!empty( $options_values['cron-sync-time'] ) ) ? $options_values['cron-sync-time']: "00:00:00";
if( !$is_cron_active ){
if( wp_next_scheduled( $hook ) ){
wp_clear_scheduled_hook( $hook );
}
}
else if ( ! wp_next_scheduled( $hook ) || ( $cron_sync_time !== get_option( "cron_time_used") ) ) {
if( $cron_sync_time !== get_option( "cron_time_used" ) )
wp_clear_scheduled_hook( $hook ); //avoid dupplication
var_dump( $cron_sync_time ); //Output : (string) "04:30"
wp_schedule_event( strtotime($cron_sync_time), 'daily', $hook);
update_option( "cron_time_used", $cron_sync_time );
}
}
If $cron_sync_time
is a string "04:30", why the timestamp should be in the past ?
Someone knows the way to fix this ?
1 Answer
Reset to default 0The reason is when you set only a time without date, the php function strtotime()
by default add today as a date so if the time is "04:30", the timestamp is in the past.
I fixed like this :
$timestamp = strtotime( $cron_sync_time );
if( $timestamp < time() ){ //if the time already past today
$timestamp = $timestamp + 60 * 60 * 24; //add 1 day
}
wp_schedule_event( $timestamp, 'daily', $hook);
Full code
function scheduled_task_activation(){
$hook = 'my_hook';
$options_values = get_option( "option_name" );
$is_cron_active = (!empty( $options_values['cron-sync-active'] ) ) ? true : false;
$cron_sync_time = (!empty( $options_values['cron-sync-time'] ) ) ? $options_values['cron-sync-time']: "00:00:00";
if( !$is_cron_active ){
if( wp_next_scheduled( $hook ) ){
wp_clear_scheduled_hook( $hook );
}
}
else if ( ! wp_next_scheduled( $hook ) || ( $cron_sync_time !== get_option( "cron_time_used") ) ) {
if( $cron_sync_time !== get_option( "cron_time_used" ) )
wp_clear_scheduled_hook( $hook ); //avoid dupplication
$timestamp = strtotime( $cron_sync_time );
if( $timestamp < time() ){
$timestamp = $timestamp + 60 * 60 * 24;
}
wp_schedule_event( $timestamp, 'daily', $hook);
update_option( "cron_time_used", $cron_sync_time );
}
}
发布者:admin,转转请注明出处:http://www.yc00.com/questions/1742324548a4422483.html
评论列表(0条)