How to fix WordPress scheduled posts not publishing

Table of Contents

How to Fix WordPress Scheduled Posts Not Publishing

Scheduling posts in WordPress allows you to prepare content in advance and publish it automatically at a specific date and time. It is useful for maintaining a consistent publishing schedule without manually publishing every article.

However some WordPress users discover that a scheduled post remains in the Scheduled status even after its publication time has passed. Others encounter the “Missed schedule” message instead of seeing their content published.

This problem can affect individual posts or an entire website. In some cases the cause is an incorrect timezone setting. In others WordPress cron jobs are not running correctly because of low website traffic, server restrictions, plugin conflicts or incorrect configuration.

The good news is that scheduled publishing can usually be restored without reinstalling WordPress or rebuilding your website.

In this guide you will learn how to identify the cause of WordPress scheduled posts not publishing and apply the appropriate fix. You will also learn how to configure a more reliable cron system so future posts publish on time.

Why Are WordPress Scheduled Posts Not Publishing?

WordPress uses a system called WP-Cron to execute scheduled tasks. These tasks include publishing scheduled posts, checking for updates and running certain plugin functions.

Unlike a traditional server cron job, WP-Cron does not normally run continuously in the background. WordPress checks for due tasks when the website receives a request. If the necessary check does not happen at the right time or the scheduled task fails, a post may remain unpublished.

The most common causes include:

  • WP-Cron is disabled or not running correctly.
  • The website receives very little traffic.
  • The WordPress timezone is configured incorrectly.
  • A plugin or theme interferes with scheduled publishing.
  • The hosting server blocks requests to wp-cron.php.
  • A security plugin or firewall prevents cron requests from working.
  • PHP errors or server resource limits interrupt scheduled tasks.
  • A previous migration or hosting change disrupted the cron configuration.

Before changing anything, identify whether the problem affects one post or all scheduled posts. This helps narrow down the cause and prevents unnecessary changes.

1. Check Whether the Post Is Actually Scheduled

Start with the post itself. A post that was saved as a draft or scheduled for the wrong date will not publish when expected.

Follow these steps:

  • Log in to your WordPress dashboard.
  • Go to Posts → All Posts.
  • Open the Scheduled tab or locate the post with the Scheduled status.
  • Edit the affected post.
  • Check the date and time in the publishing settings.
  • Confirm that the post is scheduled for the intended date and time.

Make sure you click the Schedule button after changing the publication date. If you only save the content as a draft, WordPress will not publish it automatically.

Also check whether the scheduled time is in the past. If the post has already missed its publication time, changing its schedule to a future date can help determine whether the original task was the problem.

Test the scheduled publishing process

Create a temporary test post with a short title and some placeholder text.

Schedule it to publish approximately 10–15 minutes in the future. Avoid using an important article for this test.

After the scheduled time passes, check whether the post has been published.

  • If the test post publishes correctly, the issue may be specific to the original post or its schedule.
  • If the test post also remains scheduled, continue with the following steps.

Delete the test post after completing the test if you no longer need it.

2. Fix the WordPress Timezone Settings

An incorrect timezone can cause scheduled posts to publish at unexpected times or make it appear that WordPress has missed a schedule.

For example, if you schedule an article for 9:00 AM but WordPress uses a different timezone than expected, the post may publish earlier or later than planned.

To check your timezone:

  • Open Settings → General in your WordPress dashboard.
  • Find the Timezone setting.
  • Select the correct city or timezone for your website.
  • Review the date and time format settings if necessary.
  • Click Save Changes.

Whenever possible, select a named city such as New York or Belgrade rather than manually entering a fixed UTC offset. Named timezones account for daylight saving time changes where applicable.

Check the current WordPress timezone

If you have access to WP-CLI, run:

wp option get timezone_string

This displays the configured timezone string.

To inspect the configured GMT offset, run:

wp option get gmt_offset

The timezone string is generally preferable because a fixed offset does not automatically account for seasonal clock changes.

Changing the timezone does not automatically repair every missed cron task. If the timezone is correct and posts still fail to publish, continue to the next step.

3. Check Whether WP-Cron Is Disabled

WP-Cron is responsible for triggering scheduled tasks in WordPress. If it does not execute correctly, scheduled posts and other time-dependent operations may fail.

The default WP-Cron system depends on website requests to check whether tasks are due. This can cause problems for websites with low traffic, but cron may also fail because of server restrictions or disabled configuration settings.

Check your wp-config.php file

Open your website’s wp-config.php file using your hosting file manager or another secure file access method.

Look for this line:

define( 'DISABLE_WP_CRON', true );

If it exists, WordPress’s normal request-triggered cron mechanism is disabled.

This setting is sometimes used intentionally when a hosting provider or administrator has configured a real server cron job. In that situation, disabling the default trigger is expected.

