The scenario is to run insert_post function every midnight (00:00) of local time. Must run daily on weekday.
function add_daily_task(){
if((date('l', time()) != 'Saturday') || (date('l', time()) != 'Sunday')){
// insert post
}
}
if(!wp_next_scheduled( 'add_daily_task_schedule')){
wp_schedule_event(time(), 'daily', 'add_daily_task_schedule');
// how should change time() to meet my local schedule?
}
add_action('add_daily_task_schedule', 'add_daily_task');
Not sure what is the question, but the use of
time()
is wrong as it will give you at best the local time of the server and not the local time of the site which takes into consideration the time zone configuration of WordPress.The function that you should use is current_time.
wp_schedule_event can not be used for PRECISE time measurements as you are trying to do. An event scheduled with wp_schedule_event rarely runs exactly when it is scheduled to run, it runs sometime after the time which it has been configured for.
To understand this, you must understand that php doesn’t know what time it is until you ask it to look. WordPress checks the time whenever someone visits your website. It then compares the current time with the time of any scheduled tasks. If the time is equal to or greater (after) than the scheduled time, it runs the task.
So this means that even if you figure out your time scheduling issue, your task will not run until both the time you choose has elapsed AND someone loads your website.
With all of that said, if you still want to try and make this work, here is one possible solution. Add a new interval to your functions.php
change your function to
wp_schedule_event(time(), 'weekly', 'add_daily_task_schedule');
If you put this in place at exactly midnight next saturday, WordPress will attempt to run this schedule every week at the same time of day (assuming someone goes to your site to trigger the schedule).
First, make sure your WordPress date and time settings are correct as well as your local server time.
Then use this code:
You can modify
'midnight'
to'tomorrow 3am'
or whatever suits your needs.If you need your task (inserting posts or whatever) to run only on weekdays, you can implement that logic within your hook function.
Refer to the wp_schedule_event() code reference for recurrence options e.g.
'hourly'
,'daily'
,'twicedaily'
,'weekly'
. These are all built-in options you don’t need to define using the cron_schedules filter.The WP Crontrol plugin is useful for making sure your cron events are set up correctly.
The function:
gives the UNIX timestamp in the GMT timezone.
So if you are GMT+2 you can use:
or if you are GMT-4 you can use:
Try replacing time() with mytime() in your code, where: