- What the WordPress Heartbeat Actually Does (And Why It Costs You If You Don't Disable WordPress Heartbeat)
- See the Problem: Watch Heartbeat Fire in Your Own Browser
- Heartbeat Worker Cost vs Your AHosting Plan (The Numbers)
- How to Disable WordPress Heartbeat Safely in 4 Steps
- Plugin vs Filter vs LiteSpeed Toggle: Which Method to Use
- Heartbeat Decision Checker: Throttle, Scope, or Disable WordPress Heartbeat?
- When Disabling Heartbeat Is a Symptom of Outgrowing Your Plan
- Frequently Asked Questions: Disabling the WordPress Heartbeat
- Does disabling the WordPress Heartbeat break autosave or post locking?
- What is the safest way to disable the WordPress Heartbeat in 2026?
- Heartbeat Control plugin vs the heartbeat_settings filter: which should I use?
- Disable WordPress Heartbeat in functions.php or in a snippet plugin: what is the difference?
- How much server load does the WordPress Heartbeat cause on AHosting shared hosting in 2026?
- Why does admin-ajax.php show high CPU even when my WordPress site has no traffic?
- Does AHosting's LiteSpeed cache stop Heartbeat from consuming PHP workers without needing to disable WordPress Heartbeat?
- Should I throttle the WordPress Heartbeat or disable WordPress Heartbeat on a 2026 WooCommerce store?
- Is the WordPress Heartbeat the same thing as WP-Cron?
- Will my WordPress 7.0 dashboard on AHosting be faster if I disable WordPress Heartbeat?
To disable WordPress Heartbeat safely, throttle its interval to 60 seconds and deregister it on the front end with one heartbeat_settings filter — this cuts admin-ajax.php load about 75% while keeping autosave and post locking.
If you want to disable WordPress Heartbeat, the goal is almost never to kill it outright — it is to stop it from quietly flooding admin-ajax.php with requests that consume PHP workers while nobody is reading your site. The Heartbeat API polls your server on a timer every time an admin or editor tab is open, and because that request path cannot be cached, even a well-tuned WordPress hosting stack serves each tick through PHP. Fortunately, one filter fixes it without breaking autosave.
Notably, this is a silent cost. There is no error, no warning, and no visible slowdown until concurrency stacks up and the server starts queuing requests. Below, we show you how to confirm the problem in your own browser, apply the safe fix, verify it worked, and — using AHosting’s published PHP-worker counts — see exactly how much of your plan the Heartbeat can occupy.
What the WordPress Heartbeat Actually Does (And Why It Costs You If You Don’t Disable WordPress Heartbeat)
Specifically, the Heartbeat API is a polling system introduced in WordPress 3.6 that lets your browser talk to the server on a fixed interval — a “tick” every 15 to 120 seconds. It powers autosave, post locking (so two editors do not overwrite each other), session expiry warnings, and plugin notifications. Under the hood it is a classic AJAX request pattern. According to the WordPress Heartbeat API handbook, each tick sends a POST to admin-ajax.php, the server prepares a response, and the browser waits for it.
However, the design has a sharp edge. In practice the tick runs whether or not the site has visitors, and the admin-ajax.php path is uncacheable — it bypasses page caching entirely and executes PHP on every call. Consequently, an open dashboard left in a background tab keeps spending server resources on nothing. Multiply that by several editors, several tabs, and a few plugins hooking the stream, and you get high CPU that looks mysterious because traffic is low.
The uncacheable-path problem in one sentence
Ultimately, this is why “just add more caching” does not help. Server-level caching — including the LiteSpeed and LSCache stack AHosting runs — serves a cached visitor page with zero PHP workers, but it cannot cache a logged-in admin-ajax.php POST. Therefore every Heartbeat tick is a full dynamic request. The fix is not more cache; it is fewer, smarter ticks. For the deeper server-side picture, our companion guide on the server-side factors no plugin can fix covers the caching layer in full.
Heartbeat is not WP-Cron — do not confuse the two
Importantly, the Heartbeat is often mistaken for WP-Cron, and the mix-up leads people to apply the wrong fix. In contrast, WP-Cron runs scheduled server tasks triggered on page loads, while the Heartbeat is a browser-to-server poll that only runs while an admin tab is open. They are separate subsystems on separate triggers. If your issue is scheduled jobs stacking up rather than idle-tab polling, see our guide on why WP-Cron fails and how to replace it instead.
See the Problem: Watch Heartbeat Fire in Your Own Browser
First, confirm the symptom before you change anything. Open any post in the editor, press F12 to open your browser’s developer tools Network panel, and watch the request list. Type admin-ajax into the filter box, then simply wait — without touching the keyboard. Within about 15 seconds a POST request to admin-ajax.php appears; roughly 15 seconds later, another. That steady pulse, with no visitor activity, is the Heartbeat.
Furthermore, you can watch the same pattern in your hosting resource graphs. On a CloudLinux account, sustained admin-ajax.php processes appearing in the process list — often flagged near a 508 “resource limit reached” event — are the Heartbeat and similar loopback calls competing for the same PHP workers your visitors need. That connection to your plan’s worker ceiling is the part most guides skip, so we quantify it next.
Heartbeat Worker Cost vs Your AHosting Plan (The Numbers)
Here is the data no generic tutorial can give you, because it requires knowing the host’s real worker counts. AHosting publishes its PHP worker (entry-process) allocation per plan — Bronze 15, Silver 25, Gold 40 — so we can map the Heartbeat’s appetite directly onto a ceiling. Each open post-editor tab ticks about four times per minute, and each tick occupies one worker on the uncacheable path. The table below shows what that means as concurrent editors climb.
| Open post-editor tabs (15s ticks) | Ticks / min | Share of Bronze (15 EP) | Share of Silver (25 EP) | Share of Gold (40 EP) |
|---|---|---|---|---|
| 1 editor | 4 | 7% | 4% | 2% |
| 2 editors | 8 | 13% | 8% | 5% |
| 5 editors | 20 | 33% | 20% | 12% |
| 10 editors | 40 | 67% | 40% | 25% |
| 15 editors | 60 | 100% | 60% | 38% |
Consequently, the headline figure is stark: 15 editors with post-editor tabs open can occupy 100% of a Bronze plan’s PHP workers — spent entirely on polling, with zero visitors served. Even at throttled 60-second intervals, that pressure drops roughly fourfold, which is precisely why throttling beats brute-force disabling for busy teams. If your concurrency is regularly pushing these numbers, that is a genuine signal to move to a plan with more workers or to WordPress VPS hosting with dedicated resources.
How to Disable WordPress Heartbeat Safely in 4 Steps
Here is the shortest correct fix: add one heartbeat_settings filter that raises the interval to 60 seconds and deregisters Heartbeat on the front end, leaving the editor’s autosave and post locking intact. The four steps below walk through it and verify the result.
First Step: Choose Where the Code Lives
First, decide where to put the snippet. A code-snippet plugin such as WPCode or Code Snippets is the durable choice because it survives theme switches; a child theme’s functions.php works too but disappears if you change themes. Either way, you are adding a small PHP filter — no core files are touched. Avoid pasting into the parent theme’s functions.php, since a theme update will overwrite it.
Second Step: Add the Throttle-and-Scope Filter To Disable WordPress Heartbeat
Next, add the filter below. The first function raises the tick interval to the maximum 60 seconds; the second stops Heartbeat entirely on the public front end, where logged-out visitors gain nothing from it. Together they keep the editor fully functional while removing the bulk of the load. The heartbeat_settings hook reference documents the interval values (anything 15–120).
// 1. Throttle Heartbeat to the maximum 60-second interval.
add_filter( 'heartbeat_settings', 'ah_throttle_heartbeat' );
function ah_throttle_heartbeat( $settings ) {
$settings['interval'] = 60; // allowed range is 15-120
return $settings;
}
// 2. Disable Heartbeat on the public front end only.
add_action( 'init', 'ah_disable_frontend_heartbeat', 1 );
function ah_disable_frontend_heartbeat() {
if ( ! is_admin() ) {
wp_deregister_script( 'heartbeat' );
}
}
Third Step: Save and Clear Cache
Then save the snippet (or update functions.php) and clear any page cache so the front-end change takes effect. On a LiteSpeed host, purge LSCache; if OPcache is active on your PHP pool, the new function may take a few seconds to load, so allow a moment before testing. No visitor-facing markup changes, so there is nothing to break on the front end.
Fourth Step: Verify in the Network Panel
Finally, prove it worked. Reload the post editor, open developer tools, and filter the Network panel to admin-ajax again. Where you previously saw a request every 15 seconds, you should now see roughly one per minute — about 75% fewer calls. Type a word in the draft and confirm the “Saving… / Saved” autosave indicator still fires. If it does, you have throttled the Heartbeat without losing the features that matter.
Plugin vs Filter vs LiteSpeed Toggle: Which Method to Use
Above all, pick the method that matches how you manage the site. The filter is the lightest; a plugin is the most approachable; the LiteSpeed Cache toggle is convenient if you already run that plugin. All three reach the same outcome — fewer admin-ajax.php calls — so the decision is about maintainability, not capability.
| Method | Best for | Trade-off |
|---|---|---|
heartbeat_settings filter | Developers; leanest install | Requires editing PHP |
| Heartbeat Control / snippet plugin | Non-coders; theme-independent | One more plugin to maintain |
| LiteSpeed Cache toggle | Sites already on LSCache | Only if LSCache is installed |
Moreover, the choice interacts with your other plugins. If a page builder such as Elementor, or a WooCommerce extension, depends on Heartbeat for editor or cart behavior, prefer the throttle-only route rather than deregistering the script — a point the interactive checker below helps you decide. For a store specifically, the same worker math applies to checkout, which we cover in our WooCommerce hosting breakdown.
Heartbeat Decision Checker: Throttle, Scope, or Disable WordPress Heartbeat?
Use the checker below to get a recommendation based on your setup. It maps three common answers to the safe action so you do not accidentally disable a feature your site relies on.
Heartbeat Decision Checker
What does your site depend on? Pick the closest match.
Your setup
When Disabling Heartbeat Is a Symptom of Outgrowing Your Plan
Finally, treat a chronic Heartbeat problem as a signal, not just a nuisance. Occasionally, throttling is enough forever. But if you are throttling, deregistering, and still bumping the worker ceiling during normal editing, the real constraint is concurrency headroom. As the table above shows, the same tick count that occupies 100% of a Bronze plan barely touches a Gold plan — the difference is published worker allocation, not a hidden setting.
Therefore, the durable fix for a growing team is more workers behind the same polling, which is what higher shared tiers and VPS provide. Heartbeat tuning buys you room; capacity buys you certainty. Size the plan against the concurrency math in this guide, and you will stop firefighting admin-ajax.php for good.
Last updated: July 15, 2026
Frequently Asked Questions: Disabling the WordPress Heartbeat
Does disabling the WordPress Heartbeat break autosave or post locking?
Specifically, disabling Heartbeat everywhere removes autosave and post locking, but throttling it to 60 seconds keeps both while cutting requests by about 75 percent. Therefore the recommended pattern is throttle in the editor, disable on the front end. The filter earlier in this guide does exactly that.
What is the safest way to disable the WordPress Heartbeat in 2026?
Generally, the safest way to disable the WordPress Heartbeat in 2026 is to throttle the interval to 60 seconds and deregister the script only on the front end, leaving the editor untouched. Consequently autosave and post locking keep working while admin-ajax.php load drops sharply.
Heartbeat Control plugin vs the heartbeat_settings filter: which should I use?
In practice, the heartbeat_settings filter is lighter because it adds no plugin overhead, while the Heartbeat Control plugin is friendlier if you avoid code. Both reach the same result. The comparison table above maps each method to the resource cost it removes.
Disable WordPress Heartbeat in functions.php or in a snippet plugin: what is the difference?
Notably, a functions.php edit is theme-bound and disappears on theme switch, whereas a code-snippet plugin survives theme changes and is easier to toggle. Therefore a snippet plugin is the more durable place to disable the WordPress Heartbeat on a production site.
How much server load does the WordPress Heartbeat cause on AHosting shared hosting in 2026?
Concretely, each Heartbeat tick is one uncacheable admin-ajax.php request that consumes one PHP worker for its duration. As a result, fifteen open editor tabs can occupy every worker on an entry-level plan. The plan-by-plan table above shows exactly where that ceiling sits on Bronze, Silver, and Gold.
Why does admin-ajax.php show high CPU even when my WordPress site has no traffic?
Fundamentally, admin-ajax.php runs the Heartbeat API on a timer, so it fires whether or not visitors are on the site. Because that path bypasses page caching, LiteSpeed cannot absorb it. In other words, the CPU is spent polling from an open admin tab, not serving readers.
Does AHosting's LiteSpeed cache stop Heartbeat from consuming PHP workers without needing to disable WordPress Heartbeat?
Unfortunately no, because admin-ajax.php is uncacheable by design, so LiteSpeed serves it through PHP like any dynamic request. However, AHosting publishes its per-plan worker counts, so you can size the Heartbeat cost against a known ceiling rather than guessing.
Should I throttle the WordPress Heartbeat or disable WordPress Heartbeat on a 2026 WooCommerce store?
Typically, throttle rather than disable when a WooCommerce store or membership plugin depends on Heartbeat for cart, stock, or session updates. Accordingly, set the interval to 60 seconds instead of deregistering the script, so real-time features survive while load falls.
Is the WordPress Heartbeat the same thing as WP-Cron?
No, and confusing the two leads to the wrong fix. Whereas WP-Cron runs scheduled server tasks on page load, the Heartbeat is a browser-to-server poll that only runs while an admin tab is open. Disabling one does nothing to the other.
Will my WordPress 7.0 dashboard on AHosting be faster if I disable WordPress Heartbeat?
Often yes, because a sluggish WordPress 7.0 dashboard is frequently a Heartbeat storm from several open editor tabs rather than a slow server. After you disable the WordPress Heartbeat on the front end and throttle the editor, admin-ajax.php pressure drops and the dashboard feels lighter.









