Last updated: October 10, 2026
Key Takeaways
- For the REST API,
status: futuremeans WordPress queues the post instead of publishing it right away. - To schedule a post, send a future
dateand matchingdate_gmt, with timestamps aligned to the site timezone rules. - Timezone mismatch is a common cause of wrong-hour publishing; keep local time and UTC separate in your code.
- WP-Cron works for low-stakes timing, but not for posts that must publish at an exact minute.
If you need Scheduling auto-published posts via the WordPress API: timestamps, timezones, and repeat schedules, the core rule is simple: set the post’s date and date_gmt correctly, send the right status, and make sure your server time, site time, and repeat logic all agree. I write WordPress and API guides for people who need posts to go live on schedule without waking up to “missed schedule” errors or off-by-one-hour surprises.
What actually controls publication time in WordPress?

WordPress publishes when the post’s scheduled timestamp is in the past relative to its own cron and server checks, not just because your app says “publish at 9:00.” That means the important fields are the post date fields, the status, and the timezone basis you use when you compute them.
For the REST API, the practical split is this:
status: futuretells WordPress the post is scheduled, not immediately published.dateis the local site time string.date_gmtis the UTC timestamp.- If those disagree, consult the WordPress REST API docs or a professional developer, because WordPress can behave in ways that are hard to diagnose. See the WordPress REST API Handbook and WordPress Timezone documentation.
The cleanest rule is to treat UTC as your internal source of truth, then convert to the site’s timezone only when you need to populate date. That reduces daylight-saving mistakes, which are the classic failure mode, though you should confirm the mapping with WordPress documentation or a professional if your setup is unusual. A post set for 2026-03-29 01:30 in Europe/London is not the same thing as the same clock time in UTC, and that gap matters on the day clocks change.
The other thing a generic article often misses: WordPress is not a real-time scheduler by default. It leans on WP-Cron, which fires when someone visits the site unless a real system cron job calls it. If the site gets little traffic, scheduled posts can slip. If exact timing matters, that is not a corner case; it is the main operational risk. For background on cron behavior, see the WordPress Cron documentation.
How do I schedule a WordPress post through the API?
You schedule it by creating or updating the post with a future date and status: future, and by sending timestamps that match the site’s timezone rules. That is the safe path for a single one-off post.
For the REST API, a common pattern is:
json
POST /wp-json/wp/v2/posts
{
"title": "Launch post",
"content": "…",
"status": "future",
"date": "2026-11-10T09:00:00",
"date_gmt": "2026-11-10T14:00:00"
}
A few details matter more than people expect:
dateshould reflect the site’s configured timezone.date_gmtshould reflect the same instant in UTC.- If you only send one of them, WordPress may infer the other, but inference is where silent drift starts.
- If you are integrating from another system, use ISO 8601 formatting, not a loose human date string.
For authenticated requests, the exact method depends on your stack: Application Passwords, OAuth, or JWT are common choices in real deployments. The authentication method is less important than the consistency of the timestamp you send. Consult the WordPress REST API authentication docs or a professional developer if your auth layer has custom date handling, because a secure auth layer with a wrong date still publishes at the wrong time.
This is where I would be strict: if your scheduling logic lives outside WordPress, do not trust browser local time. Use server-side UTC, then convert deliberately. That keeps one source of truth. It also makes retries safer because a repeated request can reuse the same instant instead of recalculating “now” in a possibly different timezone.
Timezone mistakes that break scheduled publishing

