diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..814d4ca --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,69 @@ +# Agent Workflow + +## Project Overview + +WP Maintenance Mode (LightStart) is a WordPress plugin by Themeisle that displays a maintenance mode, coming soon, or landing page to visitors. Text domain: `wp-maintenance-mode`. Option key: `wpmm_settings`. All constants prefixed with `WPMM_`. + +## Commands + +```bash +# Install dependencies +composer install +npm install + +# Lint (PHP_CodeSniffer with WordPress coding standards) +composer run lint + +# Auto-fix coding standards +composer run format + +# Run PHPUnit tests +./vendor/bin/phpunit + +# Run a single test file +./vendor/bin/phpunit tests/generic-test.php + +# Build assets (minify JS + CSS via Grunt) +npm run build # or: npx grunt + +# Watch for asset changes during development +npx grunt watch +``` + +## Architecture + +### Entry Point & Bootstrap + +`wp-maintenance-mode.php` — Main plugin file. Defines all `WPMM_*` constants (paths, URLs), requires function files, then loads the two core singleton classes via `plugins_loaded`. + +### Core Classes (`includes/classes/`) + +- **`WP_Maintenance_Mode`** — Frontend singleton. Handles maintenance mode display logic, page templates, redirect rules, multisite/network mode support, and shortcode registration. Loaded on every request. +- **`WP_Maintenance_Mode_Admin`** — Admin singleton. Settings page, AJAX handlers (prefixed `wp_ajax_wpmm_*`), wizard flow, template management, subscriber export, and notices. Only loaded in `is_admin()` context. +- **`WP_Maintenance_Mode_Shortcodes`** + `shortcodes/` — Shortcode registration (e.g., login form shortcode). + +### Functions (`includes/functions/`) + +- **`hooks.php`** — Plugin header filters and email content type hook. +- **`helpers.php`** — Utility functions (e.g., `wpmm_get_option()`). + +### Views (`views/`) + +PHP template files for admin settings tabs (`settings.php`, `contact.php`, `google-analytics.php`), the frontend maintenance page (`maintenance.php`), wizard (`wizard.php`), network settings, notices, and sidebar. + +### Assets + +- `assets/js/` — Frontend (`scripts.js`) and admin (`scripts-admin.js`, `scripts-admin-global.js`) JavaScript, plus chatbot (`bot.js`, `bot.async.js`). Grunt minifies to `.min.js`. +- `assets/css/` — Stylesheets minified via PostCSS/cssnano to `.min.css`. +- `assets/templates/` — Block template JSON files organized by category: `coming-soon/`, `maintenance/`, `landing-page/`. + +### Settings Structure + +Plugin settings stored as serialized array in `wpmm_settings` option, with sections: `general` (status, network_mode), plus additional tabs managed by the admin class. Network/multisite settings stored in `wpmm_settings_network`. + +## Coding Standards + +- WordPress-Core standards enforced via PHPCS (`phpcs.xml`), with specific exclusions (no Yoda conditions required, loose comparison allowed, etc.) +- i18n text domain: `wp-maintenance-mode` +- PHP minimum: 7.0 (runtime set in PHPCS) +- Assets use `.min.` suffix in production; controlled by `SCRIPT_DEBUG` constant diff --git a/composer.lock b/composer.lock index 951d036..3f80008 100644 --- a/composer.lock +++ b/composer.lock @@ -4,25 +4,25 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "b5f5da36c50a2fe2bccfce677431bfbc", + "content-hash": "6acace5af549ca9a6ced24d8aeef359d", "packages": [ { "name": "codeinwp/themeisle-sdk", - "version": "3.3.48", + "version": "3.3.51", "source": { "type": "git", "url": "https://github.com/Codeinwp/themeisle-sdk.git", - "reference": "0727d2cf2fc9bfb81b42968aeaf2bf4e340f021e" + "reference": "bb2a8414b0418b18c68c9ff1df3d7fb10467928d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/0727d2cf2fc9bfb81b42968aeaf2bf4e340f021e", - "reference": "0727d2cf2fc9bfb81b42968aeaf2bf4e340f021e", + "url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/bb2a8414b0418b18c68c9ff1df3d7fb10467928d", + "reference": "bb2a8414b0418b18c68c9ff1df3d7fb10467928d", "shasum": "" }, "require-dev": { "codeinwp/phpcs-ruleset": "dev-main", - "yoast/phpunit-polyfills": "^2.0" + "yoast/phpunit-polyfills": "^4.0" }, "type": "library", "notification-url": "https://packagist.org/downloads/", @@ -36,16 +36,16 @@ "homepage": "https://themeisle.com" } ], - "description": "ThemeIsle SDK", + "description": "Themeisle SDK.", "homepage": "https://github.com/Codeinwp/themeisle-sdk", "keywords": [ "wordpress" ], "support": { "issues": "https://github.com/Codeinwp/themeisle-sdk/issues", - "source": "https://github.com/Codeinwp/themeisle-sdk/tree/v3.3.48" + "source": "https://github.com/Codeinwp/themeisle-sdk/tree/v3.3.51" }, - "time": "2025-08-11T16:47:24+00:00" + "time": "2026-03-30T07:58:49+00:00" } ], "packages-dev": [ @@ -671,5 +671,5 @@ "platform-overrides": { "php": "5.6" }, - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.9.0" } diff --git a/includes/classes/wp-maintenance-mode-admin.php b/includes/classes/wp-maintenance-mode-admin.php index 7721e34..69c81ff 100644 --- a/includes/classes/wp-maintenance-mode-admin.php +++ b/includes/classes/wp-maintenance-mode-admin.php @@ -1324,15 +1324,19 @@ public function add_inline_global_style() { public function add_black_friday_data( $configs ) { $config = $configs['default']; - // translators: %1$s - plugin namce, %2$s - HTML tag, %3$s - discount, %4$s - HTML tag, %5$s - company name. - $message_template = __( 'Brought to you by the team behind %1$s— our biggest sale of the year is here: %2$sup to %3$s OFF%4$s on premium products from %5$s! Limited-time only.', 'wp-maintenance-mode' ); + if ( defined( 'NEVE_VERSION' ) ) { + return $configs; + } - $config['message'] = sprintf( $message_template, 'WP Maintenance Mode', '', '70%', '', 'Themeisle' ); - $config['sale_url'] = add_query_arg( + // translators: 1. Number of free licenses, 2. The price of the product. + $config['message'] = sprintf( __( 'You\'re using LightStart, and the team behind it is celebrating Black Friday by giving away %1$s licences of Neve Pro. A premium WordPress theme worth %2$s, packed with starter sites, a header builder, and WooCommerce layouts. Claim yours before they run out.', 'wp-maintenance-mode' ), 100, '$69' ); + $config['cta_label'] = __( 'Get Neve Pro free', 'wp-maintenance-mode' ); + $config['plugin_meta_message'] = __( 'Black Friday Sale - Get Neve Pro free', 'wp-maintenance-mode' ); + $config['sale_url'] = add_query_arg( array( 'utm_term' => 'free', ), - tsdk_translate_link( tsdk_utmify( 'https://themeisle.link/all-bf', 'bfcm', 'wp-maintenance-mode' ) ) + tsdk_translate_link( tsdk_utmify( 'https://themeisle.link/neve-claim-bf', 'bfcm', 'lightstart' ) ) ); $configs[ WPMM_PRODUCT_SLUG ] = $config;