{"id":296753,"date":"2026-04-17T00:58:00","date_gmt":"2026-04-17T00:58:00","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/read-only-mode\/"},"modified":"2026-04-18T03:14:48","modified_gmt":"2026-04-18T03:14:48","slug":"telchar-site-freeze","status":"publish","type":"plugin","link":"https:\/\/test.wordpress.org\/plugins\/telchar-site-freeze\/","author":23423618,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.0.12","stable_tag":"1.0.12","tested":"6.9.4","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Read Only Mode \u2013 Telchar HiveLock","header_author":"Telchar (Carlos Llorente)","header_description":"Freeze a finished WordPress site by restricting persistent actions while keeping it browsable until an administrator disables the freeze.","assets_banners_color":"","last_updated":"2026-04-18 03:14:48","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/telchar-studio.com\/telchar-site-freeze","header_author_uri":"https:\/\/telchar-studio.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":144,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.12":{"tag":"1.0.12","author":"telchar","date":"2026-04-18 03:14:48"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3508475,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3508476,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.12"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3508493,"resolution":"1","location":"assets","locale":"","width":1920,"height":918}},"screenshots":{"1":"Plugin settings with freeze mode enabled"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[260407,31093,18591,260406,260408],"plugin_category":[],"plugin_contributors":[260409],"plugin_business_model":[],"class_list":["post-296753","plugin","type-plugin","status-publish","hentry","plugin_tags-change-prevention","plugin_tags-hardening","plugin_tags-read-only","plugin_tags-site-freeze","plugin_tags-write-protection","plugin_contributors-telchar","plugin_committers-telchar"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/telchar-site-freeze\/assets\/icon-128x128.png?rev=3508475","icon_2x":"https:\/\/ps.w.org\/telchar-site-freeze\/assets\/icon-256x256.png?rev=3508476","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/telchar-site-freeze\/assets\/screenshot-1.png?rev=3508493","caption":"Plugin settings with freeze mode enabled"}],"raw_content":"<!--section=description-->\n<p>Read Only Mode \u2013 Telchar HiveLock freezes an already working site by restricting persistent WordPress actions while keeping the site online, browsable, and accessible to administrators.<\/p>\n\n<p>While freeze mode is enabled:<\/p>\n\n<ul>\n<li>Frontend browsing continues to work.<\/li>\n<li>Administrators can still log in. All users can still log out.<\/li>\n<li>Administrators can still access the dashboard.<\/li>\n<li>Administrators can return to the plugin page and disable the freeze.<\/li>\n<li>Standard WordPress-level persistent changes are blocked.<\/li>\n<\/ul>\n\n<p>This plugin is designed for already-finished sites that should stay online and readable without allowing routine changes, uploads, updates, or content edits until an administrator intentionally unfreezes the site again.<\/p>\n\n<p>It is not a maintenance mode plugin. Its purpose is to harden finished sites by reducing their WordPress-level attack surface and blocking persistent changes through standard WordPress write routes.<\/p>\n\n<p>Blocked surfaces include:<\/p>\n\n<ul>\n<li>post, page, attachment, and custom post type writes<\/li>\n<li>taxonomy changes<\/li>\n<li>comment creation and standard moderation changes<\/li>\n<li>option and settings updates<\/li>\n<li>user creation, deletion, and password reset flows<\/li>\n<li>media uploads<\/li>\n<li>plugin, theme, and core file modification flows handled through WordPress<\/li>\n<li>REST write requests across all namespaces, including third-party plugin routes<\/li>\n<li>admin AJAX restricted to a narrow allowlist of safe core read actions, while taxonomy creation requests return a visible error<\/li>\n<li>XML-RPC publishing and pingback-style mutation routes<\/li>\n<\/ul>\n\n<p>This plugin aims to provide a practical WordPress-level freeze mode. It does not claim to provide absolute immutability, server-level filesystem protection, or protection against every possible vulnerability or every custom plugin write path.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>telchar-site-freeze<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory, or install the plugin through the WordPress admin area.<\/li>\n<li>Activate the plugin through the <code>Plugins<\/code> screen in WordPress.<\/li>\n<li>Open <code>Settings &gt; Read Only Mode<\/code>.<\/li>\n<li>Enable freeze mode when you want to freeze the site.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20does%20this%20plugin%20block%3F\"><h3>What does this plugin block?<\/h3><\/dt>\n<dd><p>It blocks standard WordPress-level persistent changes such as content edits, taxonomy changes, user changes, settings changes, uploads, plugin and theme operations, and core write-style routes through REST, AJAX, and XML-RPC.<\/p><\/dd>\n<dt id=\"what%20still%20works%20while%20freeze%20mode%20is%20enabled%3F\"><h3>What still works while freeze mode is enabled?<\/h3><\/dt>\n<dd><p>Frontend page rendering, browsing, logout, administrator dashboard access, administrator login, and disabling freeze mode still work.<\/p><\/dd>\n<dt id=\"can%20visitors%20still%20browse%20the%20website%3F\"><h3>Can visitors still browse the website?<\/h3><\/dt>\n<dd><p>Yes. The frontend remains available for normal browsing.<\/p><\/dd>\n<dt id=\"can%20users%20still%20log%20in%3F\"><h3>Can users still log in?<\/h3><\/dt>\n<dd><p>Login is restricted to administrators only while freeze mode is enabled. Logging out continues to work.<\/p><\/dd>\n<dt id=\"can%20administrators%20still%20access%20the%20dashboard%3F\"><h3>Can administrators still access the dashboard?<\/h3><\/dt>\n<dd><p>Yes. Administrators can still access the dashboard and disable the freeze from the plugin screen, but persistent write actions remain blocked until freeze mode is disabled.<\/p><\/dd>\n<dt id=\"how%20do%20i%20disable%20freeze%20mode%3F\"><h3>How do I disable freeze mode?<\/h3><\/dt>\n<dd><p>Open <code>Settings &gt; Read Only Mode<\/code> in the WordPress admin area and click the disable button.<\/p><\/dd>\n<dt id=\"are%20media%20uploads%20blocked%3F\"><h3>Are media uploads blocked?<\/h3><\/dt>\n<dd><p>Yes. Uploading new media is blocked while freeze mode is enabled.<\/p><\/dd>\n<dt id=\"are%20plugin%20and%20theme%20updates%20blocked%3F\"><h3>Are plugin and theme updates blocked?<\/h3><\/dt>\n<dd><p>Yes. Installing, updating, deleting, activating, switching, and editing plugins or themes through normal WordPress routes are blocked while the freeze is enabled.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20i%20forget%20the%20administrator%20password%3F\"><h3>What happens if I forget the administrator password?<\/h3><\/dt>\n<dd><p>Password changes and resets are blocked while freeze mode is enabled, so recovery may require manual intervention outside the plugin.<\/p><\/dd>\n<dt id=\"are%20settings%20changes%20blocked%3F\"><h3>Are settings changes blocked?<\/h3><\/dt>\n<dd><p>Yes. Persistent settings and option changes are blocked while freeze mode is enabled.<\/p><\/dd>\n<dt id=\"are%20comments%20or%20content%20changes%20blocked%3F\"><h3>Are comments or content changes blocked?<\/h3><\/dt>\n<dd><p>Yes. New comments, comment moderation changes, post edits, page edits, and similar content mutations are blocked.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.12<\/h4>\n\n<ul>\n<li>Replaced the remaining admin action request helper with explicit local request inspection to reduce review ambiguity around passive mutation detection.<\/li>\n<\/ul>\n\n<h4>1.0.11<\/h4>\n\n<ul>\n<li>Replaced generic request readers with explicit contextual request inspection and switched the post-toggle admin status notice to a controlled transient-based flow.<\/li>\n<\/ul>\n\n<h4>1.0.10<\/h4>\n\n<ul>\n<li>Changed the main freeze toggle button to use site-focused labels instead of the plugin brand name, and updated translation catalogs accordingly.<\/li>\n<\/ul>\n\n<h4>1.0.9<\/h4>\n\n<ul>\n<li>Added a warning encouraging site owners to verify site health before freezing, with a link to Telchar for security audits and related tools.<\/li>\n<\/ul>\n\n<h4>1.0.8<\/h4>\n\n<ul>\n<li>Blocked <code>post.php?action=delete<\/code> so attachments cannot be permanently deleted from their detail screen during freeze. Returned core-compatible AJAX errors for blocked comment moderation actions so the admin UI shows a visible failure instead of behaving as if the action succeeded.<\/li>\n<\/ul>\n\n<h4>1.0.7<\/h4>\n\n<ul>\n<li>Allowed the minimum safe core AJAX actions needed for media and taxonomy browsing in wp-admin, and returned a visible error for blocked AJAX term creation instead of leaving the UI loading indefinitely.<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>Blocked low-level comment creation paths that pass through <code>wp_new_comment()<\/code> preprocessing so comment writes are denied more consistently during freeze.<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Removed the remaining Heartbeat AJAX exception so frozen sites no longer expose that write-capable route. Added low-level metadata, taxonomy relationship, and user table write blocking to reduce custom code bypasses.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Fixed get_server_value() to use $_SERVER directly instead of filter_input(INPUT_SERVER), which returns null in PHP-FPM environments and silently disabled HTTP-method-dependent admin blocks.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Renamed the plugin, removed manual translation loading, hardened request validation, added a persistent admin notice while frozen, and updated compatibility metadata.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Closed admin-post.php write bypass. Blocked add_option and delete_option during freeze. Strengthened user capability checks. Fixed text inconsistencies in admin UI.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Removed dead code in option allowlist. Session tokens are stored in user meta, not options, so the entry had no effect.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial public release.<\/li>\n<\/ul>","raw_excerpt":"Put your WordPress site in read-only mode \u2014 block persistent changes while keeping the site browsable until an administrator disables the freeze.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/296753","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=296753"}],"author":[{"embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/telchar"}],"wp:attachment":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=296753"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=296753"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=296753"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=296753"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=296753"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=296753"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}