{"id":271612,"date":"2026-01-08T06:15:02","date_gmt":"2026-01-08T06:15:02","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/version-locker-update-control\/"},"modified":"2026-04-11T12:50:12","modified_gmt":"2026-04-11T12:50:12","slug":"version-locker","status":"publish","type":"plugin","link":"https:\/\/tr.wordpress.org\/plugins\/version-locker\/","author":20756002,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.2.2","stable_tag":"1.2.2","tested":"6.9.4","requires":"6.0","requires_php":"7.0","requires_plugins":null,"header_name":"Version Locker","header_author":"Vishal Paswan","header_description":"Securely lock updates for specific plugins to maintain version stability and supply-chain security.","assets_banners_color":"f3f9ff","last_updated":"2026-04-11 12:50:12","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/vishalpaswan\/version-locker","header_author_uri":"https:\/\/github.com\/vishalpaswan","rating":0,"author_block_rating":0,"active_installs":20,"downloads":208,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.1":{"tag":"1.2.1","author":"alphadev01","date":"2026-01-08 06:15:44"},"1.2.2":{"tag":"1.2.2","author":"alphadev01","date":"2026-04-11 12:50:12"}},"upgrade_notice":{"1.2.2":"<p>Major update. Adds theme locking, global killswitches, email notifications, quick toggles, and Multisite support. All existing plugin locks are preserved on upgrade. Note: uninstall behavior has changed \u2014 data is now kept by default unless you enable deletion in Settings.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3463341,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3463341,"resolution":"256x256","location":"assets","locale":""},"icon.svg":{"filename":"icon.svg","revision":3463341,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3463341,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3463341,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.1","1.2.2"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Plugins tab with lock toggles and filters","2":"Themes tab with lock controls","3":"Settings page with killswitches and email notifications","4":"Audit log showing who locked what and when"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[23411,253562,259972,195740,24313],"plugin_category":[54],"plugin_contributors":[253563],"plugin_business_model":[],"class_list":["post-271612","plugin","type-plugin","status-publish","hentry","plugin_tags-disable-updates","plugin_tags-lock-plugins","plugin_tags-lock-themes","plugin_tags-update-manager","plugin_tags-version-control","plugin_category-security-and-spam-protection","plugin_contributors-alphadev01","plugin_committers-alphadev01"],"banners":{"banner":"https:\/\/ps.w.org\/version-locker\/assets\/banner-772x250.png?rev=3463341","banner_2x":"https:\/\/ps.w.org\/version-locker\/assets\/banner-1544x500.png?rev=3463341","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/version-locker\/assets\/icon.svg?rev=3463341","icon":"https:\/\/ps.w.org\/version-locker\/assets\/icon.svg?rev=3463341","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Version Locker lets you lock specific plugins and themes to their current version. Once locked, they won't update automatically or manually until you unlock them.<\/p>\n\n<p>Useful for keeping your site stable when you have customized plugins, client sites, or production environments where you need control over when things update.<\/p>\n\n<h3>What It Does<\/h3>\n\n<ul>\n<li>Lock individual plugins to prevent updates<\/li>\n<li>Lock individual themes to prevent updates<\/li>\n<li>Block all plugin updates at once (global killswitch)<\/li>\n<li>Block all theme updates at once (global killswitch)<\/li>\n<li>Block WordPress core updates (global killswitch)<\/li>\n<li>Quick toggle locks on\/off without page reload<\/li>\n<li>Bulk lock or unlock multiple items<\/li>\n<li>Email alerts when locked items try to update<\/li>\n<li>Search and filter your plugins and themes<\/li>\n<li>Activity log showing who locked what and when<\/li>\n<li>Works on Multisite (each site has its own locks)<\/li>\n<\/ul>\n\n<h3>How It Works<\/h3>\n\n<p>The plugin uses WordPress filters to hide update notifications and block update attempts. It doesn't modify any plugin or theme files.<\/p>\n\n<h3>Credits<\/h3>\n\n<p>Thanks to <a href=\"https:\/\/profiles.wordpress.org\/nemai\/\">Nemai Naskar<\/a> for testing and feedback on 1.2.2.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install through WordPress Plugins screen or upload to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin<\/li>\n<li>Go to <strong>Tools \u2192 Version Locker<\/strong><\/li>\n<li>Toggle locks on or off for plugins and themes<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20modify%20plugin%20or%20theme%20files%3F\"><h3>Does this modify plugin or theme files?<\/h3><\/dt>\n<dd><p>No. It only uses WordPress filters to control update behavior.<\/p><\/dd>\n<dt id=\"will%20locked%20items%20still%20show%20update%20available%3F\"><h3>Will locked items still show update available?<\/h3><\/dt>\n<dd><p>You'll see a small indicator that an update exists, but the update button won't appear.<\/p><\/dd>\n<dt id=\"can%20i%20still%20update%20a%20locked%20item%3F\"><h3>Can I still update a locked item?<\/h3><\/dt>\n<dd><p>Yes, just unlock it first. Updates work normally once unlocked.<\/p><\/dd>\n<dt id=\"what%27s%20the%20difference%20between%20locking%20one%20item%20vs%20using%20the%20killswitch%3F\"><h3>What's the difference between locking one item vs using the killswitch?<\/h3><\/dt>\n<dd><p>Locking targets specific items. The killswitch disables ALL plugin updates, ALL theme updates, or core updates site-wide.<\/p><\/dd>\n<dt id=\"does%20this%20work%20on%20multisite%3F\"><h3>Does this work on Multisite?<\/h3><\/dt>\n<dd><p>Yes. Each site has its own independent locks.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20i%20delete%20the%20plugin%3F\"><h3>What happens if I delete the plugin?<\/h3><\/dt>\n<dd><p>By default, all locks and settings are preserved on uninstall. To delete all data on removal, enable \"Delete all data on uninstall\" in the Settings tab before uninstalling.<\/p><\/dd>\n<dt id=\"what%20changed%20from%201.2.1%3F\"><h3>What changed from 1.2.1?<\/h3><\/dt>\n<dd><p>Theme locking, global killswitches, email notifications, quick toggles, bulk actions, Multisite support, and a rebuilt codebase. All existing locks carry over automatically.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.2 \u2013 2026-01-24<\/h4>\n\n<p><strong>New<\/strong><\/p>\n\n<ul>\n<li>Theme locking \u2014 lock individual themes just like plugins<\/li>\n<li>Global killswitches \u2014 disable all plugin, all theme, or core updates with a single toggle<\/li>\n<li>Email notifications \u2014 get alerted when a locked item tries to update<\/li>\n<li>Quick toggle \u2014 lock or unlock without a page reload<\/li>\n<li>Bulk lock\/unlock \u2014 select multiple items and toggle them at once<\/li>\n<li>Auto-lock for newly installed plugins (optional)<\/li>\n<li>Live search and filter on plugins and themes tabs<\/li>\n<li>Multisite support \u2014 each site manages its own locks independently<\/li>\n<li>Audit log now available on all sites (previously multi-admin only)<\/li>\n<li>Audit log CSV export<\/li>\n<li>Rate limiting on AJAX actions to prevent abuse<\/li>\n<\/ul>\n\n<p><strong>Improvements<\/strong><\/p>\n\n<ul>\n<li>Rebuilt with a proper class-based structure (autoloader, services, failsafe layer)<\/li>\n<li>Error handling now catches bootstrap failures and shows a graceful admin notice instead of crashing<\/li>\n<li>Improved input validation across all form submissions and AJAX handlers<\/li>\n<li>Added <code>VLOCKER_DISABLE_ALL<\/code> constant as an emergency kill switch (define in wp-config.php)<\/li>\n<li>Better performance through caching<\/li>\n<li>PHP requirement lowered from 7.4 to 7.0<\/li>\n<li>Uninstall behavior changed to safe-by-default \u2014 data is now preserved on removal unless you opt in to deletion from the Settings tab<\/li>\n<\/ul>\n\n<p><strong>Security<\/strong><\/p>\n\n<ul>\n<li>Separate capability checks per tab (plugins, themes, settings)<\/li>\n<li>AJAX nonce verification on all endpoints<\/li>\n<li>CSV injection protection on audit log export<\/li>\n<li>Transient-based rate limiting on quick toggle and test email<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Plugin locking only (no theme support)<\/li>\n<li>Audit log for multi-admin sites only<\/li>\n<\/ul>","raw_excerpt":"Lock plugin and theme updates to prevent accidental or automatic updates. Simple, secure update control for WordPress.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/271612","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=271612"}],"author":[{"embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/alphadev01"}],"wp:attachment":[{"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=271612"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=271612"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=271612"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=271612"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=271612"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=271612"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}