# Events Reschedule 07

Laying out the plan for an extended reschedule function.

## Time based rescheduling

With the tad-reschedule plugin I’ve tried to make rescheduling a finite number of single events easier.
Without going over it again I’d like to seamlessly expand its functionalities to support hook-based scheduling, in plain English terms:

Until a condition is true do this action on this hook.

In coding terms I would like the function chain not to change and allow for this new definition:

tad_reschedule('my_function')
->until('my_condition')
->each('shutdown')
->with_args('my_args');

The changes are in what arguments are passed to the methods, extending the example;

function my_function($name,$says){
$people_says = get_option('people_says', array());$people_says[] = sprintf('% says %s',$name,$says);
update_option('people_says', $people_says); } function my_condition(){ return count(get_option('people_says',array())) < 10; } function my_args(){$user = wp_get_current_user();
$name =$user->user_firstname;
$says = get_user_meta($user->ID, 'quote_of_the_day', true);

return array($name,$says);
}

->until('my_condition')
->each('shutdown')
->with_args('my_args');

The example now makes “some” sense. The code I would not like to write is

if( my_condition() ){
$args = my_args(); add_action('shutdown', 'my_function', 10,$args);
}

## But why?

The last code snippet above, given the common part requiring the definition of the accessory functions, is not longer than the one I propose. Then why bother?
It might be a personal case but I tend to delegate a lot of tasks to the shutdown, init or plugins_loaded hooks until those tasks become simply too heavy to be executed on each WordPress run and I end up with a polluted hook list full of checks and operations that could happen every once in a while.
Using the syntax above, should the above scenario happen, moving from a task running on each init to a task running each 10 minutes will require little rewrite from this

tad_reschedule('my_function')
->until('my_condition')
->each('init')
->with_args('my_args');

to this

tad_reschedule('my_function')
->until('my_condition')
->each(600)
->with_args('my_args');

That’s why.

## Next

More tests and a version new and same.