=== MainWP Child - Securely Connects to the MainWP Dashboard to Manage Multiple Sites ===
Contributors: mainwp
Tags: update, backups, security, monitoring, site management
Author: mainwp
Author URI: https://mainwp.com
Plugin URI: https://mainwp.com
Requires at least: 6.2
Tested up to: 7.0
Requires PHP: 7.4
Stable tag: 6.1.3
License: GPLv3 or later
License URI: https://www.gnu.org/licenses/gpl-3.0.html

MainWP Child establishes a secure link between your WordPress sites and your self-hosted MainWP Dashboard, simplifying site management.

== Description ==

**The MainWP Child Plugin securely connects the WordPress sites you want to manage to the [MainWP Dashboard](https://wordpress.org/plugins/mainwp/).**

The MainWP Child plugin creates a secure connection between your WordPress sites and your self-hosted MainWP Dashboard, enabling you to efficiently manage WP installations from a single, centralized location.

With MainWP Child and the MainWP Dashboard, you can update themes, plugins, and WordPress core across all connected sites, perform backups and security scans, manage posts, pages, users, and comments in bulk, and integrate with popular plugins like WooCommerce, Yoast SEO, and Wordfence.

The [MainWP Dashboard](https://wordpress.org/plugins/mainwp/) also offers features for cost tracking and client management, making it an all-in-one solution for agencies and freelancers looking to manage WP sites efficiently. The functionality can be further extended with a growing library of [MainWP Add-ons](https://mainwp.com/mainwp-add-ons/).

[MainWP](https://mainwp.com/) is the ideal solution for freelancers and agencies managing client sites, developers and designers working on multiple projects, marketers and content managers overseeing various websites, and anyone responsible for maintaining multiple WordPress sites.

= Why Choose MainWP for WordPress Management? =
MainWP is 100% free and open-source, with no monthly fees, even for unlimited sites.

As a self-hosted solution, it offers maximum control and privacy. MainWP provides comprehensive site management features and is highly customizable with add-ons and developer hooks.  The MainWP Child plugin even comes with its own privacy policy to guarantee your [privacy while using MainWP](https://mainwp.com/mainwp-plugin-privacy-policy/).

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

= Key Features =
MainWP Child, combined with the MainWP Dashboard, offers secure management of unlimited WordPress sites, one-click updates for plugins, themes, and WordPress core, automated backups and security monitoring, bulk management of posts, pages, users, and comments, white-labeling and custom branding options, and [powerful add-ons](https://mainwp.com/mainwp-add-ons/) for WooCommerce, Yoast SEO, Wordfence, and more.

= Expand Your MainWP Dashboard with Add-ons =
MainWP offers a growing library of add-ons that add advanced functionality to your Dashboard. From client reporting to SEO management, MainWP add-ons provide the tools you need to deliver top-notch service to your clients.

= Join the MainWP Community =
MainWP is more than just a plugin; it's a thriving community of WordPress professionals. Join our [MainWP Users Facebook Group](https://www.facebook.com/groups/MainWPUsers/) to connect with other users, share advice, and stay updated on the latest features and add-ons.

= Developer-Friendly =
MainWP is built with developers in mind. We provide extensive documentation, hooks, and an API to help you create custom extensions and integrations for the MainWP platform.  We have a site at [MainWP.dev](https://mainwp.dev) dedicated to MainWP developers.

= Get Started with MainWP Today =
Take control of your WordPress site management with MainWP and the MainWP Child plugin. With its powerful features, unlimited site connections, and user-friendly interface, MainWP is the smart choice for anyone managing multiple WordPress sites.

= Learn More About MainWP =
- [MainWP Website](https://mainwp.com)
- [MainWP Documentation](https://mainwp.com/kb/)
- [MainWP Support](https://community.mainwp.com/c/support/mainwp-support/)
- [MainWP Blog](https://mainwp.com/blog/)
- [MainWP on GitHub](https://github.com/mainwp/)

== Installation ==

How the MainWP Child Plugin Works
Install and activate the [MainWP Dashboard](https://wordpress.org/plugins/mainwp/) plugin on a dedicated WordPress site.

Install the MainWP Child plugin (this plugin) on the WordPress sites you want to connect to your MainWP Dashboard.
Activate the plugin.
Follow the [Getting Started Guide](https://mainwp.com/getting-started-with-mainwp/) to connect your sites to your MainWP Dashboard.

== Frequently Asked Questions ==

= Is the MainWP Child Plugin required to use MainWP? =
Yes, the MainWP Child plugin must be installed on each WordPress site you want to connect to your MainWP Dashboard.

= Can I hide the MainWP Child plugin from the WordPress admin? =
Yes, you can use the MainWP White Label extension to hide the MainWP Child plugin from the WordPress admin on your connected sites.

= How does MainWP compare to ManageWP? =
While MainWP and ManageWP offer similar features, MainWP is self-hosted and open-source, providing more control and flexibility. Learn more about the differences between [MainWP and ManageWP](https://mainwp.com/managewp-vs-mainwp/).

= How does MainWP compare to WP Umbrella? =
Both MainWP and WP Umbrella offer features for managing multiple WordPress sites, but MainWP is self-hosted and open-source, while WP Umbrella is a SaaS platform hosted on their servers. MainWP's open architecture provides greater control and flexibility. Discover more differences between [MainWP and WP Umbrella](https://mainwp.com/wp-umbrella-vs-mainwp/).

= How does MainWP compare to InfiniteWP? =
MainWP and InfiniteWP are both self-hosted WordPress management solutions. However, MainWP is open-source, allowing for code review and extensibility, while InfiniteWP's Admin Panel is not open-source and obfuscates its code. MainWP also offers a comprehensive set of features tailored for agencies and freelancers managing client sites. Explore the differences between [MainWP and InfiniteWP](https://mainwp.com/infinitewp-vs-mainwp/).

= How does MainWP compare to WPRemote? =
MainWP and WPRemote are both WordPress management solutions, but they differ in their approach and feature set. MainWP is a self-hosted, open-source plugin that gives you full control over your data and offers a wide range of features. WP Remote is a cloud-based service that stores your data on its servers, which may be a concern for some users who prioritize data ownership, security, and GDPR.  Learn more about the differences between [MainWP and WPRemote](https://mainwp.com/wpremote-vs-mainwp/).

= Is MainWP secure? =
Yes, security is a top priority for MainWP. We adhere to WordPress security best practices, and our code is open-source and available for review on GitHub. We also offer a bug bounty program to encourage responsible disclosure of any security issues.  Read more about [MainWP Security](https://mainwp.com/how-secure-is-mainwp/) practices.

= Can I contribute to MainWP? =
Absolutely! MainWP is open-source, and we welcome community contributions. Visit our [GitHub repository](https://github.com/mainwp/) to get started.

= How can I submit an idea for MainWP? =
Please follow the steps outlined in the [MainWP Feature Requests](https://voice.mainwp.com/) to submit your idea and allow the MainWP Community to vote on it.

= Where can I find more information about MainWP? =
We have an extensive FAQ with more questions and answers [here](https://mainwp.com/preinstall-faq/).

= Where do I report security bugs found in this plugin? =

Please report security bugs found in the source code of the MainWP Child plugin through the [Patchstack Vulnerability Disclosure Program](https://patchstack.com/database/vdp/9e5fb39d-412a-44d4-8639-39c3db443381). The Patchstack team will assist you with verification, CVE assignment, and notify the developers of this plugin.

== Screenshots ==

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

== Changelog ==

= 6.1.3 - 7-7-2026 =

* Fixed: Improved log filtering so the BackWPup backup job logs now include relevant default jobs more reliably.
* Fixed: Problems with detecting the WP Staging plugin status caused by recent plugin update.

= 6.1.2 - 6-16-2026 =

* Updated: Hardened MainWP Child connection verification and settings behavior for passwordless setups. If Password Authentication is disabled, adding or reconnecting a site now requires the Unique Security ID, including when using the MainWP REST API or other automations. Thanks to Khaled Alenazi (Nxploited).

= 6.1.1 - 6-2-2026 =

* Updated: Improved session cleanup when authentication failures occur to ensure proper logout behavior. [(Pull Request by Sixela)](https://github.com/sixela)
* Updated: Improved premium theme and plugin update detection to prevent system hangs caused by slow or unreachable servers. [(Pull Request by Contributolo)](https://github.com/Contributolo)

= 6.1 - 5-26-2026 =

* Fixed: Typos and inconsistencies in user login event log descriptions and action identifiers for improved clarity and consistency across Network Activity logs.
* Updated: Spammed comments are now properly excluded from being counted in reports and token metrics.
* Updated: Updated the PHPSecLib library to the latest version.
* Updated: Enhanced plugin and theme health check monitoring with improved background task scheduling and automatic recovery from missed scheduled events.

= 6.0.11 - 5-5-2026 =
* Fixed: Global `customize_register` hook exposes legacy Customizer UI issues.

= 6.0.10 - 4-28-2026 =
* Fixed: Improved namespace prefix handling to ensure more accurate module loading.
* Updated: Enhanced background synchronization for detecting and reporting outdated plugins and themes.

= 6.0.9 - 4-21-2026 =
* Updated: Improved Network Activity entries for WordPress auto-updates to avoid showing "Unknown User" and better reflect automated update actions.

= 6.0.8 - 4-14-2026 =
* Fixed: Added the `normalize_theme_slug()` method to better handle theme references and prevent PHP warnings when installing themes by uploading a ZIP file.
* Updated: Expanded Network Activity tracking to monitor core, plugin, and theme updates handled by WordPress auto-updates.

= 6.0.7 - 4-7-2026 =

* Fixed: Resolved an issue where the Network Activity feature continued logging events even when the feature was disabled.
* Fixed: Conflict with the SureFeedback plugin.
* Added: Added detailed sync monitoring with per-call timing and execution data to the Custom Event Monitor.
* Added: Added an option to set a custom Network Activity data retention period in child site databases.

= 6.0.6 - 3-31-2026 =

* Fixed: Improved timestamp strict typing compatibility on newer PHP versions.
* Fixed: Corrected an issue where the UpdraftPlus add-on option "Do not overwrite Remote Storage settings" was not respected in individual site settings.

= 6.0.5 - 3-24-2026 =

* Fixed: Corrected the timing of theme update data collection to ensure the latest information is used during updates.
* Fixed: Skipped logging meta creation events for auto-draft posts to prevent conflicts with the SureFeedback plugin.

= 6.0.4 - 3-20-2026 =

* Security: Updated the `phpseclib` library to address a recently [disclosed vulnerability](https://nvd.nist.gov/vuln/detail/CVE-2026-32935). The issue does not affect MainWP in normal usage.
* Fixed: Fatal error in when saving posts in Gutenberg if the sticky_posts option contains invalid data.

= 6.0.3 - 3-17-2026 =

* Fixed: Autoload settings for legacy data to optimize database performance.
* Fixed: UpdraftPlus remote storage settings management to properly clear backed-up remote settings when explicitly disabled
* Updated: Database upgrade tracking with automatic version detection and improved compatibility handling.
* Updated: Automatically migrate legacy BackWPup scheduled backup arguments during startup so existing scheduled backups continue running after upgrade.
* Updated: Adjusted the timing of cache purge verification to better coordinate with WordPress plugin initialization.
* Updated: Improved the UpdraftPlus backup schedule deletion functionality for enhanced reliability.

= 6.0.2 - 3-10-2026 =

* Fixed: Resolved a conflict with a third-party plugin caused by a legacy feature that hid script version numbers.
* Updated: Enhanced user role retrieval logic for Pro Reports related data.

= 6.0.1 - 3-3-2026 =

* Fixed: Updated internal asset handling to improve consistency across registration and enqueuing processes.
* Fixed: Replaced multibyte-aware string functions (`mb_strpos`, `mb_split`) with standard equivalents (`strops`, `explode`) in WordPress database table prefix detection logic.
* Fixed: Fixed a conflict with the SureFeedback plugin to improve compatibility.
* Fixed: Prevented conflicting output handling during certain database operations to improve stability in environments where multiple components manage output streams.
* Fixed: Improved escaping and translation-safe string handling to avoid edge-case issues in localized environments.
* Updated: Normalized plugin internationalization by standardizing the `mainwp-child` text domain and adding translator context for clearer, more accurate translations.
* Updated: Loaded the plugin text domain earlier by calling `localization()` from `init_frontend_only()` and `init_full()` to ensure translations are available sooner.
* Dev: Added PHPCS ignores for bundled translations, converted a heredoc SQL statement to a concatenated string, and made minor logic/formatting tweaks.
* Removed: Removed the White Label add-on feature that allowed hiding plugin and theme updates.
* Removed: Removed a stray `.htaccess` file.

= 6.0 - 2-24-2026 =

* Added: New maintenance options to selectively clean expired transients or remove all transients from the site.
* Added: Password policy management to set and enforce password expiration rules.
* Added: Extended post retrieval to support ID-based filtering for more targeted synchronization.
* Added: Caching for recently updated custom posts with automatic invalidation on post changes, and included cached data in sync payloads to improve performance.
* Added: Support for the upcoming Patchstack Integration for MainWP.
* Added: Support for the feature update that allows users to delete plugins that are active while respecting sequence of deactivating first and deleting after in background.
* Added: Helper method to detect MainWP-specific admin pages.
* Added: Created a dedicated MainWP_Child_Assets class to handle asset loading.
* Updated: Enhanced plugin update processing to include WordPress and PHP compatibility details for both standard and premium plugin updates when compatibility checks are available.
* Updated: Improved error message handling for better compatibility with the PostHog (MainWP Dashboard Telemetry) integration.
* Updated: Disabled cron event tracking as the default value for Sites Changes logging to reduce unnecessary log entries.
* Updated: Stopped parsing the `readme.txt` file for version requirements and switched to reading from the main plugin file for improved reliability.
* Updated: Restructuring the plugin initialization to only load necessary code based on the current request context.
* Updated: Delaying the loading of admin-specific code until it's actually needed.
* Updated: Implementing conditional loading of CSS and JavaScript files only on MainWP-specific pages.
* Updated: Separated asset registration from enqueuing for better performance.
* Updated: Optimized jQuery UI loading to only load when needed.
* Fixed: Fixed saving of Solid Security plugin settings.
* Fixed: Multiple PHP warnings and notices to ensure cleaner operation.
* Fixed: Missing user information for certain objects and events in the Sites Changes feature.
* Fixed: An issue with syncing Sites Changes that occurred on some server configurations.
* Fixed: Corrected Child plugin's inability to load jQuery libraries on the "Clone/Restore" page due to incorrect conditional logic.
* Fixed: Resolved Child plugin error when attempting to load non-existent assets.
* Dev: Updated PHPSecLib package to their latest versions to maintain security and compatibility standards.

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

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