The best Table of Contents plugin for WordPress. Auto or manual insert, Gutenberg Block, beautiful themes, onboarding wizard, and deep customization.
Category Scores
Top Issues by Category
maintainability1,631
security718
Issues Details
2,408 issues found in latest scan
Global variables defined by a theme/plugin should start with the theme/plugin prefix. Found: "$account_addon_ids".
All output should be run through an escaping function (see the Security sections in the WordPress Developer Handbooks), found '" <a href='{$skip_url}' class='button button-small button-secondary'>{$use_plugin_anonymously_text}</a>"'.
Functions declared in the global namespace by a theme/plugin should start with the theme/plugin prefix. Found: "_fs_text".
Global constants defined by a theme/plugin should start with the theme/plugin prefix. Found: "FS_API__ADDRESS".
Classes declared by a theme/plugin should start with the theme/plugin prefix. Found: "FS_Admin_Menu_Manager".
Detected usage of a non-sanitized input variable: $_GET[$key]
$_GET[$key] not unslashed before sanitization. Use wp_unslash() or similar
Detected usage of a possibly undefined superglobal array index: $_GET['joli_toc_token']. Check that the array index exists before using it.
Processing form data without nonce verification.
var_export() found. Debug code should not normally be used in production.
Use of heredoc syntax (<<<) is not allowed; use standard strings or inline HTML instead
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: "fs_plugins_api".
The $text parameter must be a single text string literal. Found: $num
All output should be run through an escaping function (see the Security sections in the WordPress Developer Handbooks), found '$message'.
Function "get_block_wrapper_attributes()" requires WordPress 5.6.0, but your plugin minimum supported version is WordPress 5.0.0.
date() is affected by runtime timezone changes which can cause date/time to be incorrectly displayed. Use gmdate() instead.
debug_backtrace() found. Debug code should not normally be used in production.
rand() is discouraged. Use the far less predictable wp_rand() instead.
Resource version not set in call to wp_enqueue_script(). This means new versions of the script may not always be loaded due to browser caching.
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.
parse_url() is discouraged because of inconsistency in the output across PHP versions; use wp_parse_url() instead.
Direct database call without caching detected. Consider using wp_cache_get() / wp_cache_set() or wp_cache_delete().
| 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_addon_ids". | 1,281 |
| WordPress.Security.EscapeOutput.OutputNotEscaped | ERROR | All output should be run through an escaping function (see the Security sections in the WordPress Developer Handbooks), found '" <a href='{$skip_url}' class='button button-small button-secondary'>{$use_plugin_anonymously_text}</a>"'. | 555 |
| WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedFunctionFound | WARNING | Functions declared in the global namespace by a theme/plugin should start with the theme/plugin prefix. Found: "_fs_text". | 99 |
| WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedConstantFound | WARNING | Global constants defined by a theme/plugin should start with the theme/plugin prefix. Found: "FS_API__ADDRESS". | 93 |
| WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedClassFound | WARNING | Classes declared by a theme/plugin should start with the theme/plugin prefix. Found: "FS_Admin_Menu_Manager". | 55 |
| WordPress.Security.ValidatedSanitizedInput.InputNotSanitized | WARNING | Detected usage of a non-sanitized input variable: $_GET[$key] | 48 |
| WordPress.Security.ValidatedSanitizedInput.MissingUnslash | WARNING | $_GET[$key] not unslashed before sanitization. Use wp_unslash() or similar | 44 |
| WordPress.Security.ValidatedSanitizedInput.InputNotValidated | WARNING | Detected usage of a possibly undefined superglobal array index: $_GET['joli_toc_token']. Check that the array index exists before using it. | 41 |
| WordPress.Security.NonceVerification.Recommended | WARNING | Processing form data without nonce verification. | 23 |
| WordPress.PHP.DevelopmentFunctions.error_log_var_export | WARNING | var_export() found. Debug code should not normally be used in production. | 19 |
| PluginCheck.CodeAnalysis.Heredoc.NotAllowed | ERROR | Use of heredoc syntax (<<<) is not allowed; use standard strings or inline HTML instead | 16 |
| missing_direct_file_access_protection | ERROR | PHP file should prevent direct access. Add a check like: if ( ! defined( 'ABSPATH' ) ) exit; | 13 |
| WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound | WARNING | Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "fs_plugins_api". | 10 |
| WordPress.WP.I18n.MissingArgDomain | ERROR | Missing $domain parameter in function call to esc_attr_e(). | 8 |
| WordPress.WP.I18n.NonSingularStringLiteralText | ERROR | The $text parameter must be a single text string literal. Found: $num | 8 |
| WordPress.Security.EscapeOutput.ExceptionNotEscaped | ERROR | All output should be run through an escaping function (see the Security sections in the WordPress Developer Handbooks), found '$message'. | 7 |
| wp_function_not_compatible_with_requires_wp | ERROR | Function "get_block_wrapper_attributes()" requires WordPress 5.6.0, but your plugin minimum supported version is WordPress 5.0.0. | 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. | 6 |
| WordPress.PHP.DevelopmentFunctions.error_log_debug_backtrace | WARNING | debug_backtrace() found. Debug code should not normally be used in production. | 6 |
| WordPress.WP.AlternativeFunctions.rand_rand | ERROR | rand() is discouraged. Use the far less predictable wp_rand() instead. | 6 |
| WordPress.WP.EnqueuedResourceParameters.MissingVersion | WARNING | Resource version not set in call to wp_enqueue_script(). This means new versions of the script may not always be loaded due to browser caching. | 6 |
| 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. | 6 |
| WordPress.DB.DirectDatabaseQuery.DirectQuery | WARNING | Use of a direct database call is discouraged. | 5 |
| WordPress.WP.AlternativeFunctions.parse_url_parse_url | ERROR | parse_url() is discouraged because of inconsistency in the output across PHP versions; use wp_parse_url() instead. | 5 |
| WordPress.DB.DirectDatabaseQuery.NoCaching | WARNING | Direct database call without caching detected. Consider using wp_cache_get() / wp_cache_set() or wp_cache_delete(). | 4 |
Latest Snapshot
Findings
2,408
Errors
653
Warnings
1,755
Score History
First score snapshot
First scan completed Jun 21, 2026
v3.0.2 · Plugin Check 2.0.0 · Model 2026.06-mvp-static-v2
Jun 21, 2026
v3.0.2
24
Latest
- Findings
- 2,408
- Errors
- 653
- Warnings
- 1,755
- Plugin Check
- 2.0.0
- Model
- 2026.06-mvp-static-v2
| Scan | Score | Findings | Errors | Warnings | Plugin | Plugin Check | Model |
|---|---|---|---|---|---|---|---|
| Jun 21, 2026Latest | 24 | 2,408 | 653 | 1,755 | v3.0.2 | 2.0.0 | 2026.06-mvp-static-v2 |