However if there is no replacement cron job, scheduled tasks may stop running.

If you have not intentionally disabled WP-Cron, remove the setting or change it to:

define( 'DISABLE_WP_CRON', false );

If the constant already exists, edit the existing line rather than adding a second definition. Place configuration changes before the line that says /* That's all, stop editing! Happy publishing. */.

Save the file and test scheduled publishing again.

Important: If your hosting provider already runs a server cron job, do not disable or change that configuration without checking how it works. You need a reliable cron execution method before disabling the default trigger.

4. Configure a Real Server Cron Job

For websites that publish content regularly, a real server cron job can provide more predictable scheduling than relying exclusively on visitor requests.

A server cron job runs at a configured interval independently of whether someone visits the website.

This is particularly useful for content-heavy websites, blogs with frequent scheduled articles and websites with limited traffic.

Step 1: Open your hosting control panel

Log in to your hosting account and locate the Cron Jobs section. Depending on your provider, this may be available through cPanel, a hosting dashboard or a managed WordPress control panel.

Step 2: Create a cron job

A common approach is to configure a cron job that requests the WordPress cron endpoint every five minutes.

If your hosting provider supports curl, an example command is:

curl -s 'https://example.com/wp-cron.php?doing_wp_cron' >/dev/null 2>&1

Replace https://example.com with your actual website URL.

A typical five-minute schedule uses:

  • Minute: */5
  • Hour: *
  • Day: *
  • Month: *
  • Weekday: *

The exact command and configuration depend on your hosting environment. Some providers recommend PHP CLI commands instead of HTTP requests.

Step 3: Disable the default WP-Cron trigger if appropriate

Once the server cron job has been configured and tested, you can disable the default request-triggered cron mechanism by setting the following in wp-config.php:

define( 'DISABLE_WP_CRON', true );

Only do this after confirming that the server cron job works correctly. Otherwise scheduled tasks may stop running altogether.

Step 4: Verify that the cron job works

Schedule a test post and check whether it publishes within the expected interval.

A five-minute cron interval does not guarantee publication at the exact second. The post may publish several minutes after its scheduled time depending on when the cron job runs and whether the server can process the task successfully.

If you do not have access to server cron settings, ask your hosting provider to configure a recurring WordPress cron job.

For additional background on hosting-related WordPress problems, read our guide to moving WordPress to a new host.

5. Check Whether a Plugin Is Causing the Problem

Plugins can affect scheduled publishing by interfering with WordPress cron execution, making HTTP requests fail or introducing PHP errors.

This can happen after a plugin update or when two plugins have conflicting functionality.

Plugins related to caching, security, optimization, scheduled publishing and automation are reasonable places to investigate. However do not assume that one of them is responsible without testing.

How to test for a plugin conflict

Before making changes, create a backup of your website. If possible, perform the test on a staging website.

Then follow these steps:

  • Install and activate a troubleshooting plugin such as Health Check & Troubleshooting if appropriate for your setup.
  • Use its troubleshooting mode to test with plugins temporarily disabled for your session.
  • Check scheduled publishing with a new test post.
  • If the problem disappears, reactivate plugins one at a time or in small groups.
  • Repeat the test until the issue returns.
  • Investigate the plugin that triggers the problem and check for updates or known compatibility issues.

Troubleshooting mode is preferable to disabling every plugin for all website visitors. If you cannot use a troubleshooting mode, conduct the test on staging whenever possible.

Do not leave important security, backup or ecommerce plugins disabled on a live website longer than necessary.

What if the problem started after an update?

If scheduled posts stopped publishing immediately after a plugin or theme update, check the update history and plugin changelog.

If a specific update appears responsible, test a compatible previous version on staging before considering a rollback. Avoid downgrading WordPress core or plugins on a live website without a backup and a clear reason.

Once the conflicting component is identified, update it, change its configuration or contact its developer.

6. Check Your Theme for Errors

A WordPress theme can cause PHP errors or interfere with functionality through custom code. Although themes are less commonly responsible than cron configuration or server issues, they should not be ruled out.

This is especially relevant if you recently installed a new theme or added custom functions to your website.

Test with a default WordPress theme

On a staging website:

  • Make sure a default WordPress theme is installed.
  • Temporarily activate it.
  • Schedule a test post.
  • Check whether the post publishes successfully.

If scheduled publishing starts working with the default theme, inspect your original theme’s custom code and functions.

If you use a child theme, review recent changes in its functions.php file and any custom code snippets added to the website.

Pay particular attention to code that modifies post statuses, publication dates, cron events or WordPress hooks.

Do not replace a production theme simply because a scheduled post failed once. Confirm the cause before making permanent changes.

7. Check for Server Errors and Blocked Cron Requests

WordPress normally uses HTTP requests to trigger WP-Cron. If these requests fail, scheduled tasks may not run.

