PrettyLinks – Affiliate Links, Link Branding, Link Tracking, Marketing and Stripe Payments Plugin

🌠 The best WordPress link management, branding, tracking, sharing and payments plugin. Easily make pretty & trackable shortlinks. 🔗

v3.6.22Blair WilliamsUpdated 2026-05-28Added Mar 29, 2009300k+ installs96% rating0% support resolved
24
Score
449
Errors
1,137
Warnings
+0
Change

Category Scores

Security0
Repo94
Performance100
Maintainability0

Top Issues by Category

security1,034
maintainability467
i18n67

Issues Details

1,586 issues found in latest scan

WARNING325
WordPress.Security.NonceVerification.Recommended

Processing form data without nonce verification.

WARNING193
WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound

Global variables defined by a theme/plugin should start with the theme/plugin prefix. Found: "$account_email".

ERROR124
WordPress.Security.EscapeOutput.OutputNotEscaped

All output should be run through an escaping function (see the Security sections in the WordPress Developer Handbooks), found '" style=\"$navstyle\""'.

WARNING114
WordPress.Security.NonceVerification.Missing

Processing form data without nonce verification.

WARNING114
WordPress.Security.ValidatedSanitizedInput.MissingUnslash

$_COOKIE[$visitor_cookie] not unslashed before sanitization. Use wp_unslash() or similar

WARNING106
WordPress.Security.ValidatedSanitizedInput.InputNotSanitized

Detected usage of a non-sanitized input variable: $_COOKIE[$visitor_cookie]

WARNING91
WordPress.DB.DirectDatabaseQuery.DirectQuery

Use of a direct database call is discouraged.

ERROR91
WordPress.DB.PreparedSQL.NotPrepared

Use placeholders and $wpdb->prepare(); found $count_q

WARNING79
WordPress.DB.DirectDatabaseQuery.NoCaching

Direct database call without caching detected. Consider using wp_cache_get() / wp_cache_set() or wp_cache_delete().

ERROR64
WordPress.WP.I18n.MissingTranslatorsComment

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.

WARNING44
WordPress.Security.ValidatedSanitizedInput.InputNotValidated

Detected usage of a possibly undefined superglobal array index: $_GET['auth_code']. Check that the array index exists before using it.

ERROR42
PluginCheck.Security.DirectDB.UnescapedDBParameter

Unescaped parameter $count_q used in $wpdb->get_var()\n$count_q assigned unsafely at line 689.

ERROR35
WordPress.DateTime.RestrictedFunctions.date_date

date() is affected by runtime timezone changes which can cause date/time to be incorrectly displayed. Use gmdate() instead.

ERROR26
missing_direct_file_access_protection

PHP file should prevent direct access. Add a check like: if ( ! defined( 'ABSPATH' ) ) exit;

WARNING21
WordPress.DB.PreparedSQL.InterpolatedNotPrepared

Use placeholders and $wpdb->prepare(); found interpolated variable $clicks_table at "SELECT created_at FROM $clicks_table ORDER BY created_at LIMIT 1;"

WARNING21
WordPress.WP.EnqueuedResourceParameters.NotInFooter

In footer ($in_footer) is not set explicitly wp_enqueue_script; It is recommended to load scripts in the footer. Please set this value to `true` to load it in the footer, or explicitly `false` if it should be loaded in the header.

ERROR20
WordPress.Security.EscapeOutput.UnsafePrintingFunction

All output should be run through an escaping function (like esc_html_e() or esc_attr_e()), found '_e'.

ERROR16
WordPress.Security.EscapeOutput.ExceptionNotEscaped

All output should be run through an escaping function (see the Security sections in the WordPress Developer Handbooks), found '"{$json_res['error']['message']} ({$json_res['error']['type']})"'.

WARNING15
WordPress.Security.SafeRedirect.wp_redirect_wp_redirect

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.

ERROR8
WordPress.WP.DeprecatedFunctions.get_userdatabyloginFound

get_userdatabylogin() has been deprecated since WordPress version 3.3.0. Use get_user_by('login') instead.

ERROR8
WordPress.WP.DeprecatedFunctions.user_pass_okFound

user_pass_ok() has been deprecated since WordPress version 3.5.0. Use wp_authenticate() instead.

WARNING4
WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound

Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "pl_customer_portal_page_name".

ERROR3
WordPress.WP.I18n.UnorderedPlaceholdersText

Multiple placeholders in translatable strings should be ordered. Expected "%1$d, %2$d", but got "%d, %d" in '%d Clicks / %d Uniques'.

WARNING2
PluginCheck.Security.DirectDB.UnescapedDBParameter

Unescaped parameter $clicks_table used in $wpdb->get_var()\n$clicks_table assigned unsafely at line 54.

WARNING2
WordPress.PHP.DevelopmentFunctions.error_log_error_log

error_log() found. Debug code should not normally be used in production.

Latest Snapshot

Findings

1,586

Errors

449

Warnings

1,137

Score History

First score snapshot

First scan completed Jun 19, 2026

v3.6.22 · Plugin Check 2.0.0 · Model 2026.06-mvp-static-v2

Jun 19, 2026

v3.6.22

24

Latest

Findings
1,586
Errors
449
Warnings
1,137
Plugin Check
2.0.0
Model
2026.06-mvp-static-v2

Related Plugins