
How to schedule posts in WordPress?
To schedule a post in WordPress, open the post in the block editor, click the Publish date ("Immediately") in the settings sidebar, pick a future date and time, and then click Schedule. WordPress saves the post with a "Scheduled" status and publishes it automatically when that time arrives. No plugin is required; scheduling is built into WordPress core.
Scheduling lets you write when you have time and publish when your audience is most active. It's one of the simplest ways to keep a consistent publishing rhythm, whether you run a personal blog or a busy company site. This guide covers how to schedule posts step by step, how to manage and edit scheduled content, why scheduled posts sometimes fail with a "Missed schedule" message, and how to make scheduling rock-solid with a real server cron job.
Why Schedule Posts in WordPress?
Before getting into the how, it's worth knowing what scheduling can do for you:
- Consistency: Publishing on a predictable schedule builds trust with readers and subscribers.
- Better timing: You can publish when your audience is online, even if that's the middle of your night.
- Batch your work: Write several posts in one sitting and spread them over weeks.
- Planned campaigns: Line up posts for product launches, events, holidays, or sales in advance.
- Time off: Keep your site active while you're on vacation.
- Team coordination: Editors can review drafts and slot them into a shared calendar.
Check Your Timezone First
WordPress publishes scheduled posts based on the timezone set in your site settings, not the timezone on your computer. If this is wrong, your posts will go live at the wrong time.
- Open the settings: Go to Settings > General.
- Find Timezone: Choose a city in your timezone (for example, "London" or "New York") rather than a fixed UTC offset. City-based timezones adjust automatically for daylight saving time.
- Check the time format: Confirm the Universal time and Local time shown beside the setting look correct.
- Save: Click Save Changes.
This one setting prevents a surprising number of "my post published at the wrong time" problems.
How to Schedule a Post in the Block Editor
Here's the standard process in the WordPress block editor (Gutenberg) in WordPress 6.x.
- Create or open a post: Go to Posts > Add New Post, or edit an existing draft.
- Finish your content: Add your title, content, featured image, categories, and tags. It's much easier to schedule a finished post than to remember to come back to it.
- Open the settings sidebar: Click the Settings icon in the top-right corner and select the Post tab.
- Click the publish date: In the Summary (or Status) panel, find the Publish row. It usually says "Immediately". Click it to open the date picker.
- Choose a date and time: Select a future date on the calendar and enter the hour and minute. Double-check AM/PM if your site uses a 12-hour format.
- Confirm the change: The button at the top of the screen changes from Publish to Schedule.
- Schedule the post: Click Schedule, review the pre-publish checklist that appears, and click Schedule again to confirm.
The post now appears in your posts list with the label "Scheduled" and the date it will go live.
Scheduling Pages and Custom Post Types
The same process works for pages and for most custom post types (such as WooCommerce products or portfolio items), as long as they use the block editor or the standard publish box. The option lives in the same Publish row of the sidebar.
How to Schedule a Post in the Classic Editor
If your site uses the Classic Editor plugin, scheduling works through the Publish meta box:
- Find the Publish immediately line in the Publish box on the right.
- Click Edit next to it.
- Choose the month, day, year, hour, and minute.
- Click OK.
- The blue Publish button changes to Schedule. Click it.
How to View and Manage Scheduled Posts
To see everything that's queued up:
- Go to Posts > All Posts.
- Click the Scheduled link at the top of the list (it only appears once at least one post is scheduled).
From here you can:
- Change the date: Hover over a post and click Quick Edit to change the date and time without opening the editor.
- Edit the content: Open the post normally; your changes save while it stays scheduled.
- Unschedule a post: Open the post, click the publish date, and either pick a new date or clear it. In the block editor you can also click Switch to draft to return it to a draft.
- Publish early: Change the date to the current time (or earlier) and click Update or Publish.
Backdating Posts
The date picker also works in the other direction. If you choose a date in the past and click Publish, WordPress publishes the post immediately but displays that older date. This is handy when migrating old content, but use it honestly; don't backdate content to make it look older than it is.
How WordPress Scheduling Works Behind the Scenes
Understanding this helps you fix problems later. WordPress doesn't have a real clock running all the time. Instead, it uses a system called WP-Cron.
- You schedule a post: WordPress saves the post with the status
futureand registers a one-time event calledpublish_future_postfor the scheduled time. - Someone visits your site: On page loads, WordPress checks whether any scheduled events are due.
- The event runs: If the scheduled time has passed, WordPress runs the event and changes the post status to
publish.
The catch is step 2. WP-Cron only runs when your site receives traffic. On a low-traffic site, if nobody visits for a few hours, the post may publish late. On some hosting setups, WP-Cron can fail entirely, which leads to the dreaded "Missed schedule" error.
How to Fix the Missed Schedule Error
A post marked "Missed schedule" is one whose time has passed, but WordPress never ran the publish event. Common causes include:
- Very low traffic, so WP-Cron never triggered on time.
- Aggressive page caching that serves pages without running WordPress.
- A security plugin, firewall, or host blocking the loopback request to
wp-cron.php. DISABLE_WP_CRONset totrueinwp-config.phpwithout a real cron job replacing it.- A plugin error that stops cron events from completing.
Quick Fix
For a single post, open it, set the publish date to now, and click Publish. That works, but it doesn't fix the underlying problem.
Check Site Health
Go to Tools > Site Health. If WordPress can't run scheduled events or loopback requests fail, you'll usually see a warning such as "A scheduled event has failed" or "Your site could not complete a loopback request". These messages point you toward the real cause.
Inspect Cron Events
The free WP Crontrol plugin lets you see every scheduled cron event under Tools > Cron Events, run events manually, and spot events that are overdue. If you see lots of overdue events, WP-Cron isn't running reliably.
Set Up a Real Cron Job for Reliable Scheduling
The most reliable fix is to disable WP-Cron's traffic-based trigger and let your server run it on a fixed schedule. Most hosts with cPanel, Plesk, or SSH access support this.
Step 1: Disable the Default WP-Cron Trigger
Back up your site first. Then add this line to wp-config.php, above the line that says /* That's all, stop editing! Happy publishing. */:
define( 'DISABLE_WP_CRON', true );
This stops WordPress from triggering cron on page loads. Don't skip step 2, or scheduled tasks will stop entirely.
Step 2: Add a Server Cron Job
In your hosting control panel, find the Cron Jobs section and add a job that runs every five minutes. A common option uses wget or curl:
*/5 * * * * curl -s https://example.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1
If you have WP-CLI available on the server, running cron through it is even better, because it doesn't depend on an HTTP request:
*/5 * * * * cd /var/www/example.com/public_html && wp cron event run --due-now --quiet
Replace example.com and the path with your own domain and WordPress directory. Some managed WordPress hosts already run a system cron for you, so check your host's documentation before adding one.
Step 3: Verify It Works
Schedule a test post a few minutes into the future, wait, and confirm it publishes on time. You can also run this WP-CLI command to confirm cron is working:
wp cron test
Scheduling Posts With WP-CLI
Developers can create scheduled posts directly from the command line, which is useful for bulk imports or automated workflows:
wp post create --post_title="Weekly roundup" --post_content="Content goes here." --post_status=future --post_date="2026-10-05 09:00:00"
The post_date uses your site's local timezone. To list everything that's scheduled:
wp post list --post_status=future --fields=ID,post_title,post_date
Useful Plugins for Scheduling
Core scheduling covers most needs, but a few well-known plugins add extra features:
- Editorial Calendar: Shows your posts on a drag-and-drop calendar so you can reschedule by moving them.
- PublishPress Planner: Adds a content calendar, custom statuses, editorial comments, and notifications for teams.
- WP Crontrol: Not a scheduling plugin as such, but invaluable for diagnosing cron problems.
- Jetpack Social (or similar social sharing tools): Can automatically share posts to social networks when they publish.
Stick to one calendar plugin at a time, and remember that all of them still rely on WP-Cron to actually publish posts.
Scheduling Updates to Published Posts
WordPress core schedules new posts, but it doesn't natively schedule changes to a post that's already live. If you need to update a published page at a specific time (for example, changing prices at midnight), look at plugins such as PublishPress Revisions, which let you create a revision and schedule it to replace the live version.
Best Practices for Scheduling Posts
- Pick a realistic cadence: Once a week, consistently, beats five posts one week and none the next.
- Publish when readers are active: Your analytics can show which days and hours bring the most visitors.
- Proofread before scheduling: Preview the post on desktop and mobile before you click Schedule.
- Check links and images: Broken links are easy to miss when a post was written weeks earlier.
- Watch time-sensitive references: Avoid phrases like "yesterday" or "this week" unless they'll still be accurate on the publish date.
- Keep a buffer: Having two or three posts queued means a busy week doesn't break your schedule.
- Review the queue weekly: A quick glance at the Scheduled list catches mistakes early.
FAQ: Scheduling Posts in WordPress
No. Scheduling is built into WordPress core. You only need a plugin if you want extras like a visual editorial calendar or the ability to schedule updates to already published posts.
Usually because WP-Cron didn't run on time. This happens on low-traffic sites, with aggressive caching, or when loopback requests are blocked. Setting up a real server cron job is the most reliable fix.
Check your timezone under Settings > General. WordPress uses the site timezone, not your computer's, so a wrong setting shifts every scheduled post.
Yes. Pages and most custom post types can be scheduled the same way, using the Publish date option in the editor sidebar.
Open the post, click Switch to draft, or change the publish date. You can also use Quick Edit from the Scheduled posts list to change the date or status.
If your newsletter or notification plugin sends emails when a post is published, it will normally trigger when the scheduled post goes live, just as it would for a manually published post.
There is no practical limit. You can schedule posts days, months, or even years ahead, as long as the date is in the future.
Conclusion
Scheduling posts in WordPress takes only a few clicks: set your timezone correctly, pick a future date in the Publish row of the editor sidebar, and click Schedule. From there, the Scheduled list under Posts > All Posts gives you a simple overview of what's coming up, and Quick Edit makes rescheduling easy.
If you ever see "Missed schedule" errors, remember that WP-Cron depends on site traffic. Replacing it with a real server cron job is a small, one-time change that makes your publishing schedule dependable. Once that's in place, you can batch your writing, plan campaigns in advance, and let WordPress handle the timing.