Possible causes include:

  • Hosting firewall restrictions.
  • Security rules blocking requests to wp-cron.php.
  • Incorrect SSL configuration.
  • DNS or connectivity problems.
  • PHP errors or resource limits.
  • Server configuration that prevents WordPress from making loopback requests.

A loopback request is a request that the website makes to itself. WordPress uses loopback requests for certain background operations.

Check the WordPress Site Health report

Go to Tools → Site Health → Status.

Review any warnings related to scheduled events, loopback requests, REST API availability or background processing.

The exact warnings depend on your WordPress version and configuration. A warning does not always mean that it is the direct cause of the publishing problem, but it can provide a useful starting point.

Review your hosting error logs

Open your hosting control panel and locate the PHP or server error logs.

Look for errors around the time the post should have been published.

Examples include PHP fatal errors, memory exhaustion, timeout errors and failed HTTP requests.

If you see repeated errors involving a particular plugin or custom function, investigate that component first.

You can also ask your hosting provider to check whether requests to wp-cron.php are being blocked or failing.

Important: Do not permanently disable your firewall or security plugin to test cron. Ask your host or security provider to identify the specific blocked request and apply a targeted fix.

8. Check Whether Caching or Optimization Is Interfering

Caching and optimization plugins can occasionally complicate troubleshooting when they interact with server rules, scheduled tasks or HTTP requests.

However page caching alone is not usually the direct cause of missed scheduled posts. WP-Cron is a background task mechanism rather than a page that must be refreshed to publish content.

If the problem started after changing your caching or optimization setup, review the configuration and check whether the cron endpoint or loopback requests are being affected.

What to check

  • Review recent changes to caching and optimization settings.
  • Check whether security rules are blocking wp-cron.php.
  • Review custom server rules that affect WordPress cron requests.
  • Check whether your hosting provider applies restrictions to recurring HTTP requests.
  • Test scheduled publishing after making one controlled configuration change.

Do not exclude random URLs from caching or disable all performance features without evidence that they are involved.

If you use Cloudflare or another proxy service, ask your hosting provider to verify that requests to the WordPress cron endpoint can reach the website correctly.

Once you identify the actual cause, restore any unrelated settings that were changed during testing.

9. Inspect Scheduled Events with a WordPress Cron Tool

If scheduled posts still do not publish, inspect the cron events themselves.

A cron management plugin such as WP Crontrol can display scheduled WordPress cron events and help you identify whether the cron system contains pending tasks or errors.

After installing a suitable tool, open its cron events screen and look for events that are due or overdue.

WordPress versions and plugin configurations can differ, so the exact events displayed on your website may not match those on another installation.

What to look for

  • Events that are overdue.
  • Repeated errors associated with a particular event.
  • Unexpectedly missing events.
  • Events registered by a plugin that recently stopped working.
  • PHP errors occurring when scheduled tasks execute.

Do not delete unfamiliar cron events simply because you do not recognize their names. Plugins and WordPress core can depend on them.

If a scheduled event is missing, investigate which plugin or component should register it. If an event repeatedly fails, check its associated plugin and the PHP error logs.

WP Crontrol is a diagnostic tool. Installing it does not automatically fix a broken cron system.

10. Check Your WordPress and PHP Configuration

Outdated software or configuration problems can sometimes prevent scheduled tasks from running correctly.

Start by checking whether your WordPress installation, active plugins and theme are up to date.

Also verify that your website uses a PHP version supported by your current WordPress version and plugins.

Review PHP errors

If you have access to the hosting error logs, look for errors related to:

  • Fatal PHP errors.
  • Memory exhaustion.
  • Maximum execution time limits.
  • Deprecated or incompatible functions.
  • Failed plugin initialization.
  • Database connection problems.

A scheduled publishing task may fail if PHP encounters a fatal error before the relevant code finishes executing.

If you need to enable WordPress debugging, do so carefully and avoid displaying errors publicly on a production website.

For temporary diagnostic logging, the following settings can be used in wp-config.php if debugging is not already configured differently:

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

These settings are appropriate only when debugging is not already configured differently. Avoid adding duplicate definitions.

After reproducing the problem, review wp-content/debug.log if logging is supported and enabled in your environment.

Debug logs may contain sensitive information. Restrict access to them and disable unnecessary debugging after completing the investigation.

11. Check the Database and WordPress Installation

If the previous steps do not solve the problem, check whether WordPress can communicate with the database and whether the installation is functioning normally.

Scheduled posts are stored in the WordPress database. If the database is unavailable or a fatal error interrupts publishing, the post may remain unpublished.

Start by checking the WordPress dashboard for database connection errors and reviewing the hosting error logs.

If you have shell access and WP-CLI is available, run:

wp core version

