Customize the default WooCommerce email templates design and text through the native WordPress customizer. Preview emails and send test emails.
Category Scores
Top Issues by Category
maintainability200
security114
i18n33
supply_chain1
Issues Details
349 issues found in latest scan
Global variables defined by a theme/plugin should start with the theme/plugin prefix. Found: "$account_section".
All output should be run through an escaping function (see the Security sections in the WordPress Developer Handbooks), found '$content'.
Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "customize_save".
All output should be run through an escaping function (like esc_html_e() or esc_attr_e()), found '_e'.
Mismatched text domain. Expected 'kadence-woocommerce-email-designer' but got 'customizer-export-import'.
A function call to __() with texts containing placeholders was found, but was not accompanied by a "translators:" comment on the line above to clarify the meaning of the placeholders.
Classes declared by a theme/plugin should start with the theme/plugin prefix. Found: "KWED_Cartflows_CA_Email".
Detected usage of a non-sanitized input variable: $_POST['customized']
Processing form data without nonce verification.
Detected usage of a possibly undefined superglobal array index: $_FILES['kadence-woomail-import-file']. Check that the array index exists before using it.
$_REQUEST['kt-woomail-export'] not unslashed before sanitization. Use wp_unslash() or similar
date() is affected by runtime timezone changes which can cause date/time to be incorrectly displayed. Use gmdate() instead.
Processing form data without nonce verification.
Global constants defined by a theme/plugin should start with the theme/plugin prefix. Found: "KT_WOOMAIL_PATH".
Multiple placeholders in translatable strings should be ordered. Expected "%1$s, %2$s", but got "%s, %s" in '%s is now back in stock at %s. '.
The plugin name includes a restricted term. Your chosen plugin name - "Kadence WooCommerce Email Designer" - contains the restricted term "woocommerce" which cannot be used within in your plugin name, unless your plugin name contains one of the allowed patterns: "for woocommerce", "with woocommerce", "using woocommerce", or "and woocommerce". The term must still not appear anywhere else in your name.
load_plugin_textdomain() has been discouraged since WordPress version 4.6. When your plugin is hosted on WordPress.org, you no longer need to manually include this function call for translations under your plugin slug. WordPress will automatically load the translations for you as needed.
wp_redirect() found. Using wp_safe_redirect(), along with the "allowed_redirect_hosts" filter if needed, can help avoid any chances of malicious redirects within code. It is also important to remember to call exit() after a redirect so that no other unwanted code is executed.
PHP file should prevent direct access. Add a check like: if ( ! defined( 'ABSPATH' ) ) exit;
Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "{$email_id}_email_body".
unlink() is discouraged. Use wp_delete_file() to delete a file.
Resource version not set in call to wp_enqueue_style(). This means new versions of the style may not always be loaded due to browser caching.
Multiple placeholders in translatable strings should be ordered. Mix of ordered and non-ordered placeholders found. Found: "%d, %s, %3$s" in 'The automatic recurring payment for order #%d from %s has failed. The payment will be retried %3$s.'.
Translatable string should not be wrapped in HTML. Found: '<p>Use native WordPress Customizer to make Woocommerce emails match your brand.</p>'
| Code | Type | Message | Count |
|---|---|---|---|
| WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound | WARNING | Global variables defined by a theme/plugin should start with the theme/plugin prefix. Found: "$account_section". | 152 |
| WordPress.Security.EscapeOutput.OutputNotEscaped | ERROR | All output should be run through an escaping function (see the Security sections in the WordPress Developer Handbooks), found '$content'. | 55 |
| WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound | WARNING | Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "customize_save". | 24 |
| WordPress.Security.EscapeOutput.UnsafePrintingFunction | ERROR | All output should be run through an escaping function (like esc_html_e() or esc_attr_e()), found '_e'. | 24 |
| WordPress.WP.I18n.TextDomainMismatch | ERROR | Mismatched text domain. Expected 'kadence-woocommerce-email-designer' but got 'customizer-export-import'. | 16 |
| WordPress.WP.I18n.MissingTranslatorsComment | ERROR | A function call to __() with texts containing placeholders was found, but was not accompanied by a "translators:" comment on the line above to clarify the meaning of the placeholders. | 10 |
| WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedClassFound | WARNING | Classes declared by a theme/plugin should start with the theme/plugin prefix. Found: "KWED_Cartflows_CA_Email". | 8 |
| WordPress.Security.ValidatedSanitizedInput.InputNotSanitized | WARNING | Detected usage of a non-sanitized input variable: $_POST['customized'] | 8 |
| WordPress.Security.NonceVerification.Recommended | WARNING | Processing form data without nonce verification. | 7 |
| WordPress.Security.ValidatedSanitizedInput.InputNotValidated | WARNING | Detected usage of a possibly undefined superglobal array index: $_FILES['kadence-woomail-import-file']. Check that the array index exists before using it. | 7 |
| WordPress.Security.ValidatedSanitizedInput.MissingUnslash | WARNING | $_REQUEST['kt-woomail-export'] not unslashed before sanitization. Use wp_unslash() or similar | 7 |
| WordPress.DateTime.RestrictedFunctions.date_date | ERROR | date() is affected by runtime timezone changes which can cause date/time to be incorrectly displayed. Use gmdate() instead. | 5 |
| WordPress.Security.NonceVerification.Missing | WARNING | Processing form data without nonce verification. | 4 |
| WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedConstantFound | WARNING | Global constants defined by a theme/plugin should start with the theme/plugin prefix. Found: "KT_WOOMAIL_PATH". | 3 |
| WordPress.WP.I18n.UnorderedPlaceholdersText | ERROR | Multiple placeholders in translatable strings should be ordered. Expected "%1$s, %2$s", but got "%s, %s" in '%s is now back in stock at %s. '. | 3 |
| trademarked_term | WARNING | The plugin name includes a restricted term. Your chosen plugin name - "Kadence WooCommerce Email Designer" - contains the restricted term "woocommerce" which cannot be used within in your plugin name, unless your plugin name contains one of the allowed patterns: "for woocommerce", "with woocommerce", "using woocommerce", or "and woocommerce". The term must still not appear anywhere else in your name. | 3 |
| PluginCheck.CodeAnalysis.DiscouragedFunctions.load_plugin_textdomainFound | WARNING | load_plugin_textdomain() has been discouraged since WordPress version 4.6. When your plugin is hosted on WordPress.org, you no longer need to manually include this function call for translations under your plugin slug. WordPress will automatically load the translations for you as needed. | 2 |
| WordPress.Security.SafeRedirect.wp_redirect_wp_redirect | WARNING | wp_redirect() found. Using wp_safe_redirect(), along with the "allowed_redirect_hosts" filter if needed, can help avoid any chances of malicious redirects within code. It is also important to remember to call exit() after a redirect so that no other unwanted code is executed. | 2 |
| missing_direct_file_access_protection | ERROR | PHP file should prevent direct access. Add a check like: if ( ! defined( 'ABSPATH' ) ) exit; | 2 |
| WordPress.NamingConventions.PrefixAllGlobals.DynamicHooknameFound | WARNING | Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "{$email_id}_email_body". | 1 |
| WordPress.WP.AlternativeFunctions.unlink_unlink | ERROR | unlink() is discouraged. Use wp_delete_file() to delete a file. | 1 |
| WordPress.WP.EnqueuedResourceParameters.MissingVersion | WARNING | Resource version not set in call to wp_enqueue_style(). This means new versions of the style may not always be loaded due to browser caching. | 1 |
| WordPress.WP.I18n.MixedOrderedPlaceholdersText | ERROR | Multiple placeholders in translatable strings should be ordered. Mix of ordered and non-ordered placeholders found. Found: "%d, %s, %3$s" in 'The automatic recurring payment for order #%d from %s has failed. The payment will be retried %3$s.'. | 1 |
| WordPress.WP.I18n.NoHtmlWrappedStrings | WARNING | Translatable string should not be wrapped in HTML. Found: '<p>Use native WordPress Customizer to make Woocommerce emails match your brand.</p>' | 1 |
| hidden_files | ERROR | Hidden files are not permitted. | 1 |
Latest Snapshot
Findings
349
Errors
119
Warnings
230
Score History
First score snapshot
First scan completed Jun 20, 2026
v1.5.18 · Plugin Check 2.0.0 · Model 2026.06-mvp-static-v2
Jun 20, 2026
v1.5.18
34
Latest
- Findings
- 349
- Errors
- 119
- Warnings
- 230
- Plugin Check
- 2.0.0
- Model
- 2026.06-mvp-static-v2
| Scan | Score | Findings | Errors | Warnings | Plugin | Plugin Check | Model |
|---|---|---|---|---|---|---|---|
| Jun 20, 2026Latest | 34 | 349 | 119 | 230 | v1.5.18 | 2.0.0 | 2026.06-mvp-static-v2 |