[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fwTfUvyVMJLzXfC3jLKK7JrX1euUMp-ZvjfhAQgxkLC8":3},{"slug":4,"display_name":5,"profile_url":6,"plugin_count":7,"total_installs":8,"avg_security_score":9,"avg_patch_time_days":10,"trust_score":11,"computed_at":12,"plugins":13},"mksddn","Max","https:\u002F\u002Fprofiles.wordpress.org\u002Fmksddn\u002F",3,0,100,30,94,"2026-04-04T23:15:37.223Z",[14,35,53],{"slug":15,"name":16,"version":17,"author":5,"author_profile":6,"description":18,"short_description":19,"active_installs":8,"downloaded":20,"rating":8,"num_ratings":8,"last_updated":21,"tested_up_to":22,"requires_at_least":23,"requires_php":24,"tags":25,"homepage":31,"download_link":32,"security_score":9,"vuln_count":8,"unpatched_count":8,"last_vuln_date":33,"fetched_at":34},"mksddn-collection-for-postman","MksDdn Collection for Postman","2.1.0","\u003Cp>MksDdn Collection for Postman helps developers quickly generate a Postman Collection (v2.1.0) or OpenAPI 3.0 documentation for WordPress REST API endpoints. The plugin automatically discovers and includes standard WordPress entities, custom post types, options pages, and individual pages. Generated collections include pre-configured requests with sample data and can be downloaded as JSON files for import into Postman. OpenAPI spec can be used with Swagger UI, Redoc, or frontend code generators.\u003C\u002Fp>\n\u003Cp>The plugin provides comprehensive API testing capabilities with automatic generation of test data for form submissions, support for file uploads via multipart\u002Fform-data, and seamless integration with Advanced Custom Fields (ACF). Special handling is included for the mksddn-forms-handler plugin when active.\u003C\u002Fp>\n\u003Cp>Features:\u003Cbr \u002F>\n– Basic REST endpoints: pages, posts, categories, tags, taxonomies, comments, users, settings\u003Cbr \u002F>\n– WooCommerce REST API (wc\u002Fv3): products, product categories, orders with full CRUD when WooCommerce is active\u003Cbr \u002F>\n– Search functionality: Posts, Pages, and All content types with customizable queries\u003Cbr \u002F>\n– Custom Post Types with full CRUD operations (List, Get by Slug\u002FID, Create, Update, Delete)\u003Cbr \u002F>\n– ACF\u002FSCF fields: auto-included for all post types when ACF or Smart Custom Fields plugin is active\u003Cbr \u002F>\n– Special handling for Forms (mksddn-forms-handler integration)\u003Cbr \u002F>\n– Options endpoints: \u003Ccode>\u002Fwp-json\u002Fcustom\u002Fv1\u002Foptions\u002F...\u003C\u002Fcode>\u003Cbr \u002F>\n– Individual pages by slug with ACF field support\u003Cbr \u002F>\n– Automatic test data generation for form submissions\u003Cbr \u002F>\n– Support for multipart\u002Fform-data for file uploads\u003Cbr \u002F>\n– Yoast SEO integration (automatic yoast_head_json inclusion)\u003Cbr \u002F>\n– Multilingual support with Accept-Language headers (Polylang priority)\u003Cbr \u002F>\n– OpenAPI 3.0 export for API documentation (Swagger UI, Redoc)\u003Cbr \u002F>\n– Extensible via WordPress filters\u003Cbr \u002F>\n– WP-CLI integration for command-line usage\u003C\u002Fp>\n\u003Ch3>External services\u003C\u002Fh3>\n\u003Cp>This plugin references external services for Postman Collection schema validation:\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Postman Collection Schema Service\u003C\u002Fstrong>\u003Cbr \u002F>\n– \u003Cstrong>Service\u003C\u002Fstrong>: Postman Collection Schema (schema.getpostman.com)\u003Cbr \u002F>\n– \u003Cstrong>Purpose\u003C\u002Fstrong>: Used to validate and structure the generated Postman Collection JSON according to the official Postman Collection v2.1.0 specification\u003Cbr \u002F>\n– \u003Cstrong>Data sent\u003C\u002Fstrong>: No data is sent to this service. The plugin only references the schema URL for validation purposes\u003Cbr \u002F>\n– \u003Cstrong>When\u003C\u002Fstrong>: The schema URL is included in the generated collection metadata for Postman to validate the collection structure\u003Cbr \u002F>\n– \u003Cstrong>Terms of service\u003C\u002Fstrong>: https:\u002F\u002Fwww.postman.com\u002Flegal\u002Fterms-of-use\u002F\u003Cbr \u002F>\n– \u003Cstrong>Privacy policy\u003C\u002Fstrong>: https:\u002F\u002Fwww.postman.com\u002Flegal\u002Fprivacy-policy\u002F\u003C\u002Fp>\n\u003Cp>Note: This plugin does not send any user data to external services. The schema reference is purely for collection structure validation within the Postman application.\u003C\u002Fp>\n","Generate Postman Collection (v2.1.0) or OpenAPI 3.0 documentation for the WordPress REST API from the admin UI.",452,"","6.9.4","6.2","8.1",[26,27,28,29,30],"collection","developer-tools","openapi","postman","rest-api","https:\u002F\u002Fgithub.com\u002Fmksddn\u002FWP-MksDdn-Postman-Collection","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fmksddn-collection-for-postman.2.1.0.zip",null,"2026-03-15T10:48:56.248Z",{"slug":36,"name":37,"version":38,"author":5,"author_profile":6,"description":39,"short_description":40,"active_installs":8,"downloaded":41,"rating":8,"num_ratings":8,"last_updated":42,"tested_up_to":22,"requires_at_least":43,"requires_php":44,"tags":45,"homepage":50,"download_link":51,"security_score":9,"vuln_count":8,"unpatched_count":8,"last_vuln_date":33,"fetched_at":52},"mksddn-forms-handler","MksDdn Forms Handler","2.4.0","\u003Cp>MksDdn Forms Handler is a powerful and flexible form processing plugin that allows you to create and manage forms with multiple delivery methods. Perfect for websites that need reliable form handling with modern integrations.\u003C\u002Fp>\n\u003Ch4>Key Features\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\u003Cstrong>Multiple Delivery Methods\u003C\u002Fstrong>: Send form submissions via email, Telegram, Google Sheets, or store in WordPress admin\u003C\u002Fli>\n\u003Cli>\u003Cstrong>REST API Support\u003C\u002Fstrong>: Submit forms via AJAX or REST API endpoints\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Telegram Integration\u003C\u002Fstrong>: Instant notifications to Telegram channels\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Google Sheets Integration\u003C\u002Fstrong>: Automatically save submissions to Google Sheets\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Custom Post Types\u003C\u002Fstrong>: Dedicated forms and submissions management\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Security First\u003C\u002Fstrong>: Built-in validation, sanitization, and security measures\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Developer Friendly\u003C\u002Fstrong>: Clean code structure with proper namespacing\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Use Cases\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Contact forms with multiple delivery options\u003C\u002Fli>\n\u003Cli>Lead generation forms with instant notifications\u003C\u002Fli>\n\u003Cli>Data collection forms with Google Sheets backup\u003C\u002Fli>\n\u003Cli>Custom forms with REST API integration\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Technical Features\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>WordPress 5.0+ compatible (tested up to 6.9)\u003C\u002Fli>\n\u003Cli>PHP 8.0+ required\u003C\u002Fli>\n\u003Cli>GPL v2+ licensed\u003C\u002Fli>\n\u003Cli>Clean, maintainable code\u003C\u002Fli>\n\u003Cli>Proper error handling\u003C\u002Fli>\n\u003Cli>Comprehensive logging\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>For Developers\u003C\u002Fh3>\n\u003Ch4>Architecture\u003C\u002Fh4>\n\u003Cp>\u003Cstrong>Component-based structure\u003C\u002Fstrong> following SOLID principles with clear separation of concerns:\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Core Components (includes\u002F)\u003C\u002Fstrong>\u003Cbr \u002F>\n* \u003Ccode>PostTypes\u003C\u002Fcode> – custom post types registration (\u003Ccode>mksddn_fh_forms\u003C\u002Fcode>, \u003Ccode>mksddn_fh_submits\u003C\u002Fcode>)\u003Cbr \u002F>\n* \u003Ccode>MetaBoxes\u003C\u002Fcode> – form settings and submission data management\u003Cbr \u002F>\n* \u003Ccode>FormsHandler\u003C\u002Fcode> – main processing logic with REST API support\u003Cbr \u002F>\n* \u003Ccode>Shortcodes\u003C\u002Fcode> – form rendering with AJAX functionality\u003Cbr \u002F>\n* \u003Ccode>AdminColumns\u003C\u002Fcode> – admin interface customization\u003Cbr \u002F>\n* \u003Ccode>ExportHandler\u003C\u002Fcode> – CSV export with filtering\u003Cbr \u002F>\n* \u003Ccode>Security\u003C\u002Fcode> – rate limiting and security checks\u003Cbr \u002F>\n* \u003Ccode>Utilities\u003C\u002Fcode> – helper functions and form creation utilities\u003Cbr \u002F>\n* \u003Ccode>GoogleSheetsAdmin\u003C\u002Fcode> – Google Sheets settings page and OAuth\u003Cbr \u002F>\n* \u003Ccode>Assets\u003C\u002Fcode> – asset registration and conditional enqueuing\u003Cbr \u002F>\n* \u003Ccode>Template Functions\u003C\u002Fcode> – global functions for PHP template integration\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Handlers (handlers\u002F)\u003C\u002Fstrong>\u003Cbr \u002F>\n* \u003Ccode>TelegramHandler\u003C\u002Fcode> – Telegram Bot API integration\u003Cbr \u002F>\n* \u003Ccode>GoogleSheetsHandler\u003C\u002Fcode> – Google Sheets API integration\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Assets (assets\u002F)\u003C\u002Fstrong>\u003Cbr \u002F>\n* \u003Ccode>css\u002F\u003C\u002Fcode> – Admin and frontend styles\u003Cbr \u002F>\n* \u003Ccode>js\u002F\u003C\u002Fcode> – Admin and form scripts\u003Cbr \u002F>\n* \u003Ccode>images\u002F\u003C\u002Fcode> – Plugin images\u003C\u002Fp>\n\u003Ch4>Technology Stack\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>WordPress 5.0+ – core platform\u003C\u002Fli>\n\u003Cli>PHP 8.0+ – server-side logic\u003C\u002Fli>\n\u003Cli>jQuery – client-side form handling\u003C\u002Fli>\n\u003Cli>REST API – form submission API\u003C\u002Fli>\n\u003Cli>Google Sheets API – spreadsheet integration\u003C\u002Fli>\n\u003Cli>Telegram Bot API – notifications\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>File Structure\u003C\u002Fh4>\n\u003Cpre>\u003Ccode>mksddn-forms-handler\u002F\n├── mksddn-forms-handler.php     # Main plugin file\n├── includes\u002F                     # Core components\n│   ├── class-post-types.php\n│   ├── class-meta-boxes.php\n│   ├── class-forms-handler.php\n│   ├── class-shortcodes.php\n│   ├── class-admin-columns.php\n│   ├── class-export-handler.php\n│   ├── class-security.php\n│   ├── class-utilities.php\n│   ├── class-google-sheets-admin.php\n│   ├── class-assets.php\n│   └── template-functions.php\n├── handlers\u002F                     # External service handlers\n│   ├── class-telegram-handler.php\n│   └── class-google-sheets-handler.php\n├── templates\u002F                    # Template files\n│   ├── form-settings-meta-box.php\n│   └── custom-form-examples.php\n├── assets\u002F                       # Static resources\n│   ├── css\u002F\n│   ├── js\u002F\n│   └── images\u002F\n├── languages\u002F                    # Translations\n└── uninstall.php                # Cleanup script\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>Integration Methods\u003C\u002Fh4>\n\u003Cp>\u003Cstrong>1. Shortcode (Standard)\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>[mksddn_fh_form slug=\"contact-form\"]\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Plugin automatically generates HTML form based on configuration.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>2. PHP Templates (Custom Forms)\u003C\u002Fstrong>\u003Cbr \u002F>\nIntegrate pre-built forms in theme templates:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u003Cform method=\"post\" action=\"\u003C?php echo mksddn_fh_get_form_action(); ?>\">\n    \u003C?php mksddn_fh_form_fields('contact-form'); ?>\n    \u003C!-- Your custom fields -->\n    \u003Cinput type=\"text\" name=\"name\" required>\n    \u003Cinput type=\"email\" name=\"email\" required>\n    \u003Cbutton type=\"submit\">Send\u003C\u002Fbutton>\n\u003C\u002Fform>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Available Functions:\u003C\u002Fstrong>\u003Cbr \u002F>\n* \u003Ccode>mksddn_fh_get_form_action()\u003C\u002Fcode> – get form action URL\u003Cbr \u002F>\n* \u003Ccode>mksddn_fh_form_fields($slug)\u003C\u002Fcode> – output hidden fields (nonce, form_id, honeypot)\u003Cbr \u002F>\n* \u003Ccode>mksddn_fh_get_form_config($slug)\u003C\u002Fcode> – get form configuration\u003Cbr \u002F>\n* \u003Ccode>mksddn_fh_get_rest_endpoint($slug)\u003C\u002Fcode> – get REST API endpoint for AJAX\u003Cbr \u002F>\n* \u003Ccode>mksddn_fh_form_has_files($slug)\u003C\u002Fcode> – check for file fields\u003Cbr \u002F>\n* \u003Ccode>mksddn_fh_enqueue_form_script()\u003C\u002Fcode> – enqueue AJAX script\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Accept Any Fields (Advanced):\u003C\u002Fstrong>\u003Cbr \u002F>\nFor custom forms where you control field names in templates, enable “Accept any fields from frontend” in form settings to skip field validation. This allows submitting ANY field names without defining them in Fields Configuration. All fields are still sanitized but type validation is skipped.\u003C\u002Fp>\n\u003Cp>See \u003Ccode>\u002Ftemplates\u002Fcustom-form-examples.php\u003C\u002Fcode> for detailed examples.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>3. REST API (AJAX)\u003C\u002Fstrong>\u003Cbr \u002F>\nSubmit forms via REST API without page reload:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>fetch('\u003C?php echo mksddn_fh_get_rest_endpoint(\"contact-form\"); ?>', {\n    method: 'POST',\n    headers: { 'Content-Type': 'application\u002Fjson' },\n    body: JSON.stringify(formData)\n});\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>Development Standards\u003C\u002Fh4>\n\u003Cp>\u003Cstrong>Coding\u003C\u002Fstrong>\u003Cbr \u002F>\n* WordPress Coding Standards compliance\u003Cbr \u002F>\n* SOLID principles\u003Cbr \u002F>\n* DRY (Don’t Repeat Yourself)\u003Cbr \u002F>\n* KISS (Keep It Simple)\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Security\u003C\u002Fstrong>\u003Cbr \u002F>\n* Input validation for all data\u003Cbr \u002F>\n* Output sanitization\u003Cbr \u002F>\n* Nonce verification (CSRF protection)\u003Cbr \u002F>\n* Capability checks\u003Cbr \u002F>\n* Rate limiting (1 request per 10 seconds per IP per form)\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Performance\u003C\u002Fstrong>\u003Cbr \u002F>\n* Minimal database queries\u003Cbr \u002F>\n* Data caching\u003Cbr \u002F>\n* Lazy loading of resources\u003Cbr \u002F>\n* Conditional script enqueuing\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Compatibility\u003C\u002Fstrong>\u003Cbr \u002F>\n* WordPress 5.0+ minimum\u003Cbr \u002F>\n* PHP 8.0+ minimum\u003Cbr \u002F>\n* Multisite support\u003Cbr \u002F>\n* RTL support\u003Cbr \u002F>\n* Accessibility standards (WCAG)\u003C\u002Fp>\n\u003Ch4>WordPress Hooks & Filters\u003C\u002Fh4>\n\u003Cp>\u003Cstrong>Filters:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>mksddn_fh_allowed_fields - Modify allowed field names for a form\n\nadd_filter('mksddn_fh_allowed_fields', function($allowed_fields, $form_id, $form_slug) {\n    \u002F\u002F Allow all fields for specific form\n    if ($form_slug === 'my-custom-form') {\n        return ['*'];\n    }\n    \u002F\u002F Add specific fields\n    return array_merge($allowed_fields, ['custom_field_1', 'custom_field_2']);\n}, 10, 3);\n\nmksddn_fh_allowed_redirect_hosts - Whitelist external domains for redirect URLs\n\nadd_filter('mksddn_fh_allowed_redirect_hosts', function($hosts) {\n    \u002F\u002F Allow specific external domains for redirects\n    return array_merge($hosts, ['example.com', 'trusted-partner.com']);\n});\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Actions:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>mksddn_forms_handler_log_security - Fired when unauthorized fields are detected\nmksddn_forms_handler_log_submission - Fired when form submission is processed\u003Ch3>REST API\u003C\u002Fh3>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Namespace: \u003Ccode>mksddn-forms-handler\u002Fv1\u003C\u002Fcode>\u003C\u002Fp>\n\u003Ch4>List Forms\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\u003Cstrong>Method\u003C\u002Fstrong>: GET\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Path\u003C\u002Fstrong>: \u003Ccode>\u002Fwp-json\u002Fmksddn-forms-handler\u002Fv1\u002Fforms\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Query Parameters\u003C\u002Fstrong>:\n\u003Cul>\n\u003Cli>\u003Ccode>per_page\u003C\u002Fcode> (1–100, default: 10)\u003C\u002Fli>\n\u003Cli>\u003Ccode>page\u003C\u002Fcode> (>=1, default: 1)\u003C\u002Fli>\n\u003Cli>\u003Ccode>search\u003C\u002Fcode> (string, optional)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Response Headers\u003C\u002Fstrong>: \u003Ccode>X-WP-Total\u003C\u002Fcode>, \u003Ccode>X-WP-TotalPages\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Get Single Form\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\u003Cstrong>Method\u003C\u002Fstrong>: GET\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Path\u003C\u002Fstrong>: \u003Ccode>\u002Fwp-json\u002Fmksddn-forms-handler\u002Fv1\u002Fforms\u002F{slug}\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Response\u003C\u002Fstrong>: Includes \u003Ccode>id\u003C\u002Fcode>, \u003Ccode>slug\u003C\u002Fcode>, \u003Ccode>title\u003C\u002Fcode>, \u003Ccode>submit_url\u003C\u002Fcode>, \u003Ccode>fields\u003C\u002Fcode> (sanitized config)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Submit Form\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\u003Cstrong>Method\u003C\u002Fstrong>: POST\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Path\u003C\u002Fstrong>: \u003Ccode>\u002Fwp-json\u002Fmksddn-forms-handler\u002Fv1\u002Fforms\u002F{slug}\u002Fsubmit\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Content Types\u003C\u002Fstrong>: JSON or multipart\u002Fform-data\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Body (JSON)\u003C\u002Fstrong>: Key\u002Fvalue pairs according to field configuration. The \u003Ccode>mksddn_fh_hp\u003C\u002Fcode> honeypot field may be present and must be empty (spam protection).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Body (Multipart)\u003C\u002Fstrong>: Fields and file uploads supported. For multiple files, use \u003Ccode>name[]\u003C\u002Fcode>.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Validation & Limits\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Only configured fields accepted; unauthorized fields return \u003Ccode>unauthorized_fields\u003C\u002Fcode> error\u003C\u002Fli>\n\u003Cli>Required fields, email, URL, number (min\u002Fmax\u002Fstep), tel (pattern), date, time, datetime-local are validated\u003C\u002Fli>\n\u003Cli>Maximum 50 fields; total payload size ≤ 100 KB\u003C\u002Fli>\n\u003Cli>Rate limiting: 1 request per 10 seconds per IP per form\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Examples\u003C\u002Fh4>\n\u003Cp>\u003Cstrong>List forms:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>curl -s 'https:\u002F\u002Fexample.com\u002Fwp-json\u002Fmksddn-forms-handler\u002Fv1\u002Fforms'\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Get single form:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>curl -s 'https:\u002F\u002Fexample.com\u002Fwp-json\u002Fmksddn-forms-handler\u002Fv1\u002Fforms\u002Fcontact'\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Submit form (JSON):\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>curl -s -X POST \\\n  -H 'Content-Type: application\u002Fjson' \\\n  -d '{\"name\":\"John\",\"email\":\"john@example.com\",\"message\":\"Hi\",\"mksddn_fh_hp\":\"\"}' \\\n  'https:\u002F\u002Fexample.com\u002Fwp-json\u002Fmksddn-forms-handler\u002Fv1\u002Fforms\u002Fcontact\u002Fsubmit'\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Submit form with files (multipart):\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>curl -s -X POST \\\n  -F 'name=John' \\\n  -F 'email=john@example.com' \\\n  -F 'attachments[]=@\u002Fpath\u002Fto\u002Ffile1.pdf' \\\n  -F 'attachments[]=@\u002Fpath\u002Fto\u002Ffile2.png' \\\n  'https:\u002F\u002Fexample.com\u002Fwp-json\u002Fmksddn-forms-handler\u002Fv1\u002Fforms\u002Fcontact\u002Fsubmit'\u003Ch3>Supported Field Types\u003C\u002Fh3>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Fields are configured as JSON in the form settings. Supported types:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Basic\u003C\u002Fstrong>: text, email, password\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Input\u003C\u002Fstrong>: tel, url, number, date, time, datetime-local\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Text\u003C\u002Fstrong>: textarea\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Choice\u003C\u002Fstrong>: checkbox, select (supports multiple), radio\u003C\u002Fli>\n\u003Cli>\u003Cstrong>File\u003C\u002Fstrong>: file uploads (form and REST multipart)\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Array\u003C\u002Fstrong>: array_of_objects – array of objects with nested field validation\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Field Configuration Notes\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\u003Ccode>name\u003C\u002Fcode> – field name (required, used as form input name)\u003C\u002Fli>\n\u003Cli>\u003Ccode>label\u003C\u002Fcode> – field label displayed in forms and admin (optional, falls back to \u003Ccode>name\u003C\u002Fcode>)\u003C\u002Fli>\n\u003Cli>\u003Ccode>notification_label\u003C\u002Fcode> – custom label for Telegram\u002Femail notifications (optional, priority: notification_label \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> label \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> name)\u003C\u002Fli>\n\u003Cli>\u003Ccode>type\u003C\u002Fcode> – field type (required)\u003C\u002Fli>\n\u003Cli>\u003Ccode>required\u003C\u002Fcode> – whether field is required (boolean, default: false)\u003C\u002Fli>\n\u003Cli>\u003Ccode>options\u003C\u002Fcode> can be an array of strings or objects \u003Ccode>{ \"value\": \"...\", \"label\": \"...\" }\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>For \u003Ccode>select\u003C\u002Fcode> with multiple choice, set \u003Ccode>multiple: true\u003C\u002Fcode> (shortcode renders \u003Ccode>name[]\u003C\u002Fcode>)\u003C\u002Fli>\n\u003Cli>For \u003Ccode>number\u003C\u002Fcode>, optional attributes: \u003Ccode>min\u003C\u002Fcode>, \u003Ccode>max\u003C\u002Fcode>, \u003Ccode>step\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>For \u003Ccode>tel\u003C\u002Fcode>, optional \u003Ccode>pattern\u003C\u002Fcode> (default server validation uses \u003Ccode>^\\+?\\d{7,15}$\u003C\u002Fcode>)\u003C\u002Fli>\n\u003Cli>For \u003Ccode>date\u002Ftime\u002Fdatetime-local\u003C\u002Fcode>, server validates formats: \u003Ccode>YYYY-MM-DD\u003C\u002Fcode>, \u003Ccode>HH:MM\u003C\u002Fcode>, \u003Ccode>YYYY-MM-DDTHH:MM\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>For REST submissions, send arrays for multiple selects\u003C\u002Fli>\n\u003Cli>Pattern validation: use standard regex syntax (backslashes are preserved, invalid patterns are rejected)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>File Field Options\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\u003Ccode>allowed_extensions\u003C\u002Fcode>: Array of extensions, e.g. \u003Ccode>[\"pdf\",\"png\",\"jpg\"]\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>max_size_mb\u003C\u002Fcode>: Maximum size per file (default: 10)\u003C\u002Fli>\n\u003Cli>\u003Ccode>max_files\u003C\u002Fcode>: Maximum files per field (default: 5)\u003C\u002Fli>\n\u003Cli>\u003Ccode>multiple\u003C\u002Fcode>: Allow multiple files\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Example JSON Configuration\u003C\u002Fh4>\n\u003Cpre>\u003Ccode>[\n  {\"name\":\"name\",\"label\":\"Name\",\"type\":\"text\",\"required\":true,\"placeholder\":\"Your name\"},\n  {\"name\":\"email\",\"label\":\"Email\",\"notification_label\":\"Email Address\",\"type\":\"email\",\"required\":true},\n  {\"name\":\"phone\",\"label\":\"Phone\",\"type\":\"tel\",\"pattern\":\"^\\\\\\\\+?\\\\\\\\d{7,15}$\"},\n  {\"name\":\"website\",\"label\":\"Website\",\"type\":\"url\"},\n  {\"name\":\"age\",\"label\":\"Age\",\"type\":\"number\",\"min\":1,\"max\":120,\"step\":1},\n  {\"name\":\"birth\",\"label\":\"Birth date\",\"type\":\"date\"},\n  {\"name\":\"message\",\"label\":\"Message\",\"type\":\"textarea\",\"required\":true},\n  {\"name\":\"agree\",\"label\":\"I agree to Terms\",\"type\":\"checkbox\",\"required\":true},\n  {\n    \"name\":\"services\",\n    \"label\":\"Choose services\",\n    \"type\":\"select\",\n    \"multiple\":true,\n    \"options\":[\"seo\",\"smm\",\"ads\"]\n  },\n  {\n    \"name\":\"attachments\",\n    \"label\":\"Attach files\",\n    \"type\":\"file\",\n    \"multiple\":true,\n    \"allowed_extensions\":[\"pdf\",\"png\",\"jpg\"],\n    \"max_size_mb\":10,\n    \"max_files\":3\n  },\n  {\n    \"name\":\"products\",\n    \"label\":\"Products\",\n    \"type\":\"array_of_objects\",\n    \"required\":true,\n    \"fields\":[\n      {\"name\":\"name\",\"label\":\"Product Name\",\"type\":\"text\",\"required\":true},\n      {\"name\":\"size\",\"label\":\"Size\",\"type\":\"text\",\"required\":true},\n      {\"name\":\"color\",\"label\":\"Color\",\"type\":\"text\",\"required\":true},\n      {\"name\":\"quantity\",\"label\":\"Quantity\",\"type\":\"number\",\"required\":true,\"min\":1},\n      {\"name\":\"price\",\"label\":\"Price\",\"type\":\"number\",\"required\":true,\"min\":0}\n    ]\n  }\n]\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>Pattern Validation Examples\u003C\u002Fh4>\n\u003Cp>Common regex patterns for validation (use in JSON with double backslashes):\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Phone (international): \u003Ccode>\"pattern\": \"^\\\\+?\\\\d{7,15}$\"\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>Phone (US): \u003Ccode>\"pattern\": \"^\\\\(\\\\d{3}\\\\)\\\\s?\\\\d{3}-\\\\d{4}$\"\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>Postal code (US): \u003Ccode>\"pattern\": \"^\\\\d{5}(-\\\\d{4})?$\"\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>Postal code (RU): \u003Ccode>\"pattern\": \"^\\\\d{6}$\"\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>Only letters: \u003Ccode>\"pattern\": \"^[a-zA-Z]+$\"\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>Alphanumeric: \u003Ccode>\"pattern\": \"^[a-zA-Z0-9]+$\"\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>URL slug: \u003Ccode>\"pattern\": \"^[a-z0-9-]+$\"\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Important notes:\u003C\u002Fstrong>\u003Cbr \u002F>\n* In JSON, backslashes must be doubled (e.g., \u003Ccode>\\\\d\u003C\u002Fcode> instead of \u003Ccode>\\d\u003C\u002Fcode>, \u003Ccode>\\\\+\u003C\u002Fcode> instead of \u003Ccode>\\+\u003C\u002Fcode>)\u003Cbr \u002F>\n* HTML tags in patterns will be automatically removed for security\u003Cbr \u002F>\n* Invalid regex patterns will be rejected silently (check debug.log if WP_DEBUG is enabled)\u003C\u002Fp>\n\u003Ch4>Array of Objects Field Type\u003C\u002Fh4>\n\u003Cp>The \u003Ccode>array_of_objects\u003C\u002Fcode> type allows you to define arrays with nested field validation. Each item in the array is validated according to the nested \u003Ccode>fields\u003C\u002Fcode> configuration.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Configuration:\u003C\u002Fstrong>\u003Cbr \u002F>\n* \u003Ccode>name\u003C\u002Fcode>: Field name (required)\u003Cbr \u002F>\n* \u003Ccode>label\u003C\u002Fcode>: Field label (required)\u003Cbr \u002F>\n* \u003Ccode>notification_label\u003C\u002Fcode>: Custom label for notifications (optional, priority: notification_label \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> label \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> name)\u003Cbr \u002F>\n* \u003Ccode>type\u003C\u002Fcode>: Must be \u003Ccode>\"array_of_objects\"\u003C\u002Fcode> (required)\u003Cbr \u002F>\n* \u003Ccode>required\u003C\u002Fcode>: Whether the array is required (default: false)\u003Cbr \u002F>\n* \u003Ccode>fields\u003C\u002Fcode>: Array of field configurations for each object in the array (required)\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Nested fields support all standard field types\u003C\u002Fstrong> (text, email, tel, url, number, textarea, etc.) with full validation. Nested fields also support \u003Ccode>notification_label\u003C\u002Fcode> for custom labels in Telegram\u002Femail notifications.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Example REST API submission:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{\n  \"email\": \"user@example.com\",\n  \"phone\": \"+1234567890\",\n  \"products\": [\n    {\n      \"name\": \"T-Shirt\",\n      \"size\": \"M\",\n      \"color\": \"Red\",\n      \"quantity\": 2,\n      \"price\": 1500\n    },\n    {\n      \"name\": \"Jeans\",\n      \"size\": \"L\",\n      \"color\": \"Blue\",\n      \"quantity\": 1,\n      \"price\": 3000\n    }\n  ]\n}\u003Ch3>External Services\u003C\u002Fh3>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>This plugin can connect to external services when explicitly enabled in a form’s settings:\u003C\u002Fp>\n\u003Ch4>Google OAuth2 and Google Sheets API\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\u003Cstrong>Purpose\u003C\u002Fstrong>: Authenticate and append rows to a spreadsheet\u003C\u002Fli>\n\u003Cli>\u003Cstrong>When\u003C\u002Fstrong>: Only if “Send to Google Sheets” is enabled for a form and valid credentials are provided\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Data sent\u003C\u002Fstrong>: Form fields configured for the form, form title, timestamp\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Endpoints used\u003C\u002Fstrong>: \u003Ccode>https:\u002F\u002Foauth2.googleapis.com\u002Ftoken\u003C\u002Fcode>, \u003Ccode>https:\u002F\u002Fsheets.googleapis.com\u002Fv4\u002Fspreadsheets\u002F...\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Terms\u003C\u002Fstrong>: https:\u002F\u002Fpolicies.google.com\u002Fterms\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Privacy\u003C\u002Fstrong>: https:\u002F\u002Fpolicies.google.com\u002Fprivacy\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Telegram Bot API\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\u003Cstrong>Purpose\u003C\u002Fstrong>: Send a message with submission content to specified chat(s)\u003C\u002Fli>\n\u003Cli>\u003Cstrong>When\u003C\u002Fstrong>: Only if “Send to Telegram” is enabled for a form and bot token + chat IDs are configured\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Data sent\u003C\u002Fstrong>: Form fields configured for the form, form title\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Endpoint used\u003C\u002Fstrong>: \u003Ccode>https:\u002F\u002Fapi.telegram.org\u002Fbot\u003Ctoken>\u002FsendMessage\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Terms\u002FPrivacy\u003C\u002Fstrong>: https:\u002F\u002Ftelegram.org\u002Fprivacy\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Privacy Notes\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>No IP address or user agent is transmitted to external services; only form field values are sent\u003C\u002Fli>\n\u003Cli>External delivery is opt-in per form and disabled by default\u003C\u002Fli>\n\u003C\u002Ful>\n","Advanced form processing system with REST API support, Telegram notifications, and Google Sheets integration.",653,"2026-02-20T12:32:00.000Z","5.0","8.0",[46,47,48,30,49],"form-handler","forms","google-sheets","telegram","https:\u002F\u002Fgithub.com\u002Fmksddn\u002FWP-MksDdn-Forms-Handler","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fmksddn-forms-handler.2.4.0.zip","2026-03-15T14:54:45.397Z",{"slug":54,"name":55,"version":56,"author":5,"author_profile":6,"description":57,"short_description":58,"active_installs":8,"downloaded":59,"rating":8,"num_ratings":8,"last_updated":60,"tested_up_to":22,"requires_at_least":23,"requires_php":44,"tags":61,"homepage":67,"download_link":68,"security_score":9,"vuln_count":8,"unpatched_count":8,"last_vuln_date":33,"fetched_at":69},"mksddn-migrate-content","MksDdn Migrate Content","2.1.2","\u003Cp>MksDdn Migrate Content is a clean-room migration suite that packages your site into deterministic \u003Ccode>.wpbkp\u003C\u002Fcode> archives. Each bundle contains a manifest, checksum, database segments, media, selected files, and user decisions, so imports stay predictable.\u003C\u002Fp>\n\u003Ch4>Why MksDdn Migrate Content?\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\u003Cstrong>Dual export modes\u003C\u002Fstrong> – choose Full Site (database + uploads\u002Fplugins\u002Fthemes) or Selected Content (multi-select posts\u002Fpages\u002FCPTs) with or without referenced media.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Chunked pipeline\u003C\u002Fstrong> – large archives stream through REST API endpoints with resume tokens, so multi‑GB transfers survive flaky networks.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>User merge control\u003C\u002Fstrong> – compare archive vs current users and decide how to merge conflicts.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Theme import mode\u003C\u002Fstrong> – when a theme archive is detected, choose replace vs merge before applying changes.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Integrity & safety\u003C\u002Fstrong> – \u003Ccode>.wpbkp\u003C\u002Fcode> archives ship with manifests and checksums; imports verify capabilities, nonces, and disk space before touching data.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Feature Highlights\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Archive format with manifest, checksum, and payload folders (\u003Ccode>content.json\u003C\u002Fcode>, \u003Ccode>media\u002F\u003C\u002Fcode>, \u003Ccode>options\u002F\u003C\u002Fcode>, filesystem slices).\u003C\u002Fli>\n\u003Cli>Media scanner that collects featured images, galleries, attachments referenced inside blocks or shortcodes.\u003C\u002Fli>\n\u003Cli>File-system coverage for \u003Ccode>wp-content\u002Fuploads\u003C\u002Fcode>, \u003Ccode>wp-content\u002Fplugins\u003C\u002Fcode>, \u003Ccode>wp-content\u002Fthemes\u003C\u002Fcode> with filters to skip VCS\u002Fsystem files.\u003C\u002Fli>\n\u003Cli>Chunked upload\u002Fdownload JS client with live progress, auto-resume, and graceful fallback to direct transfer.\u003C\u002Fli>\n\u003Cli>Server file import – select backup files directly from \u003Ccode>wp-content\u002Fuploads\u002Fmksddn-mc\u002Fimports\u002F\u003C\u002Fcode> directory without browser uploads.\u003C\u002Fli>\n\u003Cli>Custom \u003Ccode>.wpbkp\u003C\u002Fcode> drag-and-drop uploader with checksum guardrails (UI polish deferred to next milestone, functionality already complete).\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Architecture\u003C\u002Fh3>\n\u003Cp>The plugin follows SOLID principles and WordPress Coding Standards with a clean, modular architecture:\u003C\u002Fp>\n\u003Ch4>Service Container & Dependency Injection\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Centralized \u003Ccode>ServiceContainer\u003C\u002Fcode> manages all dependencies\u003C\u002Fli>\n\u003Cli>Service Providers (\u003Ccode>CoreServiceProvider\u003C\u002Fcode>, \u003Ccode>AdminServiceProvider\u003C\u002Fcode>, \u003Ccode>ExportServiceProvider\u003C\u002Fcode>, \u003Ccode>ImportServiceProvider\u003C\u002Fcode>, \u003Ccode>ChunkServiceProvider\u003C\u002Fcode>) register services\u003C\u002Fli>\n\u003Cli>All dependencies resolved through container, eliminating direct instantiation\u003C\u002Fli>\n\u003Cli>Full support for interface-based dependency injection\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Request Handlers\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\u003Ccode>ExportRequestHandler\u003C\u002Fcode> – handles export requests\u003C\u002Fli>\n\u003Cli>\u003Ccode>ImportRequestHandler\u003C\u002Fcode> – delegates to specialized import services (supports unified import via \u003Ccode>UnifiedImportOrchestrator\u003C\u002Fcode>)\u003C\u002Fli>\n\u003Cli>\u003Ccode>UserMergeRequestHandler\u003C\u002Fcode> – processes user merge operations\u003C\u002Fli>\n\u003Cli>\u003Ccode>ThemePreviewRequestHandler\u003C\u002Fcode> – handles theme preview cancel operations\u003C\u002Fli>\n\u003Cli>\u003Ccode>ChunkRestController\u003C\u002Fcode> – REST API controller for chunked upload\u002Fdownload operations\u003C\u002Fli>\n\u003Cli>All handlers implement corresponding interfaces for testability\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Service Layer\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\u003Ccode>SelectedContentImportService\u003C\u002Fcode> – handles selected content imports\u003C\u002Fli>\n\u003Cli>\u003Ccode>FullSiteImportService\u003C\u002Fcode> – manages full site imports\u003C\u002Fli>\n\u003Cli>\u003Ccode>ThemeImportService\u003C\u002Fcode> – handles theme archive imports\u003C\u002Fli>\n\u003Cli>\u003Ccode>UnifiedImportOrchestrator\u003C\u002Fcode> – orchestrates unified import with automatic type detection and routing\u003C\u002Fli>\n\u003Cli>\u003Ccode>ImportTypeDetector\u003C\u002Fcode> – detects import type (full site or selected content) from archive file\u003C\u002Fli>\n\u003Cli>\u003Ccode>ImportFileValidator\u003C\u002Fcode> – validates uploaded files\u003C\u002Fli>\n\u003Cli>\u003Ccode>ImportPayloadPreparer\u003C\u002Fcode> – prepares import payloads\u003C\u002Fli>\n\u003Cli>\u003Ccode>ServerBackupScanner\u003C\u002Fcode> – scans and validates backup files on the server\u003C\u002Fli>\n\u003Cli>\u003Ccode>ResponseHandler\u003C\u002Fcode> – manages redirects and status messages\u003C\u002Fli>\n\u003Cli>\u003Ccode>NotificationService\u003C\u002Fcode> – handles user notifications\u003C\u002Fli>\n\u003Cli>\u003Ccode>ProgressService\u003C\u002Fcode> – tracks operation progress\u003C\u002Fli>\n\u003Cli>\u003Ccode>ErrorHandler\u003C\u002Fcode> – centralized error handling and logging\u003C\u002Fli>\n\u003Cli>\u003Ccode>UserDiffBuilder\u003C\u002Fcode> – builds user difference comparison\u003C\u002Fli>\n\u003Cli>\u003Ccode>UserMergeApplier\u003C\u002Fcode> – applies user merge operations\u003C\u002Fli>\n\u003Cli>\u003Ccode>ThemePreviewStore\u003C\u002Fcode> – stores pending theme import previews\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Contracts (Interfaces)\u003C\u002Fh4>\n\u003Cp>All key components implement interfaces:\u003Cbr \u002F>\n* \u003Ccode>ExporterInterface\u003C\u002Fcode>, \u003Ccode>ImporterInterface\u003C\u002Fcode>\u003Cbr \u002F>\n* \u003Ccode>MediaCollectorInterface\u003C\u002Fcode>, \u003Ccode>ChunkJobRepositoryInterface\u003C\u002Fcode>\u003Cbr \u002F>\n* \u003Ccode>UserPreviewStoreInterface\u003C\u002Fcode>, \u003Ccode>ThemePreviewStoreInterface\u003C\u002Fcode>, \u003Ccode>UserDiffBuilderInterface\u003C\u002Fcode>, \u003Ccode>UserMergeApplierInterface\u003C\u002Fcode>\u003Cbr \u002F>\n* \u003Ccode>NotificationServiceInterface\u003C\u002Fcode>, \u003Ccode>ProgressServiceInterface\u003C\u002Fcode>\u003Cbr \u002F>\n* \u003Ccode>ArchiveHandlerInterface\u003C\u002Fcode>, \u003Ccode>ValidatorInterface\u003C\u002Fcode>\u003Cbr \u002F>\n* Request handler interfaces for all handlers\u003C\u002Fp>\n\u003Ch4>Error Handling\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Specialized exceptions: \u003Ccode>ValidationException\u003C\u002Fcode>, \u003Ccode>FileOperationException\u003C\u002Fcode>, \u003Ccode>DatabaseOperationException\u003C\u002Fcode>, \u003Ccode>ImportException\u003C\u002Fcode>, \u003Ccode>ExportException\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>Centralized \u003Ccode>ErrorHandler\u003C\u002Fcode> for consistent error processing\u003C\u002Fli>\n\u003Cli>Proper logging and user-friendly error messages\u003C\u002Fli>\n\u003Cli>Validation classes: \u003Ccode>ArchiveValidator\u003C\u002Fcode>, \u003Ccode>ImportDataValidator\u003C\u002Fcode>, \u003Ccode>ExportDataValidator\u003C\u002Fcode>, \u003Ccode>FileValidator\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Performance\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\u003Ccode>BatchLoader\u003C\u002Fcode> for optimized database queries (prevents N+1 problems)\u003C\u002Fli>\n\u003Cli>Efficient media collection with batch processing (\u003Ccode>AttachmentCollector\u003C\u002Fcode>)\u003C\u002Fli>\n\u003Cli>Chunked transfer for large files via REST API (\u003Ccode>ChunkRestController\u003C\u002Fcode>)\u003C\u002Fli>\n\u003Cli>Memory-efficient streaming for large archives\u003C\u002Fli>\n\u003Cli>\u003Ccode>FullArchivePayload\u003C\u002Fcode> for efficient archive payload handling\u003C\u002Fli>\n\u003Cli>\u003Ccode>ContentCollector\u003C\u002Fcode> for filesystem content collection\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Security\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>All admin operations check \u003Ccode>current_user_can('manage_options')\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>Nonce verification for all forms and AJAX requests\u003C\u002Fli>\n\u003Cli>REST API endpoints protected with permission callbacks\u003C\u002Fli>\n\u003Cli>Input sanitization using WordPress sanitization functions\u003C\u002Fli>\n\u003Cli>Output escaping with \u003Ccode>esc_html()\u003C\u002Fcode>, \u003Ccode>esc_attr()\u003C\u002Fcode>, \u003Ccode>esc_url()\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>File upload validation with MIME type checking\u003C\u002Fli>\n\u003Cli>Path traversal protection for server file access (\u003Ccode>ServerBackupScanner\u003C\u002Fcode>)\u003C\u002Fli>\n\u003Cli>Path traversal protection for archive extraction (full site + theme import)\u003C\u002Fli>\n\u003Cli>\u003Ccode>SiteUrlGuard\u003C\u002Fcode> prevents accidental site URL changes during import\u003C\u002Fli>\n\u003Cli>\u003Ccode>ImportLock\u003C\u002Fcode> prevents concurrent import operations\u003C\u002Fli>\n\u003Cli>\u003Ccode>DomainReplacer\u003C\u002Fcode> safely handles URL replacement during migrations\u003C\u002Fli>\n\u003C\u002Ful>\n","Reliable chunked migrations powered by custom .wpbkp archives.",511,"2026-02-25T11:15:00.000Z",[62,63,64,65,66],"backup","export","import","migration","wpbkp","https:\u002F\u002Fgithub.com\u002Fmksddn\u002FWP-MksDdn-Migrate-Content","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fmksddn-migrate-content.2.1.2.zip","2026-03-15T15:16:48.613Z"]