This confirms the WordPress version detected by WP-CLI.

You can also list scheduled posts with:

wp post list --post_status=future --post_type=post --fields=ID,post_title,post_date,post_status

This command helps you verify which standard posts remain scheduled. If you use custom post types, specify the relevant post type as well.

To inspect the cron event list through WP-CLI, run:

wp cron event list

These commands are diagnostic and do not publish or modify posts.

Avoid editing database records manually to force a post to publish. Changing the post status or cron data directly can leave related metadata or scheduled tasks in an inconsistent state.

If database errors are present, create a complete backup and ask your hosting provider or WordPress developer to investigate before attempting repairs.

12. Fix Posts That Already Show “Missed Schedule”

If a post has already missed its scheduled time, first fix the underlying cron or configuration problem. Otherwise newly scheduled posts may fail in the same way.

After addressing the cause, open the affected post and reschedule it for a future time.

  • Go to Posts → All Posts.
  • Open the affected post.
  • Set a new publication date and time in the future.
  • Click Schedule.
  • Verify that the post publishes after the scheduled time.

If the post still fails, continue investigating the cron system rather than repeatedly changing the date.

You can also use a reputable missed-schedule plugin if your website needs a specific recovery mechanism. Before installing one, check whether it is maintained, compatible with your WordPress version and suitable for your hosting environment.

A missed-schedule plugin may help recover certain posts, but it does not replace a working cron system. If the underlying problem is a blocked request or disabled cron configuration, that issue still needs to be resolved.

13. How to Prevent WordPress Scheduled Posts From Failing Again

Once scheduled publishing works, take a few steps to make the system more reliable.

Configure a reliable cron mechanism

If you publish content regularly or operate a low-traffic website, consider using a properly configured server cron job.

Test it after setup and verify that the normal WP-Cron trigger is disabled only when appropriate.

Monitor scheduled posts

Check your Scheduled posts list regularly, particularly before an important campaign or content launch.

For websites with a large publishing schedule, consider adding automated monitoring that alerts you when a post remains scheduled after its intended publication time.

Keep WordPress components updated

Install compatible updates for WordPress core, plugins and themes. Review changelogs and test important updates on staging if your website relies on scheduled publishing.

Monitor website health

Review Site Health warnings, server error logs and cron events when scheduled tasks start behaving unexpectedly.

Do not ignore recurring PHP errors or failed loopback requests.

Test after hosting changes

If you migrate your website, change hosting providers or modify server security settings, test scheduled publishing again.

Hosting changes can affect cron execution, PHP configuration, DNS, SSL and internal HTTP requests.

Maintain backups

Keep regular backups of your database and website files. A backup makes it easier to investigate serious configuration problems without risking your content.

For more general maintenance advice, see the WordPress Beginner Guide.

WordPress Scheduled Posts Not Publishing: Troubleshooting Checklist

Use this checklist to review the most important causes before making further changes.

  • Confirm that the post has the Scheduled status.
  • Check the scheduled date and time.
  • Verify the timezone under Settings → General.
  • Check whether DISABLE_WP_CRON is set to true.
  • Confirm that a working server cron job exists if default WP-Cron is disabled.
  • Review Site Health for loopback or scheduled-event warnings.
  • Test for plugin conflicts on staging or in troubleshooting mode.
  • Test the theme if recent theme changes may be responsible.
  • Review PHP and server error logs.
  • Inspect cron events with a suitable diagnostic tool.
  • Reschedule missed posts after fixing the underlying issue.
  • Publish a test post to verify that the fix works.

Conclusion

WordPress scheduled posts not publishing is usually a sign that something is preventing the scheduled publishing process from running at the expected time.

Start with the scheduled date and timezone then check WP-Cron and determine whether a server cron job is required. If the issue continues, investigate plugin conflicts, theme errors, blocked requests and PHP or database problems.

After applying a fix, schedule a test post and verify that it publishes correctly. This final step confirms that the problem has been resolved rather than temporarily hidden.

Reliable scheduled publishing helps you maintain a consistent content schedule and spend less time checking posts manually.

Want to improve your WordPress website beyond scheduled publishing? The WP Flow Mastery eBook covers WordPress performance, security, SEO, hosting and practical website optimization techniques.

Get the Complete WordPress Guide

Nemanja Stošić — WordPress Developer

Nemanja Stošić is a WordPress developer with experience working on more than 200 websites. He writes practical guides on WordPress troubleshooting, website performance, security, SEO and development to help website owners maintain reliable and effective websites.

Before You Go…

Get our free WordPress guide and learn the essential strategies for building, optimizing and growing your website.

Free guide · No spam · Unsubscribe anytime

Get the Free WordPress Guide

Learn how to build, optimize and grow a professional WordPress website with practical strategies you can actually use.

No spam. Unsubscribe anytime.