{"id":359928,"date":"2026-08-27T18:03:48","date_gmt":"2026-08-27T18:03:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/beardo-multisite-activation-console\/"},"modified":"2026-08-27T18:03:38","modified_gmt":"2026-08-27T18:03:38","slug":"beardo-multisite-activation-console","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/beardo-multisite-activation-console\/","author":23519436,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1","requires":"7.0","requires_php":"8.0","requires_plugins":null,"header_name":"Beardo Multisite Activation Console","header_author":"Beardo.Tools","header_description":"Network-admin console to view and safely transition plugin activation","assets_banners_color":"dadfe4","last_updated":"2026-08-27 18:03:38","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/beardo.tools\/donate\/","header_plugin_uri":"https:\/\/beardo.tools\/plugins\/multisite-activation-console\/","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":27,"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":"beardotools","date":"2026-08-27 18:03:38","revision":3669350}},"upgrade_notice":{"1.0.0":"<p>First public release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.gif":{"filename":"icon-128x128.gif","revision":3669350,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.gif":{"filename":"icon-256x256.gif","revision":3669350,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3669350,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3669350,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3669350,"resolution":"1","location":"assets","locale":"","width":1698,"height":879},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3669350,"resolution":"2","location":"assets","locale":"","width":1692,"height":876}},"screenshots":{"1":"Activation matrix \u2014 every plugin's state across all subsites, with the safe-transition actions menu open","2":"Audit log \u2014 every state transition recorded network-wide, filterable by user, site, and plugin"}},"plugin_section":[],"plugin_tags":[3741,8533,441,325,2391],"plugin_category":[51],"plugin_contributors":[271446],"plugin_business_model":[],"class_list":["post-359928","plugin","type-plugin","status-publish","hentry","plugin_tags-activation","plugin_tags-audit","plugin_tags-multisite","plugin_tags-network","plugin_tags-plugins","plugin_category-multisite","plugin_contributors-beardotools","plugin_committers-beardotools"],"banners":{"banner":"https:\/\/ps.w.org\/beardo-multisite-activation-console\/assets\/banner-772x250.png?rev=3669350","banner_2x":"https:\/\/ps.w.org\/beardo-multisite-activation-console\/assets\/banner-1544x500.png?rev=3669350","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/beardo-multisite-activation-console\/assets\/icon-128x128.gif?rev=3669350","icon_2x":"https:\/\/ps.w.org\/beardo-multisite-activation-console\/assets\/icon-256x256.gif?rev=3669350","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/beardo-multisite-activation-console\/assets\/screenshot-1.png?rev=3669350","caption":"Activation matrix \u2014 every plugin's state across all subsites, with the safe-transition actions menu open"},{"src":"https:\/\/ps.w.org\/beardo-multisite-activation-console\/assets\/screenshot-2.png?rev=3669350","caption":"Audit log \u2014 every state transition recorded network-wide, filterable by user, site, and plugin"}],"raw_content":"<!--section=description-->\n<p>Beardo Multisite Activation Console gives super admins one screen to see and safely change the activation state of every installed plugin across an entire multisite network.<\/p>\n\n<p><strong>What it does<\/strong><\/p>\n\n<ul>\n<li>Activation matrix \u2014 every plugin's state (network active, active per site, or off) across all subsites in a single DataViews grid<\/li>\n<li>Safe transitions \u2014 one state change per request, so a fatal error on one subsite never takes down the whole batch<\/li>\n<li>Dry-run validation \u2014 backend health checks run before any change is executed<\/li>\n<li>Stale dual-state cleanup \u2014 detects plugins that are both network active and redundantly active per site, and strips the redundant entry without deactivating anything<\/li>\n<li>Audit log \u2014 every state transition is recorded network-wide with the acting user, target site, action, and result, filterable by user, site, and plugin<\/li>\n<li>Guardrails \u2014 a protected list stops the console from deactivating itself or a drop-in and locking a super admin out mid-operation<\/li>\n<\/ul>\n\n<p><strong>Safety first<\/strong><\/p>\n\n<p>Every request is gated to super admins with the <code>manage_network_plugins<\/code> capability, protected by REST cookie authentication and nonces, and every posted value is validated against a server-side allowlist before anything runs.<\/p>\n\n<p><strong>Support &amp; Documentation<\/strong><\/p>\n\n<ul>\n<li>For support, visit <a href=\"https:\/\/help.beardo.tools\">help.beardo.tools<\/a><\/li>\n<li>Publisher site: <a href=\"https:\/\/beardo.tools\">beardo.tools<\/a><\/li>\n<\/ul>\n\n<h3>External Services<\/h3>\n\n<p>This plugin makes no external HTTP requests. It reads and writes only local\nWordPress data: the network's plugin activation state, the sites in the\nnetwork, and its own audit log table. No data is sent to any third-party\nservice, and no tracking, telemetry, or analytics of any kind is collected.<\/p>\n\n<h3>Third-Party Libraries<\/h3>\n\n<p>The admin interface is a React application built from the plugin's own source\nin <code>src\/<\/code> using @wordpress\/scripts. The shipped <code>build\/index.js<\/code> is compiled\noutput \u2014 not obfuscated code \u2014 and contains only the plugin's source plus the\nstandard WordPress packages it imports (@wordpress\/components,\n@wordpress\/dataviews, @wordpress\/element, @wordpress\/api-fetch,\n@wordpress\/i18n, @wordpress\/icons), all GPL-compatible.<\/p>\n\n<p>The full, unminified source is available in the plugin's public repository.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li><strong>Network Activate<\/strong> it from <strong>Network Admin \u2192 Plugins<\/strong><\/li>\n<li>Open <strong>Network Admin \u2192 Plugins \u2192 Activation Console<\/strong><\/li>\n<\/ol>\n\n<p>This plugin requires a WordPress multisite installation. It has no effect on single-site installs.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20work%20on%20a%20single-site%20wordpress%20install%3F\"><h3>Does this work on a single-site WordPress install?<\/h3><\/dt>\n<dd><p>No. The console manages activation state across a multisite network, so it requires a multisite installation and must be network activated.<\/p><\/dd>\n<dt id=\"can%20it%20break%20my%20network%20by%20deactivating%20something%20critical%3F\"><h3>Can it break my network by deactivating something critical?<\/h3><\/dt>\n<dd><p>The console executes one transition per request so a fatal on one subsite is isolated, runs a backend dry-run before executing, and maintains a protected list (filterable via <code>beardo_mac_protected_plugins<\/code>) of plugins it will never touch \u2014 including itself.<\/p><\/dd>\n<dt id=\"who%20can%20use%20the%20console%3F\"><h3>Who can use the console?<\/h3><\/dt>\n<dd><p>Only super admins with the <code>manage_network_plugins<\/code> capability. Every REST request is nonce-protected and validated server-side.<\/p><\/dd>\n<dt id=\"what%20is%20recorded%20in%20the%20audit%20log%3F\"><h3>What is recorded in the audit log?<\/h3><\/dt>\n<dd><p>Every state transition: the acting user, the plugin, the action, the scope, the target site, the result, and a timestamp. The log is stored in one network-wide table and can be filtered by user, site, and plugin.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20data%20if%20i%20uninstall%3F\"><h3>What happens to my data if I uninstall?<\/h3><\/dt>\n<dd><p>Uninstalling removes the audit log table. No other data is created or modified.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial public release.<\/li>\n<li>Activation matrix \u2014 every plugin's state (network active, per-site active, or off) across all subsites in a single DataViews grid<\/li>\n<li>Safe transitions \u2014 one state change per request, so a fatal error on one subsite never takes down the whole batch<\/li>\n<li>Dry-run validation \u2014 backend health checks run before any change is executed<\/li>\n<li>Stale dual-state cleanup \u2014 detects and strips redundant per-site entries for network-active plugins without deactivating anything<\/li>\n<li>Dead-reference cleanup \u2014 removes activation entries for plugins no longer present on disk<\/li>\n<li>Audit log \u2014 every state transition recorded network-wide with acting user, target site, action, and result, filterable by user, site, and plugin<\/li>\n<li>Guardrails \u2014 a filterable protected list (<code>beardo_mac_protected_plugins<\/code>) prevents the console from deactivating itself or locking out a super admin<\/li>\n<li>Admin theme compatibility \u2014 console colors flow through a plugin-scoped CSS token layer, and the focus ring follows the user's admin color scheme<\/li>\n<li>Full RTL support<\/li>\n<\/ul>\n\n<p>This release follows an internal beta series; 1.0.0 is the first version published to WordPress.org.<\/p>","raw_excerpt":"Network-admin console to view and safely change plugin activation state (network, per-site, off) across every subsite, with an audit log.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/359928","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=359928"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/beardotools"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=359928"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=359928"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=359928"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=359928"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=359928"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=359928"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}