=== MainWP Dashboard: WordPress Management without the SaaS  ===
Contributors: mainwp
Tags: manage multiple WordPress sites, WordPress maintenance, update, backups, security
Author: mainwp
Author URI: https://mainwp.com
Plugin URI: https://mainwp.com
Requires at least: 6.2
Tested up to: 6.9
Requires PHP: 7.4
Stable tag: 5.4.1
License: GPLv3 or later
License URI: https://www.gnu.org/licenses/gpl-3.0.html

Streamline your WordPress management with a powerful, self-hosted dashboard for updates, backups, security, cost tracking, and client management.

== Description ==

Managing multiple WordPress sites can be a time-consuming and frustrating task. The [MainWP Dashboard](https://mainwp.com/) empowers you to take back your time by allowing you to efficiently manage and secure all your WordPress sites from your own centralized Dashboard.

Designed for agencies, freelancers, and web professionals, MainWP offers comprehensive control with a privacy-first approach. Harness the power of MainWP for updates, backups, and more, ensuring your sites are always running smoothly and securely.

**Features for Advanced WordPress Management:**

* Centralized Updates: Keep all your WordPress sites up-to-date with single-click updates.
* Secure Backups: Implement scheduled or on-demand backups for complete site security.
* Manage both your sites and your clients with the Client Management module
* The built-in Cost Tracker allows you to easily keep track of client costs
* Private and Self-hosted: Your data stays yours, with full privacy and control.

**Stop the Software as a Service (SaaS) Treadmill:**

Built on WordPress's core principles, the MainWP Dashboard plugin is uniquely positioned as the go-to solution for WordPress management. It combines ease of use with robust features and unmatched privacy.

The MainWP plugins are open-source and privacy-focused and come with their own privacy policies to ensure that the plugins do not collect any personally identifiable information (PII).

The MainWP Dashboard is extendable, allowing third-party developers to hook into it. It also provides support for CLI and has its own REST API, so anything you need or want to run your business your way can be developed for your MainWP Dashboard.

All of this makes MainWP the best non-SaaS alternative to ManageWP, InfiniteWP, WPRemote, and WP Umbrella.

**Getting Started with MainWP:**

MainWP is designed to be user-friendly and intuitive, even for those new to WordPress management plugins. With a straightforward setup process and a clean, organized dashboard, you'll be able to start managing your WordPress sites efficiently in no time.

* Setting up MainWP is straightforward—install the dashboard on a private WordPress site, add the MainWP Child plugin to your other WordPress sites, and take control.

**Your Guarantee of Privacy**

The MainWP plugins come with their own [privacy policies](https://mainwp.com/mainwp-plugin-privacy-policy/) to ensure that the plugins do not collect any personally identifiable information (PII).

**How Is MainWP Free? What’s the Catch? How Will You Continue to Pay Development Costs?**

MainWP Dashboard is [100% FREE](https://mainwp.com/mainwp-free-features/) and always will be. Whether you manage 5 sites or 5,000, the core dashboard remains free.

We make money by offering [MainWP Pro](https://mainwp.com/signup/), which provides access to a wide range of premium add-ons. These premium add-ons are organized into two clear categories:

- **Integrations:**
  Add-ons in this category enable seamless connections with popular third-party services and plugins, allowing you to integrate the tools you already use directly into your MainWP Dashboard.

- **Extensions:**
  These are custom-built, standalone add-ons developed exclusively for the MainWP Dashboard, designed to add unique and specialized functionality to enhance your WordPress management experience.

For more details, visit our [Premium Add-ons](https://mainwp.com/mainwp-add-ons/) page and see how our free and pro features compare at [Free vs. Pro: Know the Difference](https://mainwp.com/free-vs-pro/).

**Experience the MainWP Difference**

Are you ready to take the hassle out of managing your WordPress sites? MainWP makes it easy to keep everything updated, secure, and running just the way you need it. With over 20k site owners trusting MainWP with over 700k WordPress sites, every day, you'll quickly see how much simpler website management can be. Try it today and feel the difference for yourself!

== Installation ==

= Note: MainWP is not tested on or designed for multisite installs. =

However, we have user reports that most functions work correctly, but support will be limited. We DO NOT recommend installing the MainWP Dashboard plugin on a multisite install.

1. We HIGHLY recommend a NEW WordPress install for your MainWP Dashboard.

Using a new WordPress install will help reduce Plugin Conflicts and other issues caused by trying to run your MainWP Dashboard from an active site.

Most hosting companies provide free subdomains ("demo.yourdomain.com"), and we recommend creating one if you do not have a specific dedicated domain to run your MainWP Dashboard. If you are not sure how to set up a subdomain, contact your hosting company's support.

You can even install your MainWP Dashboard on a WordPress site located on your local computer using WAMP or any other setup that allows you to run [WordPress locally](https://make.wordpress.org/core/handbook/tutorials/installing-a-local-server/).

2. Once you have set up the separate WordPress website, install the MainWP Dashboard plugin following your normal installation procedure, either the automatic process by searching MainWP or by uploading the MainWP plugin to the '/wp-content/plugins/' directory.

3. Once installed then Activate the plugin through the Plugins menu in WordPress.

4. Add your first Child Site to the MainWP Dashboard - [Documentation](https://mainwp.com/kb/set-up-the-mainwp-plugin/add-site-to-your-dashboard/)

5. Set your MainWP Settings - [Documentation](https://mainwp.com/kb/set-up-the-mainwp-plugin/mainwp-dashboard-settings/)

== Frequently Asked Questions ==

= What sets MainWP apart from other WordPress management platforms like ManageWP or InfiniteWP? =
MainWP is a self-hosted, open-source WordPress management plugin that prioritizes user privacy and customization.

Unlike SaaS (Software as a Service) platforms like ManageWP, WPUmbrella, or WPRemote, MainWP gives you complete control over your data and allows for extensive customization through its open-source architecture.

= Can MainWP handle bulk updates for WordPress core, plugins, and themes? =
Yes, MainWP makes it easy to perform bulk updates for WordPress core, plugins, and themes across all your managed sites. With just a few clicks, you can ensure all your sites are running the latest versions, saving you valuable time and effort.

= How does MainWP help with client management for WordPress agencies and freelancers? =
MainWP offers a robust client management system that allows you to organize sites by client, assign tags, and generate customizable client reports. This streamlines your workflow and helps you provide better service to your clients by keeping all their site information organized and easily accessible.

= Does MainWP offer any features for tracking costs associated with managing WordPress sites? =
Yes, MainWP has a built-in Cost Tracker. This feature allows you to:
* Record and categorize expenses for each site
* Set up recurring costs
* Generate detailed cost reports
* Gain insights into your expenditure distribution
* Track payments received and upcoming renewals

= What security features does MainWP offer to protect my WordPress sites? =
MainWP prioritizes security by providing features like real-time security monitoring, malware scanning, and vulnerability detection. The plugin also integrates with popular security plugins.

= Can I use MainWP to manage WordPress sites hosted on different servers or hosting providers? =
Yes, MainWP is designed to work with WordPress sites hosted on any server or hosting provider.

= How does MainWP handle WordPress site backups? =
MainWP offers multiple backup options, including built-in backup solutions for popular hosting providers and integrations with some of the most installed backup plugins.

= How do you pronounce MainWP? =
MainWP is a unique name that we created for our company, so it's understandable if you're unsure about how to pronounce it. Here's the easiest way to remember:

**Main + WP = MainWP**

Think of it as the word "Main" followed by the letters "WP" (pronounced as "double-u pee"). In phonetic notation, it would look like this: /ˈmeɪn ˈdʌbəl juː ˈpiː/.

*But don't worry if you pronounce it differently – we answer to almost anything, including WP Main and WPMain!*

= I have an idea for MainWP; how do I let you know? =
Please follow the steps outlined in the [MainWP Feature Requests](https://feedback.mainwp.com/) so you can add your idea to the MainWP Community to be voted on.

= I have more questions. Do you have any other information? =
Yes, we have a quick FAQ with many more questions and answers [here](https://mainwp.com/preinstall-faq/).

== Screenshots ==

1. Sites - Overview
2. Sites - Manage Sites
3. Sites - Add a New Site
4. Sites - Manage Plugins
5. Sites - Manage Posts
6. Sites - Manage Updates
7. Clients - Manage Clients
8. Cost Tracker - Cost Summary
9. Cost Tracker - Manage Costs
10. Dashboard Insights

== Changelog ==

= 5.4.1 - Maintenance Release - 12-10-2025 =

* Fixed: Resolved an issue where the OpenSSL Key encryption information banner was incorrectly displayed to all MainWP Dashboard administrators.
* Fixed: Addressed a problem that caused delayed Downtime notifications from the Monitoring system on specific hosting setups.
* Added: Implemented `AND` logic for filtering Tags in the "Manage Sites" list, allowing more precise filtering of site groups.
* Updated: Improved output-escaping compliance throughout the plugin to meet WordPress coding standards.
* Updated: Improved the logic used to detect when the `WP REST API` is disabled on the Dashboard site, providing more reliable behavior across different configurations.

= 5.4.0.23 - Maintenance Release - 10-7-2025 =

* Fixed: Corrected the flag icon displayed for the Catalan (ca) locale. [(#839)](https://github.com/mainwp/mainwp/issues/839)
* Updated: Implemented small improvements to enhance the reliability of automatic updates across different server environments.
* Updated: Enabled REST API v2 requests over HTTP protocol on localhost setups to facilitate local development and testing.
* Updated: Standardized translation and escaping functions to ensure more reliable and consistent text formatting throughout the Dashboard ([PR838](https://github.com/mainwp/mainwp/pull/481)) - thanks [DAnn2012](https://github.com/DAnn2012)

= 5.4.0.22 - Maintenance Release - 9-23-2025 =

* Fixed: An issue where site tags were duplicated in the "Manage Sites" table display.
* Fixed: Multiple localization issues to improve translation accuracy and consistency across different languages. ([PR832, PR833, PR834](https://github.com/mainwp/mainwp/pulls)) - thanks [DAnn2012](https://github.com/DAnn2012)
* Fixed: An issue with generating site screenshots that occurred under specific server configurations.
* Updated: Team Control support for the Cost Tracker module to enhance permission management and user access controls.
* Updated: Team Control support for the Insights module to improve role-based access and data visibility controls.
* Updated: Error messaging in REST API v2 to provide clearer feedback when connections are disallowed over HTTP protocol for security reasons.
* Dev: SSL certificate verification control in the REST API v2 availability check by introducing an `sslverify` option in the HTTP arguments of `check_rest_api_enabled()` to provide more flexible SSL handling options. ([PR836](https://github.com/mainwp/mainwp/pull/836)) - thanks [Alexis](https://github.com/sixela)
* Removed: Deprecated HTTP check notification code that was no longer in use to clean up the codebase and improve performance.

= 5.4.0.21 - Maintenance Release - 8-26-2025 =

* Fixed: Resolved database table creation issues for `wp_mainwp_wp` and `wp_mainwp_api_keys` on installations running PHP 8.4. [(#827)](https://github.com/mainwp/mainwp/issues/827)
* Fixed: Eliminated multiple "Undefined array key" PHP warnings that occurred on fresh WordPress installations running PHP 8.4.
* Updated: Changed mShot API base URL from `s0.wordpress.com` to s0.wp.com` to eliminate unnecessary redirections and improve screenshot generation performance.

= 5.4.0.20 - Maintenance Release - 8-19-2025 =

* Fixed: Currency display now defaults to USD to prevent empty currency formatting issues in financial reports and cost tracking features.
* Fixed: PHP deprecation warning on PHP 8.4+ installations by updating the database connection ping method to ensure reliable connectivity checks across all PHP versions.
* Fixed: REST API v2 responses now properly handle empty or invalid data objects to prevent API errors and improve third-party integration reliability.

= 5.4.0.19 - Maintenance Release - 8-12-2025 =

* Fixed: Monthly totals calculation for single-site licenses in Cost Tracker by scaling costs based on the number of associated sites. [(#819)](https://github.com/mainwp/mainwp/issues/819)
* Dev: New hooks `mainwp_get_sql_websites` and `mainwp_get_sql_websites_by_params` to customize website query parameters, enabling greater extensibility for integrations.

= 5.4.0.18 - Maintenance Release - 8-5-2025 =

* Fixed: Issues with sorting and filtering data by PHP version in cases where version numbers contain text strings. [(#815)](https://github.com/mainwp/mainwp/issues/815)
* Added: Support for custom plugin and theme icons that may be set by third-party developers.
* Added: Element ID for the "Log Out" menu item in the user settings menu to improve accessibility and targeting.
* Updated: Element ID for the "Add New" and "Import Sites" menu items to prevent duplicate ID conflicts.
* Dev: Refined REST API responses to properly support the `selected_sites` field when creating or updating clients.
* Dev: Updated `selected_sites` parameter behavior to allow assignment of multiple sites to a single client.
* Dev: Added `mainwp_before_save_cached_icons` filter hook to allow developers to manipulate cached plugin and theme icons.

= 5.4.0.17 - Maintenance Release - 7-29-2025 =

* Fixed: Retrieval of websites by tag to resolve issues with empty fields in MainWP REST API responses.

= 5.4.0.16 - Maintenance Release - 7-15-2025 =

* Fixed: Corrected the `[uptime.status]` token in Uptime Notification email subjects to display the accurate monitor status.
* Fixed: Updated the Event time info in the Uptime Monitor email to display in the user's configured timezone instead of defaulting to UTC +0.

= 5.4.0.15 - Maintenance Release - 7-8-2025 =

* Fixed: Resolved a sorting issue in the "Manage Sites" table that could cause sites to appear in incorrect positions. [(#808)](https://github.com/mainwp/mainwp/issues/808)
* Fixed: Corrected tooltip text for the Regression Testing add-on to improve clarity.
* Fixed: Resolved an issue where the "Save Selection" function for tags would only preserve sites visible in the current search or filter results. [(#810)](https://github.com/mainwp/mainwp/issues/810)

= 5.4.0.14 - Maintenance Release - 6-24-2025 =

* Fixed: Corrected permissions logic to ensure users without "Manage Extensions" permission can still access extension features they are authorized to use. [(#801)](https://github.com/mainwp/mainwp/issues/801)
* Fixed: Resolved an issue where ignored plugin updates incorrectly appeared in the "Ignored Themes" list after being unignored.
* Fixed: Corrected the ignore functionality to properly handle version-specific ignores, ensuring updates ignored for one version only don't automatically ignore subsequent versions. [(#802)](https://github.com/mainwp/mainwp/issues/802)
* Fixed: Resolved an issue where backup deletions through the Kinsta API integration were not working properly.

= 5.4.0.13 - Maintenance Release - 6-17-2025 =

* Fixed: Resolved DataTables warning occurring on the "Sites Changes" widget table on the "Overview" page for certain configurations.
* Fixed: Resolved issue where adding a site would fail for Team Control roles lacking "Manage Clients" and/or "Bulk Install & Activate Extensions" permissions. [(#799)](https://github.com/mainwp/mainwp/issues/799)
* Fixed: Corrected update counter displaying updates from disconnected sites while those updates weren't shown in the actual updates list. [(#798)](https://github.com/mainwp/mainwp/issues/798)
* Fixed: Prevented Uptime Monitor notifications from being incorrectly sent immediately after adding a new site on the first heartbeat.
* Updated: Enhanced updates progress indicator icon to support upcoming regression testing add-on changes.
* Updated: Implemented improvements for better PHP 8.4 compatibility to ensure smooth operation with newer PHP versions.
* Updated: Modified information notice regarding end of support for deprecated PHP versions.

= 5.4.0.12 - Maintenance Release - 6-10-2025 =

* Security: Fixed multiple XSS vulnerabilities in administrator areas including Tags Notes, Client Notes, Create Category, Contact Name, and Cost Tracker Notes fields. All vulnerabilities required administrator privileges to exploit. Update to version 5.4.0.12 required.

= 5.4.0.11 - Maintenance Release - 6-3-2025 =

* Fixed: Resolved an issue that could prevent staging sites from being created successfully by improving data handling in the cloning process.

= 5.4.0.10 - Maintenance Release - 5-20-2025 =

* Fixed: Corrected a typo in the Force IPv4 option tooltip for improved clarity. [(#787)](https://github.com/mainwp/mainwp/issues/787)
* Fixed: Changed incorrect "Theme advanced automatic updates" option label to "Translation advanced automatic updates" and updated the corresponding tooltip to accurately reflect its function.

= 5.4.0.9 - Maintenance Release - 5-13-2025 =

* Fixed: Adjusted phone number and email link escaping from URL to attribute context for improved HTML output. [(#781)](https://github.com/mainwp/mainwp/issues/781)
* Fixed: Refined uptime monitoring notification sending to include site-specific context.
* Fixed: Updated API backup key handling to clear child website options more precisely. [(#784)](https://github.com/mainwp/mainwp/issues/784)
* Added: More detailed warning messages for email template operation failures, providing clearer feedback on issues such as permission problems or invalid destinations.
* Updated: Improved incident statistics for uptime monitoring to more accurately count incidents based on importance and monitor type. [(#782)](https://github.com/mainwp/mainwp/issues/782)
* Updated: Enhanced logging behavior for uptime monitoring notifications with added contextual information.

= 5.4.0.8 - Maintenance Release - 5-6-2025 =

* Fixed: Incorrect type property for the Vulnerability Checker which made it appear as a Pro add-on.
* Fixed: Missing error message tooltip from X icon that shows when translation update fails. [(#773)](https://github.com/mainwp/mainwp/issues/773)
* Fixed: Issue with incorrect menu item being selected when on the Clone add-on page.
* Fixed: Specific UI elements did not respect Team control permissions, causing client information to be exposed to users with permission to Manage clients. [(#776)](https://github.com/mainwp/mainwp/issues/776)
* Updated: Modal behavior to prevent auto-closing when at least one translation update fails. [(#773)](https://github.com/mainwp/mainwp/issues/773)
* Updated: Error message that displays when calls fail due to invalid authentication parameters.
* Updated: Database Updater table background in Dark theme for improved visibility. [(#779)](https://github.com/mainwp/mainwp/issues/779)

= 5.4.0.7 - Maintenance Release - 4-29-2025 =

* Fixed: Corrected the display of abandoned plugins and themes to ensure counts and details appear consistently across all views, including per site and per tag views. [(#768)](https://github.com/mainwp/mainwp/issues/768)
* Fixed: Improved bulk dismiss button handling to properly differentiate between widget and non-widget contexts, resulting in more consistent user interaction.

= 5.4.0.6 - Maintenance Release - 4-22-2025 =

* Fixed: Resolved issue with malformed object value displayed in the Sites Changes table after running WordPress Core updates.
* Fixed: Eliminated unintended site ID value output in the feedback message after performing WordPress Core updates. [(#765)](https://github.com/mainwp/mainwp/issues/765)
* Fixed: Addressed problem with displaying WordPress Core update information after running the update. [(#764)](https://github.com/mainwp/mainwp/issues/764)
* Fixed: Corrected dropdown icon behavior to properly adjust state after expanding or collapsing rows in "Manage Plugins" and "Manage Themes" pages.
* Fixed: Rectified incorrect event timestamp displayed in the Sites Changes table caused by timezone differences.
* Added: Action to dismiss multiple events in bulk within the "Sites Changes" widget for improved workflow efficiency. [(#753)](https://github.com/mainwp/mainwp/issues/753)
* Added: Extension information for new third-party extension [(Independent Analytics for MainWP)](https://wordpress.org/plugins/independent-analytics-for-mainwp/).
* Added: "Database Updates" option to the dropdown menu on individual site Updates page for more comprehensive site maintenance.
* Updated: Improved default email subject line for messages sent by MainWP Dashboard.
* Updated: Prevented autofill functionality in the Search field within the "Sites Changes" widget for better user experience.

= 5.4.0.5 - Maintenance Release - 4-15-2025 =

* Fixed: When the MainWP Dashboard plugin is deactivated, the scheduled events do not get removed from WP Cron [(#750)](https://github.com/mainwp/mainwp/issues/750).
* Fixed: When a "Test Connection" is performed for a Child Site that's already added to the Dashboard, it will always test the non-www URL, even if the site is set to use www [(#751)](https://github.com/mainwp/mainwp/issues/751).
* Fixed: Child Site's Jetpack Protect's page always resets the widget's size and position upon reload [(#747)](https://github.com/mainwp/mainwp/issues/747).
* Fixed: Incorrect version number displayed for Gravity Forms plugin after update in the per Tag view on the "Updates" page.
* Fixed: In the "Manage Sites" table, incorrect flag was displayed for languages that have suffix "forma" or "informal" [(#752)](https://github.com/mainwp/mainwp/issues/752).
* Fixed: Site Changes filter "Users" filter showing only some users.
* Fixed: Problem with sending Uptime Monitoring notifications affecting certain setups.
* Added: Vertical scroll functionality to the Site mode page navigation element.
* Added: Method selection for the "Check HTTP status after updates" feature to avoid potential blocking by server-side security layers causing status code 0.
* Updated: "Add to Cost Tracker" button label to include item name.
* Updated: Moved the 3rd party plugin notices to correct location in MainWP UI for better visibility [(#749)](https://github.com/mainwp/mainwp/issues/749).
* Updated: Performance improvements throughout the plugin.
* Dev: Added the `$clients` as the 6th parameter to the `mainwp_getdbsites` filter so extensions can get sites info by clients selection.
* Dev: Excluded the Site Changes count information from REST API endpoints by default, while leaving it as option to optimize the query performance.

= 5.4.0.4 - Maintenance Release - 4-3-2025 =

* Added: Validation to check if posix_getpwuid() and posix_getuid() PHP functions are callable before invoking them.
* Added: mainwp_connect_http_request_headers hook to support custom request headers for specific hosts.
* Added: Support for the [uptime.status] token in Uptime Monitoring emails.
* Fixed: Incorrect default tab selection on the Site > Updates page [(#744)](https://github.com/mainwp/mainwp/issues/744).
* Fixed: Inaccurate values returned by Uptime Monitoring tokens.
* Fixed: Issue with the Bulk Reconnect Sites action [(#745)](https://github.com/mainwp/mainwp/issues/745).
* Fixed: Problem with sending Uptime Monitoring notifications affecting certain setups [(#748)](https://github.com/mainwp/mainwp/issues/748).
* Fixed: Overlapping issue between dropdown menus and button elements on the Updates page.
* Updated: Timestamp formatting in the Sites Changes table to display local time.
* Updated: Removed unnecessary tooltip element for a cleaner UI.

= 5.4.0.3 - 3-24-2025 =

* Fixed: An issue with the Up HTTP Codes option saving when the "Use Global Settings" is used with specific codes
* Fixed: Mismatch in site Uptime Check frequency and Last and Next check timestamps
* Fixed: An issue with missing the Gravity Forms plugin name in the list of available updates
* Fixed: An issue where a previously updated Gravity Forms plugin remains in the list of available updates
* Fixed: Missing flag icon for sites set to the Albanian language
* Fixed: Issue with displaying the correct Site Health Threshold and Verify Certificate option values in site settings
* Fixed: Usability issue where the Favorites extension installed plugins on suspended sites when selected by tag or client
* Fixed: Incorrect monitor status shown in the Sites Table column for new monitors before the first check
* Fixed: Theme update problems caused by a bug in the selection system on the site updates page
* Fixed: Conflict with the Git Updater plugin
* Added: Ability to dismiss Site Changes in bulk
* Added: Confirmation requirement when dismissing Site Changes
* Added: Info about ignored updates in the available updates label tooltip in the Manage Sites table
* Updated: Improved error handling for failed file uploads when uploading site, client, or cost icons
* Updated: Removed the "All" option from the page length menu in the Site Changes table
* Updated: Default column selection for the Manage Clients table on new installs
* Updated: Set a maximum column width for the Object column in the Site Changes table
* Updated: Optimized data loading for the "Non-MainWP Changes" REST API endpoint

= 5.4.0.2 - 3-12-2025 =

* Fixed: Inaccurate display of data in the Sites Changes widget on the Client Overview page.
* Fixed: Inaccurate data output for the non-mainwp-changes REST API endpoint.
* Fixed: Missing dropdown menu for selecting Production or Staging sites on the Updates page.
* Fixed: Sites Changes table widget showing only current-day logs.
* Fixed: Incorrect flag displayed for the Estonian language.
* Fixed: Incorrect sorting by Date Added in the Clients table.
* Fixed: Typo in the SSL Protocol check in the Site Hardening feature.
* Fixed: Missing "Save Selection" button in the Manage Tags screen.
* Fixed: Incorrect icon representing that a Child Site is not indexable.
* Fixed: Typo in the Site Health feature label ([PR735](https://github.com/mainwp/mainwp/pull/735) - thanks [Isaac Russell](https://github.com/sisaacrussell)
* Added: Action to go back to the start screen in the Quick Help modal.
* Added: MainWP 101 YouTube video embeds to the Quick Help.
* Updated: Uptime ratio calculation and Uptime Incident counting logic for better accuracy.
* Updated: Site Hardening Inactive themes check now allows one default WordPress theme before raising an alert.
* Updated: Removed the selection feature from the Sites Changes table.
* Updated: Restored the "Dismiss item" action to the Sites Changes widget.
* Updated: Quick Help feature updated for better control over allowed third-party services.
* Updated: Verbiage improvements in the dismiss site changes items process.
* Updated: Replaced the "Close" button with a close icon in the Client Notes modal.
* Updated: Verbiage refinements in the Select Layout and Load Layout modals.
* Updated: Centered the icon in the Dashboard Update Available label.
* Updated: Improved the Site Changes search system.

= 5.4.0.1 - 3-6-2025 =

* Fixed: Issue with double success icons appearing in the Updates process
* Fixed: Detection of inactive themes in the Site Hardening process
* Fixed: Site Changes widget displaying data
* Fixed: Multiple PHP warnings
* Fixed: Updates modal not auto-closing after all updates were successfully processed
* Fixed: Gridstack resize handle overlapping the scrollbar in widgets
* Added: Third-party permissions removal notice in the Quick Help modal
* Added: Third-party permissions removal button in the Tools page
* Updated: User menu button now displays a generic icon if avatar usage is disabled in WP settings
* Updated: Site Changes widget now shows non-MainWP changes by default
* Updated: Removed the retired "Add to Favorites" link

= 5.4 - 3-5-2025 =

* Fixed: Uptime monitor issue where per-site uptime codes were not being respected.
* Fixed: An issue where the URL value was being stripped in the "Connect Multiple Sites" feature.
* Fixed: Minor performance issues on certain setups.
* Fixed: Minor inaccuracies in uptime monitoring statistics.
* Fixed: Sorting issue in the Manage Sites table when sorting by the "Last Sync" column.
* Fixed: Issue with displaying the "Install to Selected Sites" button in Active Themes view.
* Fixed: Browser console warnings caused by multiple elements with the same ID.
* Fixed: Dropdown icon visibility in Minimalistic and WP Admin themes.
* Fixed: Sorting issues in Manage Sites table related to Last Backup data.
* Fixed: Placement of the Abandoned Plugins and Themes menu items.
* Fixed: An undefined variable PHP warning on the Ignored WP Core Updates page.
* Fixed: Issue where the Site Health column was not being removed from Manage Sites and Uptime Monitoring tables when disabled.
* Fixed: Regression issues with the Monitoring page conditions.
* Added: Added a Quick Help feature, including new primary menu items and easy access to the AI support agent or Guided Tours.
* Added: Users can now save multiple widget layouts on all widgetized pages and switch between them easily.
* Added: Introduced an Import Clients feature for adding multiple clients at once.
* Added: New column combining Site Name, URL, and "Go to WP Admin" action.
* Added: New column displaying the child site language as a matching flag.
* Added: New column warning if a child site is not indexable by search engines.
* Added: Introduced a security column in the Manage Sites table.
* Added: Added email notifications when sites come back online.
* Added: Added status code information to the Uptime Monitoring widget.
* Added: Ability to set a primary backup system per site.
* Added: Option to select which data to include in the sync process.
* Added: Batch processing settings to control how many sites are processed at once.
* Added: Option to hide details from the Site Hardening widget.
* Added: Updated Site Hardening checks, removing outdated ones and introducing new ones.
* Added: Improved WP Debug Mode status check logic.
* Added: Support for the new Regression Testing extension
* Added: Support for the Advanced Access Manager for MainWP integration.
* Added: support for automatic translation updates.
* Added: Warning about future discontinuation of PHP < 8.0 support.
* Updated: Moved the Dashboard Site update indicator to the bottom of the primary menu bar.
* Updated: Redesigned the header actions layout, moving specific items to the User button menu.
* Updated: Relocated the Privacy Policy link from the Info page to the User button menu.
* Updated: Updated Extensions page layout for a cleaner look and moved the search feature to the action bar.
* Updated: Improved Install Add-ons modal with better filtering between Extensions and Integrations.
* Updated: Updated tables element style and column sorting indicators.
* Updated: Improved the "Select Sites" element layout and style for clarity.
* Updated: Updated the Manage Sites grid view page layout and the Site card design for better usability.
* Updated: Improved the "Add New Site" page layout and field order for better organization.
* Updated: Updated the Site Overview page layout for better readability.
* Updated: Improved the Updates Overview widget layout to better fit elements.
* Updated: Updated the Updates page layout by moving action buttons to the action bar and removing excessive buttons.
* Updated: Redesigned the Clients table default state and data presentation.
* Updated: Revamped Client Info widget.
* Updated: Revamped Client Notes widget.
* Updated: Revamped Client Sites widget.
* Updated: Revamped Additional Client Info widget.
* Updated: Revamped Client Contacts widget.
* Updated: Updated the Client column in Manage Sites to include client avatars.
* Updated: Updated button and input elements to have rounded corners.
* Updated: Improved verbiage in tooltips, option labels, and button labels for better clarity.
* Updated: Updated REST API page layout for a cleaner look.
* Updated: Simplified "Create New API Key" form for enabling API v1 support.
* Updated: Added an info message to the API Backups settings page to address potential confusion.
* Updated: Standardized terminology - "Extensions" now refer to stand-alone add-ons.
* Updated: Standardized terminology - "Integrations" refer to add-ons integrating with third-party plugins or services.
* Updated: Introduced an Add-ons filter for quick filtering between types.
* Updated: Replaced Gridster.js with Gridstack.js for a more flexible widget solution.
* Updated: Moved Cost Tracker settings to the main Settings area.
* Updated: Updated Uptime Monitoring settings to hide options not applicable to Ping and Keyword monitoring types.
* Updated: Improved page loading logic on the Updates page for better performance.
* Updated: Removed View Ignored Plugins and Themes buttons when no ignored items exist.
* Updated: Updated Activity Log for MainWP add-on information.

[See Video Changelog](https://www.youtube.com/watch?v=36KRNYo6BMY)

[See changelog for all versions.](https://mainwp.com/changelog.txt)
