PublishPress Permissions: Control User Access for Posts, Pages, Categories, Tags

The permissions plugin for posts, pages, categories, tags and more. You can control permissions for roles, individual users, and even custom groups.

v4.8.2PublishPressUpdated 2026-05-27Added Sep 19, 201310k+ installs86% rating60% support resolved
27
Score
424
Errors
323
Warnings
+0
Change

Category Scores

Security0
Repo94
Performance96
Maintainability17

Top Issues by Category

i18n372
maintainability188
security179

Issues Details

747 issues found in latest scan

ERROR217
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.

WARNING97
WordPress.Security.ValidatedSanitizedInput.MissingUnslash

$_GET[$var] not unslashed before sanitization. Use wp_unslash() or similar

ERROR82
WordPress.WP.I18n.MissingArgDomain

Missing $domain parameter in function call to __().

WARNING63
WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound

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

WARNING51
PluginCheck.Security.DirectDB.UnescapedDBParameter

Unescaped parameter $agent_clause used in $wpdb->get_results()\n$agent_clause assigned unsafely at line 186.

WARNING39
WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedFunctionFound

Functions declared in the global namespace by a theme/plugin should start with the theme/plugin prefix. Found: "_pp_memory_new_usage".

WARNING32
WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound

Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "'nav_menu_items_' . $post_type_name".

ERROR28
WordPress.WP.I18n.NonSingularStringLiteralText

The $text parameter must be a single text string literal. Found: $_opt_name

ERROR23
missing_direct_file_access_protection

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

ERROR21
WordPress.WP.I18n.UnorderedPlaceholdersText

Multiple placeholders in translatable strings should be ordered. Expected "%1$1s, %2$2s", but got "%1s, %2s" in 'ID #%1s: %2s'.

ERROR18
WordPress.Security.EscapeOutput.UnsafePrintingFunction

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

WARNING13
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.

ERROR13
WordPress.WP.DeprecatedParameters.Get_termsParam2Found

The parameter ""hide_empty=$hide_empty"" at position #2 of get_terms() has been deprecated since WordPress version 4.5.0. Instead do not pass the parameter.

ERROR13
WordPress.WP.I18n.NonSingularStringLiteralDomain

The $domain parameter must be a single text string literal. Found: $lang_id

WARNING6
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.

WARNING5
PluginCheck.CodeAnalysis.DiscouragedFunctions.load_plugin_textdomainFound

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.

WARNING3
WordPress.DB.SlowDBQuery.slow_db_query_meta_key

Detected usage of meta_key, possible slow query.

WARNING3
WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedConstantFound

Global constants defined by a theme/plugin should start with the theme/plugin prefix. Found: "FILTERED_PP".

ERROR3
WordPress.WP.I18n.InterpolatedVariableText

The $text parameter must not contain interpolated variables or expressions. Found: {$this->pluginName}

WARNING2
WordPress.NamingConventions.PrefixAllGlobals.DynamicHooknameFound

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

WARNING2
WordPress.WP.DiscouragedFunctions.query_posts_query_posts

query_posts() is discouraged. Use WP_Query instead.

WARNING2
WordPress.WP.I18n.LowLevelTranslationFunction

Use of the "translate()" function is reserved for low-level API usage.

ERROR1
Generic.PHP.ForbiddenFunctions.Found

The use of function wp_get_sidebars_widgets() is forbidden

WARNING1
WordPress.WP.DeprecatedParameters.Wp_count_termsParam2Found

The parameter "array_merge($args, ['number' => '', 'offset' => ''])" at position #2 of wp_count_terms() has been deprecated since WordPress version 5.6.0. Instead do not pass the parameter.

WARNING1
WordPress.WP.I18n.NoHtmlWrappedStrings

Translatable string should not be wrapped in HTML. Found: '<strong>This plugin can be deleted.</strong>'

Latest Snapshot

Findings

747

Errors

424

Warnings

323

Score History

First score snapshot

First scan completed Jun 20, 2026

v4.8.2 · Plugin Check 2.0.0 · Model 2026.06-mvp-static-v2

Jun 20, 2026

v4.8.2

27

Latest

Findings
747
Errors
424
Warnings
323
Plugin Check
2.0.0
Model
2026.06-mvp-static-v2

Related Plugins