=== AdsDestroyer – clean admin panel & white label === Contributors: wpaifactory, alexkovalevv Author: wpaifactory Author URI: https://wp-aifactory.com 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.35 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.35 = - Fixed plugin installation from ZIP archives getting stuck while unpacking when AdsDestroyer rules are active - Excluded streaming updater screens and incomplete HTML documents from server-side parsing = 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.