=== AdsDestroyer – clean admin panel & white label ===
Contributors: wpaifactory, alexkovalevv
Author: wpaifactory
Author URI: https://wp-aifactory.com/adsdestroyer-disable-admin-ads-wordpress-plugin/
Tags: admin-notices, hide-notices, white-label, admin-cleanup, dashboard
Requires at least: 6.0
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 1.0.34
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Hide any element in WordPress admin: ads, notices, menus. Clean, white-label interface with precise XPath selectors.

== Description ==

AdsDestroyer turns the WordPress admin into a clean, white-label workspace. Hide any element you do not need — advertising blocks, promotional notices, menu items, admin-bar nodes, or confidential data — by picking it visually. The plugin generates a precise XPath or CSS selector and applies it on every page load, so hidden blocks never flash back.

**Perfect for:**
- **Focus & Productivity**: Hide distracting admin notices, promotional banners, and unnecessary UI elements to concentrate on your work
- **Brand Customization**: Remove third-party branding, API keys, and sensitive information from admin screens
- **Clean Interface**: Eliminate clutter by hiding elements that can't be removed through standard WordPress settings
- **Client Management**: Create cleaner admin experiences for clients by hiding complex settings and technical information
- **Development Workflow**: Remove development notices, debug information, and testing elements from production admin

**Key Features:**
- **Visual Selection Mode**: Click the admin bar button and visually select any element to hide
- **Smart Block Picker**: Snaps to meaningful blocks and lets you preview and choose parent containers
- **Collision-Aware Panel**: Keeps controls clear of the selected block, admin bar, and menu, with a pointer to the target
- **Smart Selector Engine**: Chooses stable IDs, data attributes, classes, text, or a positional fallback and validates uniqueness
- **Stable Admin Chrome Rules**: Uses deterministic anchors for submenu items and global scope for admin menu and admin bar targets
- **Flexible Duration**: Set rules to hide elements forever or for specific time periods (hours, days, weeks, months)
- **Safe Removal**: Uses HTML5 parsing with placeholder replacement to prevent broken layouts
- **Rule Management**: Full CRUD interface to edit, activate/deactivate, and delete rules
- **Conflict Resolution**: Automatically detects duplicate rules and offers to activate existing ones
- **Multisite Support**: Per-site or network-wide rule management
- **Performance Optimized**: Only processes admin pages, never affects frontend performance

**We drew inspiration from these plugins:**
- Admin Menu Editor Pro
- White Label CMS
- Adminimize
- Remove Admin Notices
- Admin Columns Pro

== Installation ==

1. Upload the plugin to wp-content/plugins/ads-destroyer or clone/install it there.
2. Navigate to Plugins → Activate "AdsDestroyer - clean admin panel & white label".
3. From Settings → AdsDestroyer - clean admin panel & white label, review defaults and permissions.

== Usage ==

**Quick Start:**
1. **Activate Selection Mode**: Click the "Disable ad" button in the WordPress admin bar to start hiding elements
2. **Select Elements**: Hover over any element to preview it, then click to select
3. **Refine the Target**: Preview the parent chain and choose a complete container when needed
4. **Choose Duration**: Click "Hide" and explicitly select how long to hide the element:
   - Hide forever (permanent)
   - For a day (24 hours)
   - For a week (7 days) 
   - For a month (30 days)
5. **Element Hidden**: The selected element disappears only after a duration is chosen

**Managing Rules:**
- **View All Rules**: Go to Settings → AdsDestroyer to see all your hidden elements
- **Edit Rules**: Click the edit button to modify XPath rules, add descriptions, or change expiration dates
- **Toggle Rules**: Activate/deactivate rules without deleting them
- **Delete Rules**: Remove rules you no longer need
- **Reset All**: Clear all rules at once if needed

**Advanced Features:**
- **Visual Selection**: The plugin resolves nested markup to a meaningful block and offers up to six ancestor candidates
- **Selector Validation**: Every generated XPath must resolve to exactly the selected element before it is stored
- **Scope Awareness**: Fragile page content stays page-specific, while admin menu and admin-bar rules can work globally
- **Conflict Detection**: If you try to hide an element that's already hidden, the plugin offers to activate the existing rule
- **Safe Removal**: Uses HTML5 parsing to prevent broken layouts when hiding elements
- **Page Information**: Automatically tracks which page each rule was created on for better organization

== Multisite ==

- By default, settings are per site.
- Optional network-wide mode (planned toggle in settings) stores options as a site option across network.

== FAQ ==

= The page layout breaks after hiding a block =
- The plugin uses HTML5 parsing with placeholder replacement to minimize layout issues. If you still experience problems, try selecting a parent container instead of the specific element, or use the "Reset all rules" option to start fresh.

= A block with dynamic CSS classes is not hidden =
- The plugin automatically handles dynamic classes and generates multiple XPath candidates. Try re-selecting the element or select a parent container with a stable ID. The plugin prioritizes elements with data attributes (data-test, data-testid, data-qa) for better targeting.

= How do I reset all rules? =
- Go to Settings → AdsDestroyer → "Reset all rules" button. This will remove all hidden elements and restore the original admin interface.

= Can I hide elements temporarily? =
- Yes! When creating a rule, you can choose from several duration options: hide forever, for a day, for a week, or for a month. Temporary rules automatically expire and restore the hidden elements.

= What if I accidentally hide something important? =
- Use the "Reset all rules" option in the settings page to restore all hidden elements. You can also edit individual rules to deactivate them without deleting them.

= Does this plugin affect my website's frontend? =
- No, this plugin only works in the WordPress admin area and never affects your website's frontend or public pages.

= Can I use this on a multisite network? =
- Yes, the plugin supports multisite installations with per-site rule management. Each site can have its own set of hidden elements.

== Output Buffering ==

This plugin uses PHP output buffering (ob_start) to process HTML content in the WordPress admin panel. The buffering is **only active in the admin area** and **never affects the frontend** of your website.

**Important for hosting providers:**
- The plugin does NOT use output buffering on frontend pages
- Admin panel pages are rarely cached by hosting providers due to their personalized nature
- If you have admin panel caching enabled on your hosting, it may cause conflicts with the plugin's functionality
- If you have problems with Wordpress admin panel caching. We recommend disabling admin panel caching when using this plugin

**Technical details:**
- The buffering is used to apply XPath rules to hide unwanted elements in the admin interface
- No impact on frontend performance or caching

== Development & Build Instructions ==

This plugin uses modern build tools for JavaScript and CSS compilation. To build the plugin from source:

**Prerequisites:**
- PHP 7.4 through PHP 8.4 with the DOM extension
- Node.js 18 or higher
- npm (comes with Node.js)
- Composer 2

**Build Commands:**
- `npm install` - Install dependencies
- `npm run build` - Build production assets and create distribution package
- `npm run build:dev` - Build development assets (with source maps)
- `npm run dev` - Build development assets (alias for build:dev)

**Build Process:**
1. JavaScript files are compiled using Vite from `assets/js/` directory
2. SCSS files are compiled to CSS from `assets/scss/` directory  
3. Compiled assets are output to `build/` directory
4. Final distribution package is created as `build/compiled/ads-destroyer-[version].zip`

**Source Files:**
- JavaScript: `assets/js/main.js`, `assets/js/admin-settings.js`, and related modules
- SCSS: `assets/scss/index.scss`, `assets/scss/admin-settings.scss`, and component files
- Build configuration: `vite.config.js`, `package.json`

**Output Structure:**
- `build/js/` - Compiled JavaScript files
- `build/css/` - Compiled CSS files
- `build/compiled/` - Distribution packages

== Screenshots ==

1. Demo video showing the plugin in action
2. Visual selection mode with overlay
3. Rule creation interface
4. Admin interface with hidden elements
5. Plugin settings page with rules table

== Our Other Plugins ==

**[AI Thumbnails Maker](https://wordpress.org/plugins/ai-thumbnails-maker/)** - Automatically generate beautiful AI-powered thumbnails and force regenerate featured images for your WordPress posts. Perfect for keeping your media library fresh and professional.
**[SmartyPress AI Engine](https://wordpress.org/plugins/smartypress-ai-engine/)** - Powerful AI integration for WordPress with ChatGPT and Deepseek. Generate high-quality content directly in Gutenberg editor with Magic Wand inline editing and AI Content Generator panel. Create titles, articles, excerpts with 10+ pre-built actions or custom prompts.
**[Unnotifier](https://wordpress.org/plugins/unnotifier/)** - Take complete control over WordPress admin notifications. Hide, customize, or remove any admin notice with precision. Essential for agencies managing multiple client sites or power users who value a clean interface.
**[Everyone Accessibility Suite](https://wordpress.org/plugins/everyone-accessibility-suite/)** - Lightweight accessibility widget and frontend panel so visitors can adjust typography, contrast, colors, and reading aids. Includes 5 accessibility profiles and 40+ tools for WCAG 2.1, ADA, and Section 508 compliance.

== Changelog ==

= 1.0.34 =
- Added verified compatibility with PHP 7.4 through PHP 8.4 and WordPress 7.1
- Added a collision-aware selection panel with a dashed pointer that stays clear of the target and WordPress admin chrome
- Added an ancestor picker, meaningful block snapping, and an empty-container warning
- Improved selector generation with stable ID, data, class, text, and positional strategies
- Added deterministic anchors and global scope for WordPress admin menu and admin-bar rules
- Added visible duration confirmation before a block is hidden
- Improved early CSS hiding, rule validation, failed-rule reporting, and selector regeneration

= 1.0.33 =
- Replaced overlapping picker controls with a single floating selection panel
- Added responsive panel placement for small elements, viewport edges, the admin bar, and the admin menu

= 1.0.32 =
- Added stable anchor classes for WordPress admin submenu items
- Improved global selector scope for WordPress admin chrome

= 1.0.31 =
- Added meaningful block targeting, ancestor selection, and hardened XPath strategies
- Added scope and selector metadata to stored rules

= 1.0.30 =
- Restored reliable selection-mode highlighting and isolated plugin UI classes from third-party styles

= 1.0.28 =
- WordPress 7.0 compatibility: verified compatibility with WordPress 7.0 and updated plugin metadata
- Release metadata: updated stable tag and tested WordPress version for the latest release

= 1.0.27 =
- Fixed HTML5 parser issue on options-general.php page by excluding problematic pages from server-side processing
- Added frontend-only approach for excluded pages (similar to React pages) - elements are hidden via JavaScript
- Changed .adsd-visually-hidden class from opacity: 0 to display: none for proper element hiding
- Improved settings page UI with white background and proper styling for tab content
- Enhanced page exclusion system with detailed documentation of HTML5 parser limitations

= 1.0.26 =
- Security improvements: proper data sanitization and escaping throughout the plugin
- Replaced session_start() with WordPress User Meta API for state management
- Fixed output buffer closure issues with register_shutdown_function
- Added XPath sanitization that preserves syntax while ensuring security
- Improved nonce handling with proper sanitization

= 1.0.25 =
- Added review notice system to encourage user feedback and ratings

= 1.0.24 =
- Fixed admin bar button appearing on frontend (now shows only in admin area)
- Fixed selection mode allowing to select the plugin's "Exit selection mode" button
- Improved element selection exclusions to allow selecting other admin bar elements while protecting only the plugin's button
- Enhanced user experience by preventing accidental hiding of the selection mode control button

= 1.0.23 =
- Fixed WordPress.org plugin directory compatibility issues
- Shortened plugin description to meet 150 character limit
- Removed invalid Update URI header field
- Added trunk synchronization to build process for better WordPress.org integration

= 1.0.22 =
- Complete refactoring of XPath engine for better performance and reliability
- Fixed compatibility issues with other plugins and themes
- Added ability to remove HTML blocks in React UI (currently hides blocks visually without DOM removal)
- Hidden blocks are now visible in selection mode for easier management and verification
- Improved element selection overlay with better visual feedback
- Enhanced XPath rule generation for more precise targeting

= 1.0.21 =
- Completely redesigned readme.txt with comprehensive use cases and examples
- Added detailed usage instructions with step-by-step guide
- Updated FAQ section with current plugin features
- Added inspiration credits for similar plugins
- Enhanced description with focus on productivity and customization benefits
- Improved documentation for better user understanding

= 1.0.20 =
- Added comprehensive build instructions to readme.txt
- Updated development documentation with Node.js build process
- Improved plugin documentation for developers

= 1.0.19 =
- Updated all plugin prefixes from AIDAD/aidad to ADSD/adsd for WordPress.org compliance
- Added output buffering documentation for hosting providers
- Improved admin-only buffering with clear frontend exclusion

= 1.0.18 =
- Visual overlay updated: blur/hatch on hover and selection, centered action button, instruction hint.
- Safe removal via HTML5 and placeholders.
- Dynamic class filtering in XPath builder and server-side relaxation.
- Rules: expiry support (duration on save).
- Settings: actions column, edit in place, author display, instruction.
- Initial modernized implementation.