Timezone mismatch is the most common reason scheduled posts fire at the wrong hour, and the fix is to stop mixing local wall-clock time with UTC in the same field. WordPress stores both because it needs both, but your code should still choose one primary basis.
The three time layers you have to keep straight are:
- Site timezone in WordPress settings
This controls the editor-facing schedule time. - UTC on the wire
This should usually be treated as the canonical instant by APIs and integrations, though you should confirm the requirement with your implementation docs or a professional. - Server timezone
This affects cron and background jobs if the server is misconfigured.
If your site is set to America/New_York, a post scheduled for 9:00 AM local time must map to a different UTC value depending on daylight saving. In winter, that can be UTC-5; in summer, UTC-4. If you hard-code the offset, you will eventually miss by an hour.
I would not recommend storing only a “time of day” for publishing and hoping to reconstruct the date later. That works until a timezone rule changes, the site timezone changes, or a post crosses midnight in the target locale. Store a full instant. Convert for display. That is the disciplined way.
One more hidden issue: WordPress’s date fields are string-based and easy to serialize incorrectly. A malformed timestamp can look fine in logs but fail in the editor. If you are using a client library, check how it formats offsets, seconds, and the Z suffix. ISO 8601 with an explicit offset is safer than an ambiguous string with no timezone context.
Should I rely on WordPress cron for future posts?
WordPress cron is fine for low-stakes scheduling, but I would not rely on it for anything that must publish at an exact minute. It is event-driven, not a true system scheduler, and that difference matters.
Here is the practical trade-off:
- WP-Cron
- Easy to set up
- No server access required
- Can drift if the site is quiet
- Can bunch up after downtime
- System cron calling
wp-cron.php - More reliable timing
- Needs server or hosting access
- Better for newsrooms, launches, and timed campaigns
If your site publishes a few posts a week, WP-Cron may be enough. If your post has to go live at 09:00:00 sharp for a launch, I would prefer a real cron job or an external scheduler that pings WordPress on a fixed interval. A 5-minute interval is common in practice, though the right cadence depends on how precise you need the publish time to be.
The weakness of this approach is that it moves responsibility from WordPress to the server. That is not a bug; it is the cost of reliability. The system becomes more predictable, but also more dependent on hosting quality and cron configuration. If you do not control the server, this may be outside your reach.
What about repeat schedules for auto-published posts?
WordPress core does not provide a native repeat schedule for standard posts in the same way a calendar app does, so recurring publishing usually needs custom logic or a plugin. That is the honest answer, and it is the part many guides skate past.
There are three common ways to handle repeats:
- Custom code that clones a template post
- A plugin that creates recurring posts
- An external scheduler that calls the API on a cadence
If you need “publish every Monday at 8:00 AM,” the cleanest architecture is usually a stored template plus a job that creates the next post instance with a new date and date_gmt. That keeps each published item independent, which is useful for edits, analytics, and permalink stability.
The downside is maintenance. Recurrence rules get tricky quickly:
- Monthly schedules can break on the 29th, 30th, or 31st.
- DST changes can shift the local time unless you recalculate each occurrence.
- Missed runs need backfill logic.
- Duplicate prevention becomes your problem.
I would not recommend building recurrence logic in ad hoc PHP sprinkled through theme files. If the schedule matters enough to automate, it deserves a dedicated process: a plugin, a service, or a small custom job with logging and retries. That is especially true if the repeating post also triggers downstream actions like email, social distribution, or cache warming.
The honest side-by-side
WordPress API scheduling wins for one-off posts that need precise publishing control; recurring schedules win only when you truly need the same content pattern to reappear on a predictable cadence. The deciding factor is whether you are solving a single publication event or a publication system.
| Criteria | API-scheduled one-off post | Repeat schedule system | Winner for condition |
|---|---|---|---|
| Exact publish moment | Strong if timestamps are correct | Strong only if recurrence logic is well-built | One-off post for single launches |
| Timezone safety | Clear if you store UTC and local time correctly | Harder because each occurrence must be recalculated | One-off post |
| Daylight saving changes | Manageable | Frequent source of drift | One-off post |
| Setup complexity | Moderate | Higher | One-off post |
| Ongoing maintenance | Low once wired correctly | Higher because rules evolve | One-off post |
| Editorial workflow | Simple for editors | Better for recurring content calendars | Repeat system for series |
| Risk of duplicate posts | Lower | Higher without idempotency | One-off post |
| Flexibility for edits | Easy to change one item | Good for templates, but rules can be brittle | Depends on repetition need |
| Reliability on low-traffic sites | Depends on cron setup | Depends on cron setup, plus recurrence job quality | Neither unless cron is fixed |
The table points to the same conclusion I would make in practice: if you are publishing articles, announcements, or launch pages at specific times, schedule each post directly through the API. If you are managing a recurring format such as a weekly roundup, build a recurrence layer on top of the API, not inside WordPress post settings alone.
The weak spot in the repeat approach is hidden complexity. Every recurrence rule is a small calendar engine, and calendars are full of edge cases. The weak spot in the direct API approach is that it does not solve repetition by itself. You still need a scheduler upstream.
When does the recommendation flip?
The answer flips when your problem is not “publish this post once” but “generate the next instance forever.” In those cases, recurring logic is worth the complexity.
Choose the repeat approach instead of one-off scheduling if:
-
You publish the same format on a fixed cycle.
Weekly briefings, daily digests, and monthly roundups fit this model. -
The publication time is part of the product.
If readers expect the item at 07:00 every Tuesday, recurrence matters more than simplicity. -
You can tolerate a small scheduling buffer.
If “sometime in the target 15-minute window” is good enough, cron-based recurrence is workable. -
You need templates more than unique posts.
When each post starts from the same skeleton, cloning is efficient.
I would still avoid recurrence if the stakes are high and the calendar is irregular. Special events, embargoed news, and campaign launches do not belong in a recurring rule set. Those belong in explicit scheduled posts with exact timestamps.
What should I choose if I need this in production?
Choose API-scheduled one-off posts if you need exact control over a specific publication time, especially across timezones or daylight saving changes. Choose a repeat schedule system if you need the same type of post created again and again on a fixed cadence. Neither if you have no reliable cron path, because then the schedule is only theoretical.
That is the part I would not soften. If your host disables cron reliability, your timestamps will not save you. You need a dependable background trigger first, then clean date handling, then recurrence only if your editorial workflow truly needs it.
FAQ
Can I schedule a WordPress post with only date_gmt?
Yes, but I would not make that your default. WordPress works best when date and date_gmt describe the same instant, because that keeps the editor, the API, and cron behavior aligned.
What happens if the timezone in WordPress changes later?
Future scheduled posts can shift in local display if they were created assuming the old setting. That is why storing the actual instant in UTC is safer than storing only a local clock time.
Is future the same as publish?
No. future tells WordPress to hold the post until its scheduled time. publish makes it live immediately.
Do I need a plugin for recurring posts?
Usually, yes. Core WordPress scheduling is built for single events, not repeating series. A plugin or custom scheduler fills that gap.
Why did my post miss its schedule?
The usual causes are cron not running, a timezone mismatch, or a malformed timestamp. Start by checking the site timezone, then confirm whether WP-Cron or system cron is actually firing.
Drafted with AI; not yet reviewed by a person.