{"id":282000,"date":"2026-02-16T21:52:57","date_gmt":"2026-02-16T21:52:57","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/extension-profiles\/"},"modified":"2026-02-16T21:52:34","modified_gmt":"2026-02-16T21:52:34","slug":"extension-profiles","status":"publish","type":"plugin","link":"https:\/\/bel.wordpress.org\/plugins\/extension-profiles\/","author":7775781,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.0.0","stable_tag":"1.0.0","tested":"6.9.4","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"Extension Profiles","header_author":"David Towoju","header_description":"Create named plugin profiles to quickly switch between different sets of active plugins per user session.","assets_banners_color":"2c40c3","last_updated":"2026-02-16 21:52:34","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":196,"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":"davexpression","date":"2026-02-16 21:52:34"},"1.0.1":{"tag":"1.0.1","author":"davexpression","date":"2026-02-16 22:14:16"}},"upgrade_notice":{"1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3462939,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3462939,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"The Extension Profiles admin page showing the profile creation form and list table.","2":"The admin bar profile switcher dropdown.","3":"The plugins page notice when a profile is active."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[734,5651,146824,1591,8541],"plugin_category":[44],"plugin_contributors":[129120],"plugin_business_model":[],"class_list":["post-282000","plugin","type-plugin","status-publish","hentry","plugin_tags-development","plugin_tags-profiles","plugin_tags-switching","plugin_tags-testing","plugin_tags-troubleshooting","plugin_category-discussion-and-community","plugin_contributors-davexpression","plugin_committers-davexpression"],"banners":{"banner":"https:\/\/ps.w.org\/extension-profiles\/assets\/banner-772x250.png?rev=3462939","banner_2x":"https:\/\/ps.w.org\/extension-profiles\/assets\/banner-1544x500.png?rev=3462939","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/extension-profiles_2c40c3.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Extension Profiles lets WordPress administrators create named \"profiles\" that define which plugins should be active. When a profile is activated, only the plugins in that profile are loaded for your session. Other plugins are filtered out without actually being deactivated in the database.<\/p>\n\n<p>This is ideal for:<\/p>\n\n<ul>\n<li><strong>Development and testing<\/strong> - Quickly switch between different configurations without activating\/deactivating plugins one by one.<\/li>\n<li><strong>Troubleshooting<\/strong> - Isolate conflicts by creating minimal profiles.<\/li>\n<li><strong>Performance testing<\/strong> - Compare site performance with different plugin sets.<\/li>\n<\/ul>\n\n<h4>How It Works<\/h4>\n\n<p>Extension Profiles uses a Must-Use (MU) plugin that intercepts the active plugins list before WordPress loads them. This approach:<\/p>\n\n<ul>\n<li>Never actually deactivates plugins in the database.<\/li>\n<li>Only affects the current user's session (via a secure cookie).<\/li>\n<li>Has zero overhead when no profile is active.<\/li>\n<li>Preserves all plugin settings and data.<\/li>\n<\/ul>\n\n<h4>Features<\/h4>\n\n<ul>\n<li><strong>Taxonomy-style admin page<\/strong> - Familiar interface for creating and managing profiles under the Plugins menu.<\/li>\n<li><strong>Admin bar switcher<\/strong> - Quickly activate or deactivate profiles from the WordPress admin bar.<\/li>\n<li><strong>Dependency support<\/strong> - Automatically includes required plugins when WordPress 6.5+ \"Requires Plugins\" headers are present.<\/li>\n<li><strong>Per-session isolation<\/strong> - Each user can activate their own profile independently.<\/li>\n<li><strong>Plugins page notice<\/strong> - Clear warning banner on the Plugins page when a profile is active.<\/li>\n<\/ul>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WordPress 6.5 or higher (for dependency resolution).<\/li>\n<li>PHP 7.4 or higher.<\/li>\n<li>Write access to the <code>wp-content\/mu-plugins\/<\/code> directory.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>extension-profiles<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory.<\/li>\n<li>Activate the plugin through the \"Plugins\" menu in WordPress.<\/li>\n<li>The plugin will automatically install a Must-Use plugin file to <code>wp-content\/mu-plugins\/<\/code>.<\/li>\n<li>Navigate to <strong>Plugins &gt; Profiles<\/strong> to create your first profile.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20actually%20deactivate%20plugins%3F\"><h3>Does this actually deactivate plugins?<\/h3><\/dt>\n<dd><p>No. Plugins remain active in the database. Extension Profiles filters which plugins are loaded per user session using a cookie-based mechanism, similar to how WordPress Health Check's troubleshooting mode works.<\/p><\/dd>\n<dt id=\"will%20other%20users%20be%20affected%20when%20i%20activate%20a%20profile%3F\"><h3>Will other users be affected when I activate a profile?<\/h3><\/dt>\n<dd><p>No. Profiles are per-session and only affect the user who activated them. Other users and site visitors will continue to see all normally active plugins.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20i%20deactivate%20extension%20profiles%3F\"><h3>What happens if I deactivate Extension Profiles?<\/h3><\/dt>\n<dd><p>The MU-plugin filter file is automatically removed, all active sessions are cleared, and your site returns to its normal configuration immediately.<\/p><\/dd>\n<dt id=\"what%20if%20a%20profile%20plugin%20causes%20a%20fatal%20error%20and%20locks%20me%20out%3F\"><h3>What if a profile plugin causes a fatal error and locks me out?<\/h3><\/dt>\n<dd><p>Extension Profiles includes an emergency disable mechanism. If a profile plugin causes errors:<\/p>\n\n<ol>\n<li><p><strong>Admin Bar Method<\/strong> - If you can still access the admin bar, click \"Extension Profiles\" &gt; \"Emergency: Force Disable\" (shown in red) to immediately disable the active profile.<\/p><\/li>\n<li><p><strong>URL Parameter Method<\/strong> - Add <code>?ep_disable=1<\/code> to any admin URL (e.g., <code>yoursite.com\/wp-admin\/?ep_disable=1<\/code>) to bypass profile filtering and disable your active profile. This works even if the admin bar doesn't load.<\/p><\/li>\n<\/ol>\n\n<p>Both methods immediately clear your session and return you to the normal plugin configuration without requiring file system access.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20multisite%3F\"><h3>Does it work with Multisite?<\/h3><\/dt>\n<dd><p>Yes. Extension Profiles hooks both <code>pre_option_active_plugins<\/code> and <code>pre_option_active_sitewide_plugins<\/code> to support network-activated plugins.<\/p><\/dd>\n<dt id=\"what%20about%20plugin%20dependencies%3F\"><h3>What about plugin dependencies?<\/h3><\/dt>\n<dd><p>Extension Profiles is aware of the WordPress 6.5+ \"Requires Plugins\" header. When you select a plugin that depends on another, the dependency is automatically included in the profile. You will also receive a warning if you try to deselect a required dependency.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Create and manage profiles.<\/li>\n<li>Admin bar profile switcher.<\/li>\n<li>Dependency resolution (WordPress 6.5+).<\/li>\n<li>Per-session filtering via MU-plugin.<\/li>\n<li>Plugins page active profile notice.<\/li>\n<li>Emergency disable mechanism (URL parameter + admin bar link) for profile lockout recovery.<\/li>\n<\/ul>","raw_excerpt":"Create named profiles to quickly switch between different sets of active plugins per user session.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bel.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/282000","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bel.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/bel.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/bel.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=282000"}],"author":[{"embeddable":true,"href":"https:\/\/bel.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/davexpression"}],"wp:attachment":[{"href":"https:\/\/bel.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=282000"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/bel.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=282000"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/bel.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=282000"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/bel.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=282000"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/bel.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=282000"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/bel.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=282000"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}