Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.
WordPress has no built-in per-post RSS delay setting. To keep a post off RSS for a fixed period, either schedule the post for a future publication time (which also hides it from the site) or filter only feed queries with a date condition (which leaves the post live on the site). Feed readers and aggregators can still poll at different times and cache XML, so a WordPress cutoff is an eligibility rule—not a guaranteed delivery time.
Choose the right kind of delay
| Method | What readers see on your site | What appears in RSS | Maintenance |
|---|---|---|---|
| Schedule publication | The post remains unpublished until its scheduled date and time. | It enters feeds when WordPress publishes it. | No code; uses WordPress’s editorial controls. |
| Feed-only query filter | The post can be live at its normal permalink and in site archives. | The post is excluded until the configured age, such as six hours. | Requires a site-specific plugin or PHP snippet, plus testing after WordPress and caching changes. |
Use scheduling when the entire publication must wait. Use a feed-only filter when your site should publish immediately but syndication should lag.
Option 1: Schedule the post for later
Standard WordPress posts are used to create RSS feeds and are normally ordered newest first. A post with a future publication date has WordPress’s future status, so it is not publicly published—and cannot appear in the normal post feed—until that date.
The Tool Desk
Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →- Open the post in the WordPress editor.
- In the Publish or Status and visibility panel, find the publication date and time.
- Set the intended release time in the site’s configured timezone.
- Choose Schedule (or update the existing scheduled post).
- After the scheduled time, check both the post permalink and the site’s RSS URL.
This is the safest no-code approach, but it delays every channel controlled by publication status: the permalink, archives, feeds, and other queries that exclude future posts.
Option 2: Delay only RSS and Atom feeds
For a post that should be visible on the site immediately, add a date condition to the main feed query. WordPress’s WP_Query supports date-based filtering, and the pre_get_posts action lets you adjust query variables before the query runs.
Site-specific PHP example
Place this in a small site-specific plugin or another controlled code location, not in a theme that may be replaced during an update. Test it on staging first.
Rank #2
<?php
add_action( 'pre_get_posts', function ( $query ) {
if ( is_admin() || ! $query->is_feed() || ! $query->is_main_query() ) {
return;
}
$delay_hours = 6;
$cutoff = gmdate(
'Y-m-d H:i:s',
time() - ( $delay_hours * HOUR_IN_SECONDS )
);
$query->set( 'date_query', array(
array(
'column' => 'post_date_gmt',
'before' => $cutoff,
'inclusive' => true,
),
) );
} );
What the snippet does
$delay_hours = 6defines the waiting window. Change it to the number of hours your publication workflow requires.$query->is_feed()limits the change to RSS or Atom feed requests.$query->is_main_query()avoids changing unrelated secondary queries.- The cutoff is calculated in UTC and compared with
post_date_gmt, avoiding a mismatch between the server timezone and stored GMT dates. inclusive => trueallows an item at or before the cutoff to enter the feed.
The result is a rolling age rule: a post remains excluded until its GMT publication timestamp is at least the configured number of hours old. The code is a practical combination of WordPress’s documented query parameters and hooks; it is not a setting exposed in the Reading screen.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Scan for outdated or missing drivers - takes under a minute3Repair Windows errors before they cause bigger problemsWhen to use lower-level query hooks
If you need to alter SQL beyond a date query, posts_where can add a WHERE condition and posts_clauses can change multiple SQL clauses. These hooks require more care because a malformed condition can hide items or affect queries you did not intend to change. Keep feed detection and main-query checks in place, and confirm that the code path actually applies to your feed requests.
Why Reading settings and update-period filters do not solve this
WordPress’s Reading settings can change the number of items in a feed and whether each item contains an excerpt or full content. They do not provide a per-post waiting period.
The rss_update_period filter changes the update-period metadata advertised by a feed. Its accepted periods include hourly, daily, weekly, monthly, and yearly. It does not remove a new item or hold it for a specified number of hours; subscribers may still poll whenever their own schedule dictates.
Rank #4
Test the delay on your actual feed endpoints
- Create a test post and record its publication time in UTC.
- If you used the feed-only method, confirm that the post is visible at its normal permalink and in the intended site archives.
- Fetch the site’s RSS URL and verify that the item is absent before the cutoff.
- Fetch the feed again after the delay and verify that the item appears with the expected publication date.
- Purge, bypass, or temporarily disable page, feed, and CDN caches while testing. Cached XML can make an old response look like a query failure.
- Check every endpoint your site exposes, including category, author, tag, and custom-post-type feeds.
Troubleshooting common failures
The post is missing from the site as well as the feed
Check whether the post was scheduled rather than published. Scheduling intentionally delays the whole publication. If the post must be live, publish it normally and use a feed-scoped filter.
The post appears immediately despite the filter
Confirm that the request reaches the main feed query and that the snippet is active. Then purge feed and CDN caches. Inspect the exact feed URL being tested; a plugin may provide a separate endpoint that does not use the same query.
Best Value
Older posts disappeared from archives or other queries
The filter is probably running without the feed and main-query guards, or a broader SQL hook is altering unrelated requests. Restore the scope checks and retest on staging before re-enabling production caching.
Different subscribers see the item at different times
That is expected. WordPress controls when the item becomes eligible for inclusion in generated XML. Feed readers, aggregators, and intermediate caches decide when to request and refresh that XML.
Operational considerations
- Keep the delay value documented with the site’s code so editors know the intended syndication window.
- Use UTC consistently in custom date conditions and verify the site timezone when comparing the editor’s scheduled time with database values.
- Retest after WordPress core, feed, SEO, caching, or CDN changes.
- Review custom post-type feeds separately; the example targets the feed’s main query and may not match every plugin-generated feed.
For a delay that must apply reliably across every channel, scheduling is the built-in choice. For a live site with intentionally delayed syndication, a narrowly scoped feed query filter provides the needed control, provided it is tested with real endpoints and cache layers.
Free tools Windows power users keep installed
One-click scans. No signup required.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

