{"id":272346,"date":"2026-01-11T17:33:58","date_gmt":"2026-01-11T17:33:58","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/365i-environment-indicator\/"},"modified":"2026-02-18T09:41:05","modified_gmt":"2026-02-18T09:41:05","slug":"365i-environment-indicator","status":"publish","type":"plugin","link":"https:\/\/twd.wordpress.org\/plugins\/365i-environment-indicator\/","author":14476218,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.1.0","stable_tag":"1.1.0","tested":"6.9.4","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"365i Environment Indicator","header_author":"Mark McNeece","header_description":"Displays a prominent admin bar label for the current environment: DEV, STAGING, or LIVE.","assets_banners_color":"525c6a","last_updated":"2026-02-18 09:41:05","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/365i-environment-indicator\/","header_author_uri":"https:\/\/www.365i.co.uk\/author\/mark-mcneece\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":248,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.6":{"tag":"1.0.6","author":"bsolveit","date":"2026-01-11 17:33:47"},"1.0.7":{"tag":"1.0.7","author":"bsolveit","date":"2026-01-11 17:41:13"},"1.1.0":{"tag":"1.1.0","author":"bsolveit","date":"2026-02-18 09:41:05"}},"upgrade_notice":{"1.1.0":"<p>New feature: Browser tab prefix shows the environment in your browser tab title. Never confuse DEV and LIVE tabs again!<\/p>","1.0.7":"<p>Added Plugin URI for proper WordPress.org integration. &quot;View details&quot; link now works.<\/p>","1.0.6":"<p>WordPress.org compliance: Updated function prefix to 4+ characters, improved file upload validation, enhanced CSS escaping, and better input sanitization.<\/p>","1.0.5":"<p>WordPress.org compliance fixes: translators comment, wp_parse_url usage, sanitized file upload, reduced tags.<\/p>","1.0.4":"<p>Text domain updated to match plugin slug for WordPress.org compliance. No functional changes.<\/p>","1.0.3":"<p>Dashboard widget visual improvements with proper footer integration and removed negative margins.<\/p>","1.0.2":"<p>Dashboard widget settings button layout improvements and proper container fitting.<\/p>","1.0.1":"<p>Dashboard widget redesigned with professional UI, improved animations, and better mobile responsiveness. Settings form bug fix.<\/p>","1.0.0":"<p>Initial release with comprehensive environment detection, customization options, and visual enhancements.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3437163,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3437163,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3437163,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3437163,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3464129,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"landingPage\":\"\\\/wp-admin\\\/\",\"preferredVersions\":{\"php\":\"8.5\",\"wp\":\"latest\"},\"features\":{\"networking\":true},\"steps\":[{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"365i-environment-indicator\"},\"options\":{\"activate\":true}}]}"}},"all_blocks":[],"tagged_versions":["1.0.6","1.0.7","1.1.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3437163,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3437163,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3437163,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3437163,"resolution":"4","location":"assets","locale":""},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3437163,"resolution":"5","location":"assets","locale":""},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3437163,"resolution":"6","location":"assets","locale":""}},"screenshots":{"1":"Settings page showing DEV environment with live preview badge and manual detection mode","2":"Settings page with automatic detection enabled showing LIVE environment via subdomain detection","3":"Dashboard widget displaying environment status, detection method, site URL, and system versions","4":"Customization options with custom labels and custom colors enabled, plus color pickers","5":"Settings page showing STAGING environment with orange admin bar background coloring","6":"Visual enhancements toggles and role-based visibility settings with user role selection"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[1339,734,7318,23063,19979],"plugin_category":[],"plugin_contributors":[252386],"plugin_business_model":[],"class_list":["post-272346","plugin","type-plugin","status-publish","hentry","plugin_tags-admin-bar","plugin_tags-development","plugin_tags-environment","plugin_tags-production","plugin_tags-staging","plugin_contributors-bsolveit","plugin_committers-bsolveit"],"banners":{"banner":"https:\/\/ps.w.org\/365i-environment-indicator\/assets\/banner-772x250.png?rev=3437163","banner_2x":"https:\/\/ps.w.org\/365i-environment-indicator\/assets\/banner-1544x500.png?rev=3437163","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/365i-environment-indicator\/assets\/icon-128x128.png?rev=3437163","icon_2x":"https:\/\/ps.w.org\/365i-environment-indicator\/assets\/icon-256x256.png?rev=3437163","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/365i-environment-indicator\/assets\/screenshot-1.png?rev=3437163","caption":"Settings page showing DEV environment with live preview badge and manual detection mode"},{"src":"https:\/\/ps.w.org\/365i-environment-indicator\/assets\/screenshot-2.png?rev=3437163","caption":"Settings page with automatic detection enabled showing LIVE environment via subdomain detection"},{"src":"https:\/\/ps.w.org\/365i-environment-indicator\/assets\/screenshot-3.png?rev=3437163","caption":"Dashboard widget displaying environment status, detection method, site URL, and system versions"},{"src":"https:\/\/ps.w.org\/365i-environment-indicator\/assets\/screenshot-4.png?rev=3437163","caption":"Customization options with custom labels and custom colors enabled, plus color pickers"},{"src":"https:\/\/ps.w.org\/365i-environment-indicator\/assets\/screenshot-5.png?rev=3437163","caption":"Settings page showing STAGING environment with orange admin bar background coloring"},{"src":"https:\/\/ps.w.org\/365i-environment-indicator\/assets\/screenshot-6.png?rev=3437163","caption":"Visual enhancements toggles and role-based visibility settings with user role selection"}],"raw_content":"<!--section=description-->\n<p>Environment Indicator adds a prominent visual indicator to the WordPress admin bar showing the current site environment. This high-visibility indicator helps prevent accidental changes on production sites by making the environment instantly recognizable to logged-in users.<\/p>\n\n<p>Perfect for developers, agencies, and teams managing multiple environments (development, staging, production) across different sites.<\/p>\n\n<h4>Key Features<\/h4>\n\n<p><strong>Smart Environment Detection<\/strong>\n* Automatically detects environment using WordPress core constants (<code>WP_ENVIRONMENT_TYPE<\/code>)\n* Supports popular hosting providers: WP Engine, Pantheon, Kinsta, Flywheel\n* Legacy Bedrock constant support (<code>WP_ENV<\/code>)\n* Subdomain-based heuristics (dev.example.com, staging.example.com)\n* Manual override option for custom setups<\/p>\n\n<p><strong>Customization Options<\/strong>\n* <strong>Custom Colors<\/strong> - Match your branding or personal preferences for each environment\n* <strong>Custom Labels<\/strong> - Rename DEV\/STAGING\/LIVE to LOCAL, UAT, PRODUCTION, or anything you prefer\n* <strong>Role-Based Visibility<\/strong> - Control which user roles can see the indicator (great for client sites)<\/p>\n\n<p><strong>Visual Enhancements<\/strong>\n* Admin bar label (always visible)\n* Full admin bar background coloring (high-visibility option)\n* Browser tab prefix - instantly identify environments across multiple tabs\n* Top border in wp-admin screens\n* Admin footer watermark\n* Dashboard widget showing environment status and system information<\/p>\n\n<p><strong>Export\/Import<\/strong>\n* Export settings as JSON to deploy across multiple sites\n* Import settings from JSON file\n* Perfect for agencies managing client sites with consistent configurations<\/p>\n\n<p><strong>Multisite Compatible<\/strong>\n* Full support for WordPress multisite installations\n* Network-wide settings when network-activated\n* Per-site settings when activated on individual sites<\/p>\n\n<h4>How It Works<\/h4>\n\n<p>Detection runs in this order:<\/p>\n\n<ol>\n<li>WordPress core constant: <code>WP_ENVIRONMENT_TYPE<\/code><\/li>\n<li>Legacy constant: <code>WP_ENV<\/code><\/li>\n<li>Hosting provider constants (WP Engine, Pantheon, Kinsta, Flywheel)<\/li>\n<li>Subdomain patterns (dev, staging, test, qa)<\/li>\n<li>Default to LIVE if no detection<\/li>\n<\/ol>\n\n<p>You can always override automatic detection and manually select the environment.<\/p>\n\n<h4>Perfect For<\/h4>\n\n<ul>\n<li><strong>Developers<\/strong> - Never accidentally deploy to the wrong environment<\/li>\n<li><strong>Agencies<\/strong> - Manage multiple client sites with consistent environment indicators<\/li>\n<li><strong>Teams<\/strong> - Everyone instantly knows which environment they're working in<\/li>\n<li><strong>Managed Hosting<\/strong> - Works out-of-the-box with WP Engine, Pantheon, Kinsta, and Flywheel<\/li>\n<\/ul>\n\n<h4>Zero Impact on Visitors<\/h4>\n\n<p>The indicator only displays for logged-in users. Public visitors see no performance impact or visual changes.<\/p>\n\n<h3>Development<\/h3>\n\n<p>Development of this plugin happens on GitHub: https:\/\/github.com\/BSolveIT\/environment-indicator<\/p>\n\n<p>Bug reports and feature requests are welcome!<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>environment-indicator<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin through the Plugins menu in WordPress<\/li>\n<li>Visit Settings \u2192 Environment Indicator to customize (optional)<\/li>\n<\/ol>\n\n<p>The indicator will appear immediately in your admin bar using automatic detection.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20affect%20public%20visitors%3F\"><h3>Does this affect public visitors?<\/h3><\/dt>\n<dd><p>No. The indicator only displays for logged-in users who can see the WordPress admin bar. There is zero impact on public visitors.<\/p><\/dd>\n<dt id=\"can%20i%20customize%20the%20colors%3F\"><h3>Can I customize the colors?<\/h3><\/dt>\n<dd><p>Yes! Enable custom colors in Settings \u2192 Environment Indicator and choose any color for DEV, STAGING, and LIVE environments.<\/p><\/dd>\n<dt id=\"can%20i%20change%20the%20labels%20from%20dev%2Fstaging%2Flive%3F\"><h3>Can I change the labels from DEV\/STAGING\/LIVE?<\/h3><\/dt>\n<dd><p>Absolutely. Enable custom labels and rename them to anything you want: LOCAL, UAT, PRODUCTION, or company-specific terms.<\/p><\/dd>\n<dt id=\"does%20it%20work%20on%20multisite%3F\"><h3>Does it work on multisite?<\/h3><\/dt>\n<dd><p>Yes. When network-activated, settings are managed network-wide from Network Admin \u2192 Settings \u2192 Environment Indicator.<\/p><\/dd>\n<dt id=\"which%20hosting%20providers%20are%20supported%3F\"><h3>Which hosting providers are supported?<\/h3><\/dt>\n<dd><p>Environment Indicator automatically detects environments on:\n* WP Engine (WPE_ENVIRONMENT)\n* Pantheon (PANTHEON_ENVIRONMENT)\n* Kinsta (KINSTA_ENV_TYPE)\n* Flywheel (FLYWHEEL_CONFIG_DIR)\n* Any host using WP_ENVIRONMENT_TYPE or WP_ENV constants<\/p><\/dd>\n<dt id=\"can%20i%20restrict%20who%20sees%20the%20indicator%3F\"><h3>Can I restrict who sees the indicator?<\/h3><\/dt>\n<dd><p>Yes. Enable role-based visibility and select which user roles can see the environment indicator. This is useful for client sites where you don't want clients to see the indicator.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20block%20actions%20or%20restrict%20editing%3F\"><h3>Does this plugin block actions or restrict editing?<\/h3><\/dt>\n<dd><p>No. Environment Indicator is visual only. It does not restrict editing, block actions, or change how WordPress behaves. It simply provides a clear visual reminder of which environment you're working in.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20no%20environment%20is%20detected%3F\"><h3>What happens if no environment is detected?<\/h3><\/dt>\n<dd><p>If no environment constants or recognized subdomain patterns are found, the site defaults to LIVE. You can override this using manual mode in the settings.<\/p><\/dd>\n<dt id=\"can%20i%20export%20settings%20to%20use%20on%20other%20sites%3F\"><h3>Can I export settings to use on other sites?<\/h3><\/dt>\n<dd><p>Yes! Use the Export\/Import feature to download your settings as JSON and import them on other sites. Perfect for agencies deploying the same configuration across client sites.<\/p><\/dd>\n<dt id=\"can%20i%20see%20the%20environment%20in%20my%20browser%20tabs%3F\"><h3>Can I see the environment in my browser tabs?<\/h3><\/dt>\n<dd><p>Yes! Enable \"Browser Tab Prefix\" in Visual Enhancements and your page titles will show the environment, e.g. [DEV] Dashboard or [LIVE] Edit Post. This makes it easy to identify environments when you have multiple tabs open.<\/p><\/dd>\n<dt id=\"how%20do%20i%20set%20the%20environment%20constant%3F\"><h3>How do I set the environment constant?<\/h3><\/dt>\n<dd><p>Add one of these lines to your <code>wp-config.php<\/code> file:<\/p>\n\n<p>For WordPress 5.5+:\n    define( 'WP_ENVIRONMENT_TYPE', 'development' ); \/\/ or 'staging' or 'production'<\/p>\n\n<p>For legacy Bedrock:\n    define( 'WP_ENV', 'development' ); \/\/ or 'staging' or 'production'<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New: Browser tab prefix - prepends environment label to page titles (e.g. [DEV] Dashboard)<\/li>\n<li>New: Works in both wp-admin and front-end for logged-in users<\/li>\n<li>Enhancement: Easily identify which environment each browser tab belongs to<\/li>\n<\/ul>\n\n<h4>1.0.7<\/h4>\n\n<ul>\n<li>Enhancement: Added Plugin URI header for WordPress.org integration<\/li>\n<li>Enhancement: \"View details\" link now works in Plugins admin screen<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>Fix: Updated function prefix from 'ei_' to 'i365ei_' for WordPress.org compliance (4+ character requirement)<\/li>\n<li>Fix: Improved $_FILES sanitization with proper file type validation using wp_check_filetype()<\/li>\n<li>Fix: Updated filter_input to use proper sanitization with direct $_POST handling<\/li>\n<li>Fix: Added explicit CSS color escaping for inline styles with hex validation<\/li>\n<li>Security: Enhanced input validation throughout settings handling<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Fix: Added translators comment for sprintf() placeholder in detection.php<\/li>\n<li>Fix: Replaced parse_url() with wp_parse_url() in dashboard-widget.php for consistency<\/li>\n<li>Fix: Sanitized $_FILES input in settings.php for WordPress.org compliance<\/li>\n<li>Fix: Reduced tags to 5 (WordPress.org limit)<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Fix: Updated text domain to match plugin slug (365i-environment-indicator) for WordPress.org compliance<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Fix: Removed negative margins from dashboard widget to improve integration<\/li>\n<li>Enhancement: Widget footer now properly contained within widget boundaries<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Fix: Dashboard widget settings button layout and sizing improvements<\/li>\n<li>Fix: Button now properly fits within widget footer container<\/li>\n<li>Enhancement: Improved icon placement with space-between layout<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Enhancement: Redesigned dashboard widget with professional, modern UI<\/li>\n<li>Enhancement: Added gradient header with rainbow accent bar<\/li>\n<li>Enhancement: Color-coded card icons with gradient backgrounds (blue, green, purple, orange)<\/li>\n<li>Enhancement: Smooth hover animations and micro-interactions<\/li>\n<li>Enhancement: Improved responsive design for mobile devices<\/li>\n<li>Enhancement: Better typography with proper font weights and spacing<\/li>\n<li>Enhancement: Enhanced settings button with animated arrow on hover<\/li>\n<li>Fix: Separated import\/export form from main settings form to prevent save button triggering file upload prompt<\/li>\n<li>Fix: Improved visual hierarchy and information architecture<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Automatic environment detection (WordPress core, WP Engine, Pantheon, Kinsta, Flywheel)<\/li>\n<li>Custom colors for each environment<\/li>\n<li>Custom labels for each environment<\/li>\n<li>Role-based visibility controls<\/li>\n<li>Dashboard widget with environment status<\/li>\n<li>Export\/Import settings functionality<\/li>\n<li>Visual enhancements (admin bar background, top border, footer watermark)<\/li>\n<li>Full multisite support<\/li>\n<li>Subdomain-based detection heuristics<\/li>\n<li>Manual environment override<\/li>\n<\/ul>","raw_excerpt":"Displays a color-coded DEV, STAGING, or LIVE indicator in the admin bar to prevent accidental changes on production sites.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/272346","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=272346"}],"author":[{"embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/bsolveit"}],"wp:attachment":[{"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=272346"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=272346"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=272346"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=272346"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=272346"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=272346"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}