{"id":365232,"date":"2026-09-11T17:00:48","date_gmt":"2026-09-11T17:00:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/pressbrake\/"},"modified":"2026-09-22T18:25:37","modified_gmt":"2026-09-22T18:25:37","slug":"pressbrake","status":"publish","type":"plugin","link":"https:\/\/gd.wordpress.org\/plugins\/pressbrake\/","author":23562110,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.0","stable_tag":"1.1.0","tested":"7.1.2","requires":"6.6","requires_php":"8.0","requires_plugins":null,"header_name":"PressBrake","header_author":"Miriyam Core","header_description":"PressBrake adds a lightweight safety layer to WordPress, warning users and protecting important content, URLs, and plugins from accidental administrative changes.","assets_banners_color":"d1c1aa","last_updated":"2026-09-22 18:25:37","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/miriyamcore.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":94,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"miriyamcore","date":"2026-09-11 17:00:24","revision":3691791},"1.1.0":{"tag":"1.1.0","author":"miriyamcore","date":"2026-09-22 18:25:37","revision":3707935}},"upgrade_notice":{"1.1.0":"<p>Optional strict-mode deletion confirmation code. Existing installations keep their current behavior until a super admin sets a code.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3691783,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3691783,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3691783,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3691783,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.1.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3707935,"resolution":"1","location":"assets","locale":"","width":2456,"height":1692},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3691783,"resolution":"2","location":"assets","locale":"","width":2266,"height":1414},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3691783,"resolution":"3","location":"assets","locale":"","width":2266,"height":1414},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3707935,"resolution":"4","location":"assets","locale":"","width":2456,"height":1692}},"screenshots":{"1":"Settings screen showing the optional deletion confirmation code and three independently enabled brakes.","2":"Block Editor sidebar showing the PressBrake Protection panel for protected content.","3":"Plugin protection control with a private administrative note.","4":"Accessible confirmation dialog before deactivating a protected plugin."}},"plugin_section":[],"plugin_tags":[83,18193,2662,27283,13261],"plugin_category":[],"plugin_contributors":[280276],"plugin_business_model":[],"class_list":["post-365232","plugin","type-plugin","status-publish","hentry","plugin_tags-admin","plugin_tags-content-protection","plugin_tags-permalink","plugin_tags-plugin-management","plugin_tags-safety","plugin_contributors-miriyamcore","plugin_committers-miriyamcore"],"banners":{"banner":"https:\/\/ps.w.org\/pressbrake\/assets\/banner-772x250.png?rev=3691783","banner_2x":"https:\/\/ps.w.org\/pressbrake\/assets\/banner-1544x500.png?rev=3691783","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/pressbrake\/assets\/icon-128x128.png?rev=3691783","icon_2x":"https:\/\/ps.w.org\/pressbrake\/assets\/icon-256x256.png?rev=3691783","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/pressbrake\/assets\/screenshot-1.png?rev=3707935","caption":"Settings screen showing the optional deletion confirmation code and three independently enabled brakes."},{"src":"https:\/\/ps.w.org\/pressbrake\/assets\/screenshot-2.png?rev=3691783","caption":"Block Editor sidebar showing the PressBrake Protection panel for protected content."},{"src":"https:\/\/ps.w.org\/pressbrake\/assets\/screenshot-3.png?rev=3691783","caption":"Plugin protection control with a private administrative note."},{"src":"https:\/\/ps.w.org\/pressbrake\/assets\/screenshot-4.png?rev=3707935","caption":"Accessible confirmation dialog before deactivating a protected plugin."}],"raw_content":"<!--section=description-->\n<p>PressBrake adds a lightweight safety layer around three common administrative mistakes:<\/p>\n\n<ul>\n<li>changing a published URL without considering existing links;<\/li>\n<li>trashing, deleting, unpublishing, or restructuring important content; and<\/li>\n<li>deactivating or deleting a plugin without remembering why it is required.<\/li>\n<\/ul>\n\n<p>Each brake is independent and can be disabled under Settings &gt; PressBrake. Disabled brakes do not register their operational hooks or load their assets.<\/p>\n\n<h4>Optional deletion confirmation code<\/h4>\n\n<p>By default, PressBrake works exactly as before: its existing confirmation paths remain available and no code is required. A super admin can optionally set a deletion confirmation code in Settings &gt; PressBrake.<\/p>\n\n<p>When a code is set, strict mode is active. Only super admins can change PressBrake settings or manage content and plugin protection controls. Users who already have the normal WordPress permission to delete content or manage plugins still use the usual WordPress screens, but protected content trash\/permanent deletion and protected plugin deactivation\/deletion require the code. The code is stored only as a WordPress password hash. On multisite, one code applies across the network.<\/p>\n\n<p>Strict mode is an administrative safety control, not a boundary against a site owner with server access or someone able to deactivate PressBrake. The documented <code>PRESSBRAKE_BYPASS<\/code> recovery mechanism remains available for emergencies.<\/p>\n\n<h4>URL Brake<\/h4>\n\n<p>Warns before a slug or parent change alters the URL of published posts, pages, or supported public custom post types. It shows the existing and proposed URL when WordPress can calculate both. PressBrake does not create redirects.<\/p>\n\n<h4>Content Brake<\/h4>\n\n<p>Adds a PressBrake Protection panel to supported content. Protected items require a deliberate, action-specific override before destructive or structural changes. The configured static front page and posts page receive enhanced warnings without being silently marked as manually protected.<\/p>\n\n<h4>Plugin Brake<\/h4>\n\n<p>Adds a private administrative note and optional protection control to each installed plugin. Protected plugins require a deliberate override before individual deactivation or deletion and are skipped by bulk actions. Multisite network controls use network-scoped data and capabilities.<\/p>\n\n<p>PressBrake is not a security firewall. It does not prevent a determined administrator with server access from changing the site. It prevents accidental actions through supported WordPress administrative workflows.<\/p>\n\n<p>No data leaves the website. PressBrake makes no external requests, adds no frontend cookies, and stores no personal data. Protection settings, post metadata, and private plugin notes remain inside WordPress.<\/p>\n\n<h3>Emergency recovery<\/h3>\n\n<p>If a protected plugin causes a problem, add this line to <code>wp-config.php<\/code> above the line that says to stop editing:<\/p>\n\n<pre><code>define( 'PRESSBRAKE_BYPASS', true );\n<\/code><\/pre>\n\n<p>All PressBrake protections are then bypassed and an administrator notice is shown. Settings, notes, and protection records remain intact. Remove the constant after recovery. Server access can also be used to rename or remove PressBrake itself; this plugin is an accident-prevention layer, not an access-control boundary.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>pressbrake<\/code> directory to <code>\/wp-content\/plugins\/<\/code>, or install the ZIP from Plugins &gt; Add New &gt; Upload Plugin.<\/li>\n<li>Activate PressBrake.<\/li>\n<li>Review Settings &gt; PressBrake.<\/li>\n<li>Use the PressBrake Protection panel on content and the PressBrake control links on the Plugins screen.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20pressbrake%20create%20redirects%20after%20a%20url%20change%3F\"><h3>Does PressBrake create redirects after a URL change?<\/h3><\/dt>\n<dd><p>No. Version 1.0 only confirms the change.<\/p><\/dd>\n<dt id=\"are%20plugin%20notes%20public%3F\"><h3>Are plugin notes public?<\/h3><\/dt>\n<dd><p>No. Notes are rendered only in plugin administration to users with plugin-management capabilities.<\/p><\/dd>\n<dt id=\"what%20happens%20on%20deactivation%20or%20uninstall%3F\"><h3>What happens on deactivation or uninstall?<\/h3><\/dt>\n<dd><p>Deactivation keeps all data. Uninstall also keeps data unless \"Delete PressBrake data when uninstalled\" was deliberately enabled. On multisite, each site is evaluated independently; network plugin records are removed only when every site opted into cleanup. Eligible cleanup removes <code>pressbrake_settings<\/code>, <code>pressbrake_data_version<\/code>, plugin records, and <code>_pressbrake_protected<\/code> post metadata. It does not delete unrelated data.<\/p><\/dd>\n<dt id=\"does%20pressbrake%20block%20wp-cli%2C%20imports%2C%20cron%2C%20autosaves%2C%20or%20revisions%3F\"><h3>Does PressBrake block WP-CLI, imports, cron, autosaves, or revisions?<\/h3><\/dt>\n<dd><p>No by default. Background and programmatic updates are left alone. Developers can opt into guarding programmatic post updates with the documented filter.<\/p><\/dd>\n<dt id=\"what%20if%20i%20forget%20the%20deletion%20confirmation%20code%3F\"><h3>What if I forget the deletion confirmation code?<\/h3><\/dt>\n<dd><p>There is intentionally no public reset route. A super admin can change or remove a known code by entering the current code in PressBrake settings. If it is forgotten, a site owner with server access can use the documented <code>PRESSBRAKE_BYPASS<\/code> recovery mechanism temporarily, remove or update the code in a controlled maintenance session, and then remove the bypass constant.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added an optional, hash-only deletion confirmation code for protected content and plugins.<\/li>\n<li>Added strict-mode super-admin controls, one-use approvals, failed-attempt throttling, and secure server-side enforcement.<\/li>\n<li>Added accessible in-place code dialogs for supported admin actions, with secure confirmation-page fallbacks when JavaScript or a modal is unavailable.<\/li>\n<li>Preserved the 1.0 confirmation behavior when no code is configured.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release with URL Brake, Content Brake, and Plugin Brake.<\/li>\n<\/ul>","raw_excerpt":"PressBrake prevents accidental WordPress mistakes before they happen.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/gd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/365232","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/gd.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/gd.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=365232"}],"author":[{"embeddable":true,"href":"https:\/\/gd.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/miriyamcore"}],"wp:attachment":[{"href":"https:\/\/gd.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=365232"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/gd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=365232"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/gd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=365232"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/gd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=365232"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/gd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=365232"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/gd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=365232"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}