{"id":359558,"date":"2026-08-29T06:20:19","date_gmt":"2026-08-29T06:20:19","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/quick-extension-switcher\/"},"modified":"2026-08-29T06:20:03","modified_gmt":"2026-08-29T06:20:03","slug":"togglepilot-admin-module-manager","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/togglepilot-admin-module-manager\/","author":23087823,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.1","stable_tag":"1.0.1","tested":"7.1","requires":"6.0","requires_php":"8.1","requires_plugins":null,"header_name":"TogglePilot \u2013 Admin Module Manager","header_author":"Dip Saha","header_description":"Adds a Quick Extension menu to the WordPress Admin Bar so administrators can activate\/deactivate plugins instantly via AJAX, without visiting the Plugins page. Built for fast conflict testing and troubleshooting.","assets_banners_color":"fcfdfd","last_updated":"2026-08-29 06:20:03","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":46,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.1":{"tag":"1.0.1","author":"dipsaha","date":"2026-08-29 06:20:03","revision":3671155}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3671180,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3671180,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3671208,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3671208,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.1"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[278146,1339,4932,2391,8541],"plugin_category":[],"plugin_contributors":[278147],"plugin_business_model":[],"class_list":["post-359558","plugin","type-plugin","status-publish","hentry","plugin_tags-activate-deactivate","plugin_tags-admin-bar","plugin_tags-developer-tools","plugin_tags-plugins","plugin_tags-troubleshooting","plugin_contributors-dipsaha","plugin_committers-dipsaha"],"banners":{"banner":"https:\/\/ps.w.org\/togglepilot-admin-module-manager\/assets\/banner-772x250.png?rev=3671208","banner_2x":"https:\/\/ps.w.org\/togglepilot-admin-module-manager\/assets\/banner-1544x500.png?rev=3671208","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/togglepilot-admin-module-manager\/assets\/icon-128x128.png?rev=3671180","icon_2x":"https:\/\/ps.w.org\/togglepilot-admin-module-manager\/assets\/icon-256x256.png?rev=3671180","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>TogglePilot \u2013 Admin Module Manager adds a \"\u26a1 Plugins\" menu to the WordPress Admin Bar that lists every installed plugin and lets authorized administrators toggle activation on or off in place, using AJAX, with no full page reload.<\/p>\n\n<p>It is built primarily as a <strong>developer\/troubleshooting utility<\/strong> to speed up plugin-conflict testing: instead of navigating to Plugins \u2192 Installed Plugins, finding a plugin, and clicking Activate\/Deactivate (which reloads the page), you can toggle plugins directly from any screen \u2014 front end or back end \u2014 via the Admin Bar.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Admin Bar dropdown listing all installed plugins with name, version, author, and status<\/li>\n<li>One-click activate\/deactivate via AJAX \u2014 no page reload<\/li>\n<li>Client-side instant search\/filter for sites with many plugins<\/li>\n<li>Active \/ Inactive grouping (optional; can be shown as a flat alphabetical list instead)<\/li>\n<li>Protected Plugins list \u2014 require a confirmation dialog before deactivating sensitive plugins<\/li>\n<li>TogglePilot \u2013 Admin Module Manager can never deactivate itself<\/li>\n<li>Native WordPress-style confirmation modal (no browser alert())<\/li>\n<li>Plugin dependency awareness (reads the \"Requires Plugins\" header \/ WP_Plugin_Dependencies) with a clear warning if a dependency is missing<\/li>\n<li>Troubleshooting Mode: select multiple plugins to deactivate at once for conflict testing, then restore the exact previous state with one click<\/li>\n<li>Configurable settings: Admin Bar label\/icon, which fields to show, menu width, compact mode, grouping<\/li>\n<li>Optional debug logging of activation\/deactivation attempts (never logs nonces, tokens, or passwords)<\/li>\n<li>Multisite-aware capability checks<\/li>\n<li>Full keyboard navigation, ARIA labeling, and screen-reader support<\/li>\n<li>Translation-ready (text domain: togglepilot-admin-module-manager)<\/li>\n<\/ul>\n\n<h4>Security<\/h4>\n\n<ul>\n<li>Every action requires the <code>activate_plugins<\/code> capability (or higher, depending on multisite context)<\/li>\n<li>Every AJAX request verifies a WordPress nonce via <code>check_ajax_referer()<\/code><\/li>\n<li>Plugin identifiers sent from JavaScript are never trusted directly \u2014 they are sanitized, validated against a strict pattern, and confirmed to correspond to a real installed plugin before any action is taken<\/li>\n<li>Directory traversal and arbitrary file paths are rejected<\/li>\n<li>TogglePilot \u2013 Admin Module Manager itself is hard-protected against deactivation from its own UI<\/li>\n<li>Administrator-defined protected plugins require an explicit confirmation step<\/li>\n<li>Activation\/deactivation always goes through WordPress core's own <code>activate_plugin()<\/code> \/ <code>deactivate_plugins()<\/code> functions \u2014 the plugin never writes directly to the <code>active_plugins<\/code> option or plugin files<\/li>\n<\/ul>\n\n<h3>Configuration<\/h3>\n\n<p>Go to <strong>Settings \u2192 TogglePilot \u2013 Admin Module Manager<\/strong> to:<\/p>\n\n<ul>\n<li>Change the Admin Bar label and icon<\/li>\n<li>Choose whether to show plugin versions\/authors<\/li>\n<li>Choose whether inactive plugins are shown<\/li>\n<li>Enable\/disable the search box<\/li>\n<li>Enable\/disable Active\/Inactive grouping<\/li>\n<li>Select which plugins require confirmation before deactivation (Protected Plugins)<\/li>\n<li>Adjust menu width and compact mode<\/li>\n<li>Enable debug logging<\/li>\n<\/ul>\n\n<h3>Usage<\/h3>\n\n<ol>\n<li>Click \"\u26a1 Plugins\" in the Admin Bar from any page.<\/li>\n<li>Use the search box to quickly find a plugin if you have many installed.<\/li>\n<li>Click a toggle to activate or deactivate that plugin.<\/li>\n<li>For protected plugins, confirm the action in the dialog that appears.<\/li>\n<li>The row updates immediately to reflect the new status \u2014 no page reload.<\/li>\n<\/ol>\n\n<h4>Troubleshooting Mode<\/h4>\n\n<ol>\n<li>Click \"Troubleshooting Mode\" in the Quick Plugins dropdown footer.<\/li>\n<li>Check the plugins you want to temporarily disable for conflict testing.<\/li>\n<li>Click \"Disable Selected.\" The plugin records your pre-change state for your user session.<\/li>\n<li>Test your site with those plugins off.<\/li>\n<li>When done, reopen the dropdown, click \"Troubleshooting Mode,\" and click \"Restore Previous Plugin State\" to put everything back exactly as it was.<\/li>\n<\/ol>\n\n<h3>Troubleshooting<\/h3>\n\n<ul>\n<li><strong>The menu doesn't appear:<\/strong> Confirm your user has the <code>activate_plugins<\/code> capability and that the Admin Bar is enabled for your account (Users \u2192 Your Profile \u2192 Toolbar).<\/li>\n<li><strong>A toggle does nothing:<\/strong> Open your browser console for errors; your session\/nonce may have expired \u2014 refresh the page.<\/li>\n<li><strong>\"Security check failed\" message:<\/strong> Your nonce expired (usually after 12\u201324 hours or after logging out\/in elsewhere). Refresh the page and try again.<\/li>\n<li><strong>A plugin won't activate:<\/strong> Click \"View Details\" on the failure message for the sanitized error WordPress returned; it usually indicates a PHP error or missing dependency in that plugin.<\/li>\n<\/ul>\n\n<h3>Minimum Requirements<\/h3>\n\n<ul>\n<li>WordPress 6.9 or greater<\/li>\n<li>PHP 8.1 or greater<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>togglepilot-admin-module-manager<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install the zip via Plugins \u2192 Add New \u2192 Upload Plugin.<\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress.<\/li>\n<li>Look for the \"\u26a1 Plugins\" item in your Admin Bar (visible to users with the <code>activate_plugins<\/code> capability).<\/li>\n<li>Optionally visit Settings \u2192 TogglePilot \u2013 Admin Module Manager to configure labels, protected plugins, and appearance.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"can%20this%20plugin%20deactivate%20itself%3F\"><h3>Can this plugin deactivate itself?<\/h3><\/dt>\n<dd><p>No. TogglePilot \u2013 Admin Module Manager is always shown as \"Always Active\" in the dropdown and cannot be turned off from its own UI. This prevents the interface from disappearing while you're using it. To deactivate it, use the standard Plugins page.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20a%20plugin%20activation%20fails%3F\"><h3>What happens if a plugin activation fails?<\/h3><\/dt>\n<dd><p>The plugin surfaces a sanitized error message (with a \"View Details\" option) and never marks a plugin as active in the UI unless WordPress core confirms the activation actually succeeded.<\/p><\/dd>\n<dt id=\"does%20this%20work%20with%20plugin%20dependencies%3F\"><h3>Does this work with plugin dependencies?<\/h3><\/dt>\n<dd><p>Yes. If a plugin declares required plugins via the \"Requires Plugins\" header, TogglePilot \u2013 Admin Module Manager checks whether those dependencies are active before allowing activation, and warns you if they are not.<\/p><\/dd>\n<dt id=\"does%20this%20support%20multisite%3F\"><h3>Does this support Multisite?<\/h3><\/dt>\n<dd><p>The plugin performs capability checks appropriate to the current site context. Network-level (site-wide) activation is intentionally out of scope for the initial release; the plugin manages plugins at the site level only, and its architecture leaves room to add network-level support later.<\/p><\/dd>\n<dt id=\"will%20this%20slow%20down%20my%20site%3F\"><h3>Will this slow down my site?<\/h3><\/dt>\n<dd><p>No. Assets (CSS\/JS) are only enqueued for users who can see the menu (i.e., users with the <code>activate_plugins<\/code> capability) and only after the Admin Bar is confirmed visible. Plugin data is loaded once per page load, not on every menu open, so opening the dropdown never triggers a new request.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: Admin Bar plugin switcher, AJAX activate\/deactivate, search, grouping, protected plugins with confirmation, dependency checks, Troubleshooting Mode with state restoration, settings page, debug logging, accessibility support.<\/li>\n<\/ul>","raw_excerpt":"Activate and deactivate plugins instantly from the WordPress Admin Bar \u2014 no trip to the Plugins page required.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/359558","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=359558"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/dipsaha"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=359558"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=359558"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=359558"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=359558"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=359558"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=359558"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}