{"id":335200,"date":"2026-07-05T14:57:10","date_gmt":"2026-07-05T14:57:10","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/wonderful-fatal-circuit-breaker\/"},"modified":"2026-07-05T14:56:54","modified_gmt":"2026-07-05T14:56:54","slug":"wonderful-fatal-circuit-breaker","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/wonderful-fatal-circuit-breaker\/","author":23357214,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.2","stable_tag":"1.0.2","tested":"7.0","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Wonderful Fatal Circuit Breaker","header_author":"Wonderful Plugins","header_description":"Counts recurring PHP fatal errors per plugin and automatically deactivates the broken plugin before it keeps your whole site down.","assets_banners_color":"","last_updated":"2026-07-05 14:56:54","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wonderfulplugins.eu\/wonderful-fatal-circuit-breaker","header_author_uri":"https:\/\/wonderfulplugins.eu","rating":0,"author_block_rating":0,"active_installs":0,"downloads":40,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.2":{"tag":"1.0.2","author":"wonderfulplugins","date":"2026-07-05 14:56:54"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3596863,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3596863,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.2"],"block_files":[],"assets_screenshots":{"screenshot-1-de.jpg":{"filename":"screenshot-1-de.jpg","revision":3596863,"resolution":"1","location":"assets","locale":"de","width":3944,"height":1312},"screenshot-1.jpg":{"filename":"screenshot-1.jpg","revision":3596863,"resolution":"1","location":"assets","locale":"","width":3920,"height":1298}},"screenshots":{"1":"The settings page: threshold, time window, webhook URL, and the list of protected plugins."}},"plugin_section":[],"plugin_tags":[270218,270217,22682,5603,29148],"plugin_category":[54],"plugin_contributors":[247385],"plugin_business_model":[],"class_list":["post-335200","plugin","type-plugin","status-publish","hentry","plugin_tags-auto-deactivate","plugin_tags-circuit-breaker","plugin_tags-fatal-error","plugin_tags-monitoring","plugin_tags-uptime","plugin_category-security-and-spam-protection","plugin_contributors-wonderfulplugins","plugin_committers-wonderfulplugins"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/wonderful-fatal-circuit-breaker\/assets\/icon-128x128.png?rev=3596863","icon_2x":"https:\/\/ps.w.org\/wonderful-fatal-circuit-breaker\/assets\/icon-256x256.png?rev=3596863","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/wonderful-fatal-circuit-breaker\/assets\/screenshot-1.jpg?rev=3596863","caption":"The settings page: threshold, time window, webhook URL, and the list of protected plugins."}],"raw_content":"<!--section=description-->\n<p>A broken plugin update can take a whole site down \u2014 and WordPress' built-in recovery mode only pauses the plugin for the administrator who clicks the recovery link, while every visitor keeps seeing the error.<\/p>\n\n<p>This plugin works like an electrical circuit breaker: it counts PHP fatal errors per plugin within a configurable time window. When the same plugin keeps crashing (default: 5 fatals within 10 minutes), the breaker trips and the plugin is deactivated automatically. Your site keeps running without the broken plugin instead of staying down.<\/p>\n\n<p>Plugins your site must not run without (shop, membership, security) can be ticked off as <strong>protected<\/strong> \u2014 they are never deactivated automatically. For protected plugins you only get a notification, so a human can decide.<\/p>\n\n<p>Optionally, a webhook URL (Slack, Discord, n8n, ...) can be configured. Whenever the breaker trips \u2014 or a protected plugin keeps crashing \u2014 a notification is sent there.<\/p>\n\n<p><strong>What the breaker does when it trips:<\/strong><\/p>\n\n<ul>\n<li>Removes the broken plugin from the active plugins \u2014 without running any of its deactivation hooks (the plugin is broken; running its code would be exactly the wrong move).<\/li>\n<li>Shows a persistent admin notice with the error details until you reactivate the plugin.<\/li>\n<li>Sends a webhook notification if a webhook URL is configured.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>wonderful-fatal-circuit-breaker<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory.<\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress.<\/li>\n<li>Go to <strong>Settings &gt; Fatal Circuit Breaker<\/strong> in your admin dashboard.<\/li>\n<li>Tick off the plugins that must never be deactivated automatically.<\/li>\n<li>Optionally enter a webhook URL and verify it with the <strong>Send test message<\/strong> button. That's it!<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"which%20error%20types%20are%20counted%3F\"><h3>Which error types are counted?<\/h3><\/dt>\n<dd><p>E_ERROR, <code>E_PARSE<\/code>, <code>E_CORE_ERROR<\/code>, and <code>E_COMPILE_ERROR<\/code> \u2014 the errors that actually take a site down. Warnings, notices, and deprecations are ignored.<\/p><\/dd>\n<dt id=\"can%20a%20single%20fatal%20error%20deactivate%20one%20of%20my%20plugins%3F\"><h3>Can a single fatal error deactivate one of my plugins?<\/h3><\/dt>\n<dd><p>No. The threshold has a hard minimum of 2, and the default is 5 fatals within 10 minutes. A one-off hiccup never trips the breaker.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20plugins%20i%20marked%20as%20protected%3F\"><h3>What happens to plugins I marked as protected?<\/h3><\/dt>\n<dd><p>Nothing \u2014 they are never deactivated automatically. If a protected plugin keeps crashing, you receive a webhook notification (if configured) so you can act manually. This plugin itself is always protected.<\/p><\/dd>\n<dt id=\"are%20all%20fatal%20errors%20caught%3F\"><h3>Are all fatal errors caught?<\/h3><\/dt>\n<dd><p>Runtime fatals \u2014 the vast majority, e.g. a plugin crashing while rendering a page \u2014 are caught. Fatals that happen while WordPress is still loading the plugin files themselves (e.g. a syntax error in a plugin's main file) occur before this plugin can register its handler and cannot be counted.<\/p><\/dd>\n<dt id=\"does%20this%20work%20on%20multisite%3F\"><h3>Does this work on multisite?<\/h3><\/dt>\n<dd><p>The breaker only manages the per-site active plugins. Network-activated plugins are never touched.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20affect%20my%20site%27s%20performance%3F\"><h3>Does this plugin affect my site's performance?<\/h3><\/dt>\n<dd><p>No. The plugin only runs a very lightweight check at the very end of a PHP process, and only if a fatal error has occurred. It has no impact on the performance during normal site operation.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Removed load_plugin_textdomain() call (translations are loaded automatically by WordPress.org since WP 4.6).<\/li>\n<li>Prefixed the test-notice transient and WP_Error codes with the full plugin prefix.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Coding standards: prefixed global variables in uninstall.php.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Counts recurring PHP fatal errors per plugin and automatically deactivates the broken plugin before it keeps your whole site down.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/335200","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=335200"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/wonderfulplugins"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=335200"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=335200"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=335200"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=335200"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=335200"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=335200"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}