Posts Per Page Customizer Security & Risk Analysis

wordpress.org/plugins/posts-per-page-customizer

Powerful tool to tweak your existing loops. Set posts per page, filter posts, order them, hide them, apply Conditional Logic, etc.

20 active installs v1.0.0 PHP + WP 4.0.0+ Updated Unknown
change-loopcustomize-loopposts-per-page
100
A · Safe
CVEs total0
Unpatched0
Last CVENever
Safety Verdict

Is Posts Per Page Customizer Safe to Use in 2026?

Generally Safe

Score 100/100

Posts Per Page Customizer has no known CVEs and is actively maintained. It's a solid choice for most WordPress installations.

No known CVEs
Risk Assessment

The "posts-per-page-customizer" v1.0.0 plugin exhibits a mixed security posture. While it has no recorded historical vulnerabilities and uses prepared statements for a majority of its SQL queries, significant concerns arise from its static analysis. The plugin exposes a considerable attack surface with three unprotected AJAX handlers, presenting a direct pathway for potential unauthorized actions if exploited. Furthermore, the presence of the `unserialize` function, a known vector for object injection vulnerabilities when used with untrusted input, is a critical warning sign. The low percentage of properly escaped output is also worrying, increasing the risk of cross-site scripting (XSS) vulnerabilities.

The lack of direct taint analysis results is neutral, as it could indicate a lack of identified flows or insufficient analysis depth. However, coupled with the unprotected AJAX endpoints and the dangerous `unserialize` function, the potential for serious security flaws remains high. The plugin also bundles an outdated version of Select2, which could have its own known vulnerabilities.

In conclusion, while the absence of past vulnerabilities is positive, the current static analysis reveals several high-risk areas that require immediate attention. The unprotected entry points, use of `unserialize`, and poor output escaping significantly outweigh the strengths of its SQL practices and vulnerability history. Remediation of these issues is crucial to improve the plugin's security.

Key Concerns

  • 3 unprotected AJAX handlers
  • Dangerous function: unserialize
  • Low output escaping percentage (13%)
  • Bundled outdated library: Select2 v3.4.6
  • No nonce checks
Vulnerabilities
None known

Posts Per Page Customizer Security Vulnerabilities

No known vulnerabilities — this is a good sign.
Code Analysis
Analyzed Mar 16, 2026

Posts Per Page Customizer Code Analysis

Dangerous Functions
12
Raw SQL Queries
1
3 prepared
Unescaped Output
208
32 escaped
Nonce Checks
0
Capability Checks
1
File Operations
26
External Requests
8
Bundled Libraries
1

Dangerous Functions Found

unserialize$value = unserialize( $value );fresh-framework\framework\dataStorage\class.ffDataStorage.php:39
unserialize$cacheFile = unserialize( $cacheFileContent );fresh-framework\framework\dataStorage\class.ffDataStorage_Cache.php:121
unserialize$cacheFile = unserialize( $cacheFileContent );fresh-framework\framework\dataStorage\class.ffDataStorage_Cache.php:180
unserialize$value = unserialize( $value );fresh-framework\framework\dataStorage\class.ffDataStorage_WPOptions_NamespaceFacade.php:33
unserialize$value = unserialize( $value );fresh-framework\framework\dataStorage\class.ffDataStorage_WPPostMetas.php:50
unserialize$value = unserialize( $value );fresh-framework\framework\dataStorage\dataStorageOptionsPost\class.ffDataStorage_OptionsPostType.php:127
unserialize$postContentUnserialised = unserialize( $postContent );fresh-framework\framework\dataStorage\dataStorageOptionsPost\class.ffDataStorage_OptionsPostType.php:218
unserialize$value = unserialize( $value );fresh-framework\framework\dataStorage\dataStorageOptionsPost\class.ffDataStorage_OptionsPostType_NamespaceFacade.php:50
unserialize$imports = unserialize(file_get_contents($icache));fresh-framework\framework\extern\scss\scss.inc.php:4286
unserialize$optionsUnserialized = unserialize( $optionsSerialized );fresh-framework\framework\options\dataHolders\class.ffOptionsHolder_CachingFacade.php:66
unserializereturn unserialize( $this->get($query) );fresh-framework\framework\options\walkers\class.ffOptionsQuery.php:177
unserialize$revision = unserialize( $revision );fresh-framework\framework\themes\layouts\metaBoxes\metaBoxLayoutContent\class.ffMetaBoxLayoutContentView.php:109

Bundled Libraries

Select23.4.6

SQL Query Safety

75% prepared4 total queries

Output Escaping

13% escaped240 total outputs
Attack Surface
3 unprotected

Posts Per Page Customizer Attack Surface

Entry Points4
Unprotected3

AJAX Handlers 3

authwp_ajax_ff_ajax_adminfresh-framework\framework\core\wplayer\class.ffHookManager.php:100
authwp_ajax_ff_ajaxfresh-framework\framework\core\wplayer\class.ffHookManager.php:104
noprivwp_ajax_ff_ajaxfresh-framework\framework\core\wplayer\class.ffHookManager.php:105

Shortcodes 1

[ffrow] fresh-framework\framework\shortcodes\class.ffShortcodeManager.php:95
WordPress Hooks 49
actionpre_get_postsbootstrap\pluginClass.php:26
actionposts_wherebootstrap\pluginClass.php:27
actionadmin_initfresh-framework\framework\adminScreens\class.ffAdminScreenManager.php:54
actionadd_meta_boxesfresh-framework\framework\adminScreens\metaBoxes\class.ffMetaBoxManager.php:30
actionsave_postfresh-framework\framework\adminScreens\metaBoxes\class.ffMetaBoxManager.php:31
actionadmin_menufresh-framework\framework\adminScreens\metaBoxes\class.ffMetaBoxManager.php:33
actionadmin_footerfresh-framework\framework\assetsIncluding\lessScssCompiler\class.ffLessScssCompiler.php:81
actionactivated_pluginfresh-framework\framework\core\class.ffPluginLoader.php:50
actionff_wp_enqueue_scriptsfresh-framework\framework\core\wplayer\class.ffHookManager.php:28
actionadmin_menufresh-framework\framework\core\wplayer\class.ffHookManager.php:50
actionadmin_initfresh-framework\framework\core\wplayer\class.ffHookManager.php:57
actionwidgets_initfresh-framework\framework\core\wplayer\class.ffHookManager.php:63
actionwp_print_scriptsfresh-framework\framework\core\wplayer\class.ffHookManager.php:67
actionadmin_print_stylesfresh-framework\framework\core\wplayer\class.ffHookManager.php:71
actionwp_print_stylesfresh-framework\framework\core\wplayer\class.ffHookManager.php:73
actionff_ajax_shutdownfresh-framework\framework\core\wplayer\class.ffHookManager.php:127
actionshutdownfresh-framework\framework\core\wplayer\class.ffHookManager.php:130
actionwp_loadedfresh-framework\framework\core\wplayer\class.ffHookManager.php:141
actionadmin_enqueue_scriptsfresh-framework\framework\core\wplayer\class.ffWPLayer.php:493
actionwp_enqueue_scriptsfresh-framework\framework\core\wplayer\class.ffWPLayer.php:495
actionwp_footerfresh-framework\framework\core\wplayer\class.ffWPLayer.php:524
filterfilesystem_methodfresh-framework\framework\fileSystem\factories\class.ffFileSystem_Factory.php:12
actionplugins_loadedfresh-framework\framework\init\class.ffFrameworkVersionManager.php:111
actionadmin_footerfresh-framework\framework\options\walkers\printers\class.ffOptionsPrinterDataBoxGenerator.php:16
actionmime_typesfresh-framework\framework\query\attachments\class.ffMimeTypesManager.php:67
actionpost_mime_typesfresh-framework\framework\query\attachments\class.ffMimeTypesManager.php:94
actionext2typefresh-framework\framework\query\attachments\class.ffMimeTypesManager.php:115
actionwpfresh-framework\framework\query\identificators\query\class.ffFrontendQueryIdentificator.php:38
filtermanage_posts_columnsfresh-framework\framework\query\posts\class.ffPostAdminColumnManager.php:16
actionmanage_posts_custom_columnfresh-framework\framework\query\posts\class.ffPostAdminColumnManager.php:17
actioninitfresh-framework\framework\query\posts\registrator\class.ffPostTypeRegistratorManager.php:14
filterpost_updated_messagesfresh-framework\framework\query\posts\registrator\class.ffPostTypeRegistratorManager.php:33
filterpost_updated_messagesfresh-framework\framework\query\posts\registrator\class.ffPostTypeRegistratorManager.php:46
filterpost_row_actionsfresh-framework\framework\query\posts\registrator\class.ffPostTypeRegistratorManager.php:54
filterpost_row_actionsfresh-framework\framework\query\posts\registrator\class.ffPostTypeRegistratorManager.php:62
actioninitfresh-framework\framework\query\taxonomies\registrator\class.ffCustomTaxonomyManager.php:10
filterthe_contentfresh-framework\framework\shortcodes\class.ffShortcodeManager.php:44
filterthe_contentfresh-framework\framework\shortcodes\class.ffShortcodeManager.php:45
actionwp_footerfresh-framework\framework\themes\assetsIncluding\class.ffThemeAssetsManager.php:39
actionwp_trash_postfresh-framework\framework\themes\layouts\class.ffLayoutPostType.php:173
actionbefore_delete_postfresh-framework\framework\themes\layouts\class.ffLayoutPostType.php:174
actionuntrash_postfresh-framework\framework\themes\layouts\class.ffLayoutPostType.php:175
actionadmin_print_scriptsfresh-framework\framework\themes\layouts\class.ffLayoutsEmojiManager.php:27
actionadmin_footerfresh-framework\framework\themes\layouts\metaBoxes\metaBoxLayoutConditions\class.ffMetaBoxLayoutConditionsView.php:22
actionadmin_footerfresh-framework\framework\themes\layouts\metaBoxes\metaBoxLayoutContent\class.ffMetaBoxLayoutContentView.php:21
actionadmin_footerfresh-framework\framework\themes\layouts\metaBoxes\metaBoxLayoutPlacement\class.ffMetaBoxLayoutPlacementView.php:26
actioncurrent_screenfresh-framework\framework\themes\menuOptions\class.ffMenuOptionsManager.php:73
actionwp_update_nav_menufresh-framework\framework\themes\menuOptions\class.ffMenuOptionsManager.php:74
actionadmin_footerfresh-framework\framework\themes\menuOptions\class.ffMenuOptionsManager.php:75
Maintenance & Trust

Posts Per Page Customizer Maintenance & Trust

Maintenance Signals

WordPress version tested4.3.34
Last updatedUnknown
PHP min version
Downloads3K

Community Trust

Rating60/100
Number of ratings2
Active installs20
Developer Profile

Posts Per Page Customizer Developer Profile

FRESHFACE

2 plugins · 1K total installs

81
trust score
Avg Security Score
82/100
Avg Patch Time
30 days
View full developer profile
Detection Fingerprints

How We Detect Posts Per Page Customizer

Patterns used to identify this plugin on WordPress sites during automated security audits and web crawling.

Asset Fingerprints

Asset Paths
/wp-content/plugins/posts-per-page-customizer/framework/adminScreens/assets/js/adminScreens.js/wp-content/plugins/posts-per-page-customizer/framework/options/assets/options.js/wp-content/plugins/posts-per-page-customizer/framework/options/assets/options.css/wp-content/plugins/posts-per-page-customizer/fresh-framework/framework/adminScreens/assets/js/freshlib.js/wp-content/plugins/posts-per-page-customizer/fresh-framework/framework/extern/jquery-ui/datepicker.css
Script Paths
/wp-content/plugins/posts-per-page-customizer/fresh-framework/framework/adminScreens/assets/js/freshlib.js/wp-content/plugins/posts-per-page-customizer/fresh-framework/framework/adminScreens/assets/js/adminScreens.js/wp-content/plugins/posts-per-page-customizer/fresh-framework/framework/options/assets/options.js

HTML / DOM Fingerprints

CSS Classes
ff-view-identificationadmin-screen-nameadmin-view-name
JS Globals
ffContainer
FAQ

Frequently Asked Questions about Posts Per Page Customizer