[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fHak-uVwfFQ5RWNvIHJxMpIy2vWG7QmjMvnix1BvIfB8":3,"$ftPXJizRJ5s-z-2NR3kv8FIFOAFtqYGeHN08OIjWByMw":387,"$fJRwQgWHzFBRbVOusuI5rneasnkWHRc7x-H05MvT3zFE":391},{"slug":4,"name":5,"version":6,"author":7,"author_profile":8,"description":9,"short_description":10,"active_installs":11,"downloaded":12,"rating":13,"num_ratings":14,"last_updated":15,"tested_up_to":16,"requires_at_least":17,"requires_php":18,"tags":19,"homepage":18,"download_link":25,"security_score":26,"vuln_count":27,"unpatched_count":27,"last_vuln_date":28,"fetched_at":29,"discovery_status":30,"vulnerabilities":31,"developer":32,"crawl_stats":28,"alternatives":39,"analysis":144,"fingerprints":346},"wp247-body-classes","WP247 Body Classes","2.2.0","wescleveland","https:\u002F\u002Fprofiles.wordpress.org\u002Fwescleveland\u002F","\u003Cp>Add unique classes to the body tag for easy styling based on post attributes (post type, slug, and ID) and various WordPress “is” functions:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>wp_is_mobile()\u003C\u002Fli>\n\u003Cli>is_home()\u003C\u002Fli>\n\u003Cli>is_front_page()\u003C\u002Fli>\n\u003Cli>is_blog()\u003C\u002Fli>\n\u003Cli>is_admin()\u003C\u002Fli>\n\u003Cli>is_admin_bar_showing()\u003C\u002Fli>\n\u003Cli>is_404()\u003C\u002Fli>\n\u003Cli>is_super_admin()\u003C\u002Fli>\n\u003Cli>is_user_logged_in()\u003C\u002Fli>\n\u003Cli>is_search()\u003C\u002Fli>\n\u003Cli>is_archive()\u003C\u002Fli>\n\u003Cli>is_author()\u003C\u002Fli>\n\u003Cli>is_category()\u003C\u002Fli>\n\u003Cli>is_tag()\u003C\u002Fli>\n\u003Cli>is_tax()\u003C\u002Fli>\n\u003Cli>is_date()\u003C\u002Fli>\n\u003Cli>is_year()\u003C\u002Fli>\n\u003Cli>is_month()\u003C\u002Fli>\n\u003Cli>is_day()\u003C\u002Fli>\n\u003Cli>is_time()\u003C\u002Fli>\n\u003Cli>is_single()\u003C\u002Fli>\n\u003Cli>is_sticky()\u003C\u002Fli>\n\u003Cli>$post->post_type\u003C\u002Fli>\n\u003Cli>$post->name\u003C\u002Fli>\n\u003Cli>$post->ID\u003C\u002Fli>\n\u003Cli>wp_get_post_categories() (Page\u002FPost Categories)\u003C\u002Fli>\n\u003Cli>wp_get_post_tags()       (Page\u002FPost Tags)\u003C\u002Fli>\n\u003Cli>$user->nicename\u003C\u002Fli>\n\u003Cli>$user->id\u003C\u002Fli>\n\u003Cli>$user->roles\u003C\u002Fli>\n\u003Cli>$user->allcaps\u003C\u002Fli>\n\u003Cli>$archive->slug (e.g. Category slug, Tag slug, etc.)\u003C\u002Fli>\n\u003Cli>$archive->id   (e.g. Category id, Tag id, etc.)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Add post specific classes to the body tag in the post editor. Use any class name you want to uniquely style an individual post or a set of posts.\u003C\u002Fp>\n\u003Cp>Add classes based on user scrolling through the page. You can check things like:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>is-scroll-top        (at the top of the page – synonym for is-not-scroll)\u003C\u002Fli>\n\u003Cli>is-not-scroll-top    (not at the top of the page – synonym for is-scroll)\u003C\u002Fli>\n\u003Cli>is-scroll            (not at the top of the page – synonym for is-not-scroll-top)\u003C\u002Fli>\n\u003Cli>is-not-scroll        (at the top of the page – synonym for is-scroll-top)\u003C\u002Fli>\n\u003Cli>is-scroll-top-px     (has not reached the scroll start value for scroll measurement by pixels)\u003C\u002Fli>\n\u003Cli>is-scroll-top-vh     (has not reached the scroll start value for scroll measurement by viewport height)\u003C\u002Fli>\n\u003Cli>is-scroll-top-dh     (has not reached the scroll start value for scroll measurement by document height)\u003C\u002Fli>\n\u003Cli>is-scroll-10-px      (scrolled down 10 pixels)\u003C\u002Fli>\n\u003Cli>is-scroll-8-vh       (scrolled down 8% of the viewport height)\u003C\u002Fli>\n\u003Cli>is-scroll-5-dh       (scrolled down 5% of the document height)\u003C\u002Fli>\n\u003Cli>is-scroll-mid-px     (has reached the scroll start value but not the scroll limit for scroll measurement by pixels)\u003C\u002Fli>\n\u003Cli>is-scroll-mid-vh     (has reached the scroll start value but not the scroll limit for scroll measurement by viewport height)\u003C\u002Fli>\n\u003Cli>is-scroll-mid-vh     (has reached the scroll start value but not the scroll limit for scroll measurement by document height)\u003C\u002Fli>\n\u003Cli>is-scroll-max-px     (has reached the scroll limit for scroll measurement by pixels)\u003C\u002Fli>\n\u003Cli>is-scroll-max-vh     (has reached the scroll limit for scroll measurement by percent of viewport height)\u003C\u002Fli>\n\u003Cli>is-scroll-max-dh     (has reached the scroll limit for scroll measurement by percent of document height)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Add classes based on the results from mobiledetect.net’s \u003Cstrong>Mobile_Detect\u003C\u002Fstrong> script. This script parses the value passed by the browser in the HTTP_USER_AGENT string. Consequently, mobile detection is more of an art than a science and, unfortunately, is not perfect. You can check things like:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>is-mobile\u003C\u002Fli>\n\u003Cli>is-tablet\u003C\u002Fli>\n\u003Cli>is-phone\u003C\u002Fli>\n\u003Cli>Mobile Operating System\u003C\u002Fli>\n\u003Cli>Mobile Browser\u003C\u002Fli>\n\u003Cli>Type of tablet\u003C\u002Fli>\n\u003Cli>Type of phone\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>This plugin adds classes to the html body tag indicating:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\n\u003Cp>whether or not the requesting device is a mobile device (.is-mobile or .is-not-mobile)\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>the type of post being viewed (.is-? where ? is the post type (page, post, whetever special post types are defined) ).\u003Cbr \u002F>\n E.g. .is-page or .is-post\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>the slug of the post being viewed (.is-?-! where ? is the post type and ! is the post slug).\u003Cbr \u002F>\n E.g. a post with slug “hello-world’ would have class .is-post-hello-world\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>the ID of the post being viewed (.is-?-# where ? is the post type and # is the post ID).\u003Cbr \u002F>\n E.g. a post with ID “1” would have class .is-page-1\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>whether or not the requested page shows archived results (.is-archive or .is-not-archive)\u003C\u002Fp>\n\u003Cp>If the page being displayed is an archive\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\n\u003Cp>the type of archive being viewed (.is-? where ? represents the type of archive (author, category, date, tag) )\u003Cbr \u002F>\nE.g. .is-author\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>the slug of the archive being viewed (.is-?-! where ? is the archive type and ! is the archive slug)\u003Cbr \u002F>\nE.g. a category with slug “uncategorized’ would have class .is-category-uncategorized\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>the ID of the archive being viewed (.is-?-# where ? is the archive type and # is the archive ID)\u003Cbr \u002F>\nE.g. a category with ID “1” would have class .is-category-1\u003C\u002Fp>\n\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>How far down the page the viewer has scrolled in pixels or as a percentage of viewport height or as a percentage of document height\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>Post specific class(es) that are set in the post editor\u003C\u002Fp>\n\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Use these classes in your styling to provide a better browsing experience for your viewers.\u003C\u002Fp>\n\u003Ch4>Custom Body Classes\u003C\u002Fh4>\n\u003Cp>Create your own Custom Body Classes by adding your PHP code in the “Custom Body Classes” section.\u003C\u002Fp>\n\u003Cp>Here’s an example. Not sure why we would want to do it, but suppose we want to do some custom styling when the page is being displayed to someone that can manage WordPress options. We might enter something like:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>if (current_user_can('manage_options')) $classes[] = 'user-can-manage-options';\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Then we can use the \u003Cstrong>body.user-can-manage-options\u003C\u002Fstrong> qualifier in our CSS styling.\u003C\u002Fp>\n\u003Ch4>Example\u003C\u002Fh4>\n\u003Cp>Suppose you have a large h1 top margin that you want to eliminate on mobile devices to avoid a lot of white space. After activating the wp247-body-classes plugin and indicating that the .is-mobile class is desired, all you need to do is add this line to your CSS:\u003C\u002Fp>\n\u003Cp>body.is-mobile h1 {\u003Cbr \u002F>\n    margin-top: 0;\u003Cbr \u002F>\n}\u003C\u002Fp>\n\u003Cp>Suppose you have a sticky header but want to shrink it by dynamically reducing the top and bottom padding from 25px to 5px as the viewer scrolls down the page based on 20 pixel scroll increments up to 80 pixels of scrolling:\u003C\u002Fp>\n\u003Cp>Set WP247 Body Classes Scroll setting to “Scroll by Pixel” with a 10 pixel increment and an 80 pixel limit and then add the following to your CSS:\u003C\u002Fp>\n\u003Cp>body.is-scroll-20-px header {\u003Cbr \u002F>\n    padding-top: 20px;\u003Cbr \u002F>\n    padding-bottom: 20px;\u003Cbr \u002F>\n}\u003Cbr \u002F>\nbody.is-scroll-40-px header {\u003Cbr \u002F>\n    padding-top: 15px;\u003Cbr \u002F>\n    padding-bottom: 15px;\u003Cbr \u002F>\n}\u003Cbr \u002F>\nbody.is-scroll-60-px header {\u003Cbr \u002F>\n    padding-top: 10px;\u003Cbr \u002F>\n    padding-bottom: 10px;\u003Cbr \u002F>\n}\u003Cbr \u002F>\nbody.is-scroll-max-px header {\u003Cbr \u002F>\n    padding-top: 5px;\u003Cbr \u002F>\n    padding-bottom: 5px;\u003Cbr \u002F>\n}\u003C\u002Fp>\n","Add unique classes to the body tag for easy styling based on various attributes (archive, user, post, mobile, scrolling) and WordPress \"is\"  &hellip;",200,7624,90,6,"2024-05-24T16:06:00.000Z","6.5.8","4.0","",[20,21,22,23,24],"mobile","post-type","scroll","user-capabilities","user-roles","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fwp247-body-classes.2.2.0.zip",92,0,null,"2026-04-16T10:56:18.058Z","no_bundle",[],{"slug":7,"display_name":7,"profile_url":8,"plugin_count":33,"total_installs":34,"avg_security_score":35,"avg_patch_time_days":36,"trust_score":37,"computed_at":38},5,240,86,30,84,"2026-05-20T09:22:46.898Z",[40,64,88,108,129],{"slug":41,"name":42,"version":43,"author":44,"author_profile":45,"description":46,"short_description":47,"active_installs":48,"downloaded":49,"rating":50,"num_ratings":51,"last_updated":52,"tested_up_to":53,"requires_at_least":54,"requires_php":18,"tags":55,"homepage":59,"download_link":60,"security_score":61,"vuln_count":62,"unpatched_count":62,"last_vuln_date":63,"fetched_at":29},"user-roles-and-capabilities","User Roles and Capabilities","1.2.6","mahabub81","https:\u002F\u002Fprofiles.wordpress.org\u002Fmahabub81\u002F","\u003Cp>manage user roles and capabilities. Create new roles and delete existing roles. Using this plugin you will not be able to modify any capabilities for administrator user role.\u003Cbr \u002F>\nWordPress built in roles cant be deleted.\u003Cbr \u002F>\nIf you find any issue just let us know we will get back to you with the fix in 24 hours.\u003C\u002Fp>\n\u003Ch3>Features of Roles and Capabilities\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>Fully tested by QA team.\u003C\u002Fli>\n\u003Cli>Create new roles.\u003C\u002Fli>\n\u003Cli>Delete existing roles.\u003C\u002Fli>\n\u003Cli>Clone existing roles.\u003C\u002Fli>\n\u003Cli>Rename Role\u003C\u002Fli>\n\u003Cli>Import \u002F Export Roles and Capabilities\u003C\u002Fli>\n\u003Cli>Manage user Capabilities.\u003C\u002Fli>\n\u003Cli>set permission.\u003C\u002Fli>\n\u003Cli>Change default user role.\u003C\u002Fli>\n\u003Cli>Assign multiple roles to users.\u003C\u002Fli>\n\u003Cli>set permissions \u002F capabilities to users.\u003C\u002Fli>\n\u003Cli>single screen to manage capability for all roles.\u003C\u002Fli>\n\u003Cli>easy to use.\u003C\u002Fli>\n\u003C\u002Ful>\n","Manage user roles and Capabilities, create new roles and change default role.",8000,125537,96,21,"2021-05-09T07:04:00.000Z","5.7.15","3.5",[56,23,24,57,58],"roles-and-capabilities","wordpress-capabilities","wordpress-user-roles","http:\u002F\u002Fsolvease.com","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fuser-roles-and-capabilities.1.2.6.zip",63,1,"2025-06-19 00:00:00",{"slug":65,"name":66,"version":67,"author":68,"author_profile":69,"description":70,"short_description":71,"active_installs":11,"downloaded":72,"rating":73,"num_ratings":74,"last_updated":75,"tested_up_to":76,"requires_at_least":77,"requires_php":18,"tags":78,"homepage":84,"download_link":85,"security_score":86,"vuln_count":27,"unpatched_count":27,"last_vuln_date":28,"fetched_at":87},"wp-hide-adminbar","WP Hide Admin Bar","1.0.2","P Roy","https:\u002F\u002Fprofiles.wordpress.org\u002Fraviry\u002F","\u003Cp>This plugin will help to hide admin-bar based on selected user roles and user capabilities.\u003C\u002Fp>\n","This plugin will help to hide admin-bar based on selected user roles and user capabilities.",3009,100,2,"2020-03-07T12:50:00.000Z","5.4.19","4.5",[79,80,81,82,83],"admin-bar-hide","hide-admin-bar","hide-admin-bar-based-on-user-capabilities","hide-admin-bar-based-on-user-roles","wp-hide-admin-bar","http:\u002F\u002Fwordpress.org\u002Fplugins\u002Fwp-hide-adminbar","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fwp-hide-adminbar.zip",85,"2026-04-06T09:54:40.288Z",{"slug":89,"name":90,"version":91,"author":92,"author_profile":93,"description":94,"short_description":95,"active_installs":73,"downloaded":96,"rating":27,"num_ratings":27,"last_updated":97,"tested_up_to":98,"requires_at_least":99,"requires_php":100,"tags":101,"homepage":18,"download_link":107,"security_score":73,"vuln_count":27,"unpatched_count":27,"last_vuln_date":28,"fetched_at":29},"responsive-horizontal-table-scroll","Responsive Horizontal Table Scroll","1.0","Peyman Farahani","https:\u002F\u002Fprofiles.wordpress.org\u002Fpeymanfarahani\u002F","\u003Cp>This plugin wraps all \u003Ccode>\u003Ctable>\u003C\u002Fcode> elements inside a responsive, scrollable container and shows a small arrow hint on mobile to indicate horizontal scrolling.\u003C\u002Fp>\n\u003Cp>No settings, no shortcodes — just activate and enjoy mobile-friendly tables across your site.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Features:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Works with all themes and page builders (Elementor, Gutenberg, etc.)\u003C\u002Fli>\n\u003Cli>Adds horizontal scroll automatically to all tables\u003C\u002Fli>\n\u003Cli>Animated arrow hint (\u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> or \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">←\u003C\u002Fspan> based on RTL\u002FLTR)\u003C\u002Fli>\n\u003Cli>No jQuery required\u003C\u002Fli>\n\u003Cli>Super lightweight\u003C\u002Fli>\n\u003C\u002Ful>\n","Make your WordPress tables mobile-friendly with automatic horizontal scrolling and an animated arrow indicator.",576,"2025-09-07T10:49:00.000Z","6.8.5","5.0","7.0",[102,103,104,105,106],"auto-table-scroll","horizontal-scroll","mobile-table-fix","responsive-table","table-overflow","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fresponsive-horizontal-table-scroll.1.0.zip",{"slug":109,"name":110,"version":111,"author":112,"author_profile":113,"description":114,"short_description":115,"active_installs":116,"downloaded":117,"rating":118,"num_ratings":119,"last_updated":120,"tested_up_to":121,"requires_at_least":122,"requires_php":18,"tags":123,"homepage":127,"download_link":128,"security_score":86,"vuln_count":27,"unpatched_count":27,"last_vuln_date":28,"fetched_at":29},"editorial-access-manager","Editorial Access Manager","0.3.2","Taylor Lovett","https:\u002F\u002Fprofiles.wordpress.org\u002Ftlovett1\u002F","\u003Cp>A simple plugin to let you control who has access to what posts. By default in WordPress, we can create users\u003Cbr \u002F>\nand assign them to roles. Roles are automatically assigned certain capabilities. See the codex article for a list of\u003Cbr \u002F>\n\u003Ca href=\"https:\u002F\u002Fcodex.wordpress.org\u002FRoles_and_Capabilities\" rel=\"nofollow ugc\">Roles and Capabilities\u003C\u002Fa>. Sometimes default roles are not enough,\u003Cbr \u002F>\nand we have one-off situations. Editorial Access Manager lets you set which users or roles have access to specific\u003Cbr \u002F>\nposts. Perhaps you have a user who is a Contributor, but you want them to have access to edit one specific page? This\u003Cbr \u002F>\nplugin can help you.\u003C\u002Fp>\n\u003Ch4>Configuration Overview\u003C\u002Fh4>\n\u003Cp>There are no overarching settings for this plugin. Simply go to the edit post screen in the WordPress admin and\u003Cbr \u002F>\nconfigure access settings in the “Editorial Access Manager” meta box in the sidebar.\u003C\u002Fp>\n\u003Ch4>Managing Access by Roles\u003C\u002Fh4>\n\u003Cp>In the “Editorial Access Manager” meta box, enable custom access management by “Roles”. Once enabled, the post can only be\u003Cbr \u002F>\nedited by users that fall into those roles. However, no matter what, the Administrator role can always edit any post.\u003Cbr \u002F>\nThis if for safety reasons. You can also only use roles that have the “edit_posts” capability; therefore “Subscriber” by\u003Cbr \u002F>\ndefault cannot be used.\u003C\u002Fp>\n\u003Ch4>Managing Access by Users\u003C\u002Fh4>\n\u003Cp>In the “Editorial Access Manager” meta box, enable custom access management by “Users”. Once enabled, the post can only be\u003Cbr \u002F>\nedited by designated users. However, no matter what, any administrator can edit any post. This if for safety reasons.\u003Cbr \u002F>\nYou can also only use users that have the “edit_others_posts” capability; therefore “Subscriber” users by default\u003Cbr \u002F>\ncannot be used.\u003C\u002Fp>\n\u003Cp>Fork the plugin on \u003Ca href=\"http:\u002F\u002Fgithub.com\u002Ftlovett1\u002Feditorial-access-manager\" rel=\"nofollow ugc\">Github\u003C\u002Fa>\u003C\u002Fp>\n","Allow for granular editorial access control for all post types in WordPress",80,6374,98,8,"2017-03-18T19:23:00.000Z","4.9.29","3.6",[124,125,23,126,24],"editorial-access-management","role-management","user-permissions","http:\u002F\u002Fwww.taylorlovett.com","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Feditorial-access-manager.zip",{"slug":102,"name":130,"version":131,"author":132,"author_profile":133,"description":134,"short_description":135,"active_installs":136,"downloaded":137,"rating":27,"num_ratings":27,"last_updated":138,"tested_up_to":76,"requires_at_least":139,"requires_php":18,"tags":140,"homepage":18,"download_link":143,"security_score":86,"vuln_count":27,"unpatched_count":27,"last_vuln_date":28,"fetched_at":29},"Auto table scroll","0.0.1","elm1","https:\u002F\u002Fprofiles.wordpress.org\u002Felm1\u002F","\u003Cp>Adds horizontal scroll to big tables in content if they don’t fit, useful on mobile viewport.\u003C\u002Fp>\n","Adds horizontal scroll to big tables in content if they don't fit, useful on mobile viewport.",10,1182,"2020-05-27T03:38:00.000Z","4.8",[141,20,22,142],"auto","tables","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fauto-table-scroll.0.0.1.zip",{"attackSurface":145,"codeSignals":216,"taintFlows":312,"riskAssessment":339,"analyzedAt":345},{"hooks":146,"ajaxHandlers":206,"restRoutes":213,"shortcodes":214,"cronEvents":215,"entryPointCount":62,"unprotectedCount":27},[147,153,158,162,166,170,172,174,179,184,188,193,197,199,203],{"type":148,"name":149,"callback":150,"file":151,"line":152},"action","admin_enqueue_scripts","do_action_admin_enqueue_scripts","admin\\wp247-settings-api\\wp247-settings-api.class.php",117,{"type":148,"name":154,"callback":155,"priority":156,"file":151,"line":157},"admin_head","do_action_admin_head",9999,118,{"type":148,"name":159,"callback":160,"file":151,"line":161},"admin_menu","do_action_admin_menu",119,{"type":148,"name":163,"callback":164,"file":151,"line":165},"admin_init","do_action_admin_init",120,{"type":148,"name":167,"callback":168,"file":169,"line":35},"admin_notices","do_action_admin_notices","admin\\wp247xns-client-corequisite-notice\\wp247xns-client-corequisite-notice.php",{"type":148,"name":149,"callback":150,"file":169,"line":171},180,{"type":148,"name":154,"callback":155,"priority":156,"file":169,"line":173},181,{"type":148,"name":175,"callback":176,"file":177,"line":178},"wp_loaded","wp247_body_classes_do_action_wp_loaded","wp247-body-classes.php",71,{"type":148,"name":180,"callback":181,"priority":182,"file":177,"line":183},"wp_head","wp247_body_classes_do_action_wp_head",99999,72,{"type":148,"name":185,"callback":186,"priority":182,"file":177,"line":187},"wp_footer","wp247_body_classes_do_action_wp_footer",73,{"type":189,"name":190,"callback":191,"file":177,"line":192},"filter","body_class","wp247_body_classes_do_action_body_class",74,{"type":148,"name":194,"callback":195,"file":177,"line":196},"load-post.php","wp247_body_classes_do_action_load_post",83,{"type":148,"name":198,"callback":195,"file":177,"line":37},"load-post-new.php",{"type":148,"name":200,"callback":201,"file":177,"line":202},"add_meta_boxes","wp247_body_classes_do_action_add_meta_boxes",97,{"type":148,"name":204,"callback":205,"priority":136,"file":177,"line":118},"save_post","wp247_body_classes_do_action_save_post",[207],{"action":208,"nopriv":209,"callback":210,"hasNonce":211,"hasCapCheck":211,"file":169,"line":212},"wp247xns_client_corequisite_notice_dismiss",false,"do_action_wp247xns_client_corequisite_notice_dismiss",true,182,[],[],[],{"dangerousFunctions":217,"sqlUsage":218,"outputEscaping":220,"fileOperations":27,"externalRequests":27,"nonceChecks":74,"capabilityChecks":33,"bundledLibraries":311},[],{"prepared":27,"raw":27,"locations":219},[],{"escaped":221,"rawEcho":222,"locations":223},19,46,[224,227,229,231,233,235,237,239,241,242,244,245,246,247,248,250,252,254,256,258,260,262,264,266,268,270,272,274,276,278,280,282,284,286,288,290,292,294,296,298,300,302,304,305,307,309],{"file":151,"line":225,"context":226},132,"raw output",{"file":151,"line":228,"context":226},142,{"file":151,"line":230,"context":226},292,{"file":151,"line":232,"context":226},679,{"file":151,"line":234,"context":226},689,{"file":151,"line":236,"context":226},691,{"file":151,"line":238,"context":226},720,{"file":151,"line":240,"context":226},751,{"file":151,"line":240,"context":226},{"file":151,"line":243,"context":226},761,{"file":151,"line":243,"context":226},{"file":151,"line":243,"context":226},{"file":151,"line":243,"context":226},{"file":151,"line":243,"context":226},{"file":151,"line":249,"context":226},818,{"file":151,"line":251,"context":226},820,{"file":151,"line":253,"context":226},839,{"file":151,"line":255,"context":226},841,{"file":151,"line":257,"context":226},869,{"file":151,"line":259,"context":226},871,{"file":151,"line":261,"context":226},894,{"file":151,"line":263,"context":226},896,{"file":151,"line":265,"context":226},920,{"file":151,"line":267,"context":226},922,{"file":151,"line":269,"context":226},941,{"file":151,"line":271,"context":226},943,{"file":151,"line":273,"context":226},955,{"file":151,"line":275,"context":226},971,{"file":151,"line":277,"context":226},973,{"file":151,"line":279,"context":226},979,{"file":151,"line":281,"context":226},1001,{"file":151,"line":283,"context":226},1003,{"file":151,"line":285,"context":226},1022,{"file":151,"line":287,"context":226},1024,{"file":151,"line":289,"context":226},1043,{"file":151,"line":291,"context":226},1045,{"file":151,"line":293,"context":226},1155,{"file":151,"line":295,"context":226},1169,{"file":151,"line":297,"context":226},1202,{"file":169,"line":299,"context":226},126,{"file":169,"line":301,"context":226},127,{"file":177,"line":303,"context":226},123,{"file":177,"line":173,"context":226},{"file":177,"line":306,"context":226},221,{"file":177,"line":308,"context":226},231,{"file":177,"line":310,"context":226},570,[],[313,331],{"entryPoint":314,"graph":315,"unsanitizedCount":27,"severity":330},"do_action_wp247xns_client_corequisite_notice_dismiss (admin\\wp247xns-client-corequisite-notice\\wp247xns-client-corequisite-notice.php:167)",{"nodes":316,"edges":328},[317,322],{"id":318,"type":319,"label":320,"file":169,"line":321},"n0","source","$_POST",172,{"id":323,"type":324,"label":325,"file":169,"line":326,"wp_function":327},"n1","sink","update_option() [Settings Manipulation]",174,"update_option",[329],{"from":318,"to":323,"sanitized":211},"low",{"entryPoint":332,"graph":333,"unsanitizedCount":27,"severity":330},"\u003Cwp247xns-client-corequisite-notice> (admin\\wp247xns-client-corequisite-notice\\wp247xns-client-corequisite-notice.php:0)",{"nodes":334,"edges":337},[335,336],{"id":318,"type":319,"label":320,"file":169,"line":321},{"id":323,"type":324,"label":325,"file":169,"line":326,"wp_function":327},[338],{"from":318,"to":323,"sanitized":211},{"summary":340,"deductions":341},"The wp247-body-classes plugin v2.2.0 demonstrates a generally good security posture based on the provided static analysis. The absence of any identified vulnerabilities in its history, coupled with the use of prepared statements for all SQL queries, nonces, and capability checks on its single AJAX handler, are positive indicators.  The plugin also avoids dangerous functions, file operations, and external HTTP requests, further reducing its attack surface.\n\nHowever, a significant concern arises from the low percentage of properly escaped output (29%). This suggests a substantial risk of cross-site scripting (XSS) vulnerabilities, as user-supplied data or dynamic content displayed within the plugin's output may not be adequately sanitized, potentially allowing attackers to inject malicious scripts. While no critical or high severity taint flows were found, the unescaped output remains a significant weakness.\n\nIn conclusion, the plugin has strong foundational security practices in place, particularly regarding data handling and access control. The lack of historical vulnerabilities is encouraging. Nevertheless, the widespread issue with output escaping presents a tangible and potentially exploitable risk that requires immediate attention to mitigate XSS vulnerabilities.",[342],{"reason":343,"points":344},"Low percentage of properly escaped output",15,"2026-03-16T20:09:41.697Z",{"wat":347,"direct":357},{"assetPaths":348,"generatorPatterns":351,"scriptPaths":352,"versionParams":354},[349,350],"\u002Fwp-content\u002Fplugins\u002Fwp247-body-classes\u002Fjs\u002Fwp247-body-classes.js","\u002Fwp-content\u002Fplugins\u002Fwp247-body-classes\u002Fcss\u002Fwp247-body-classes.css",[],[353],"wp247-body-classes\u002Fjs\u002Fwp247-body-classes.js",[355,356],"wp247-body-classes\u002Fjs\u002Fwp247-body-classes.js?ver=","wp247-body-classes\u002Fcss\u002Fwp247-body-classes.css?ver=",{"cssClasses":358,"htmlComments":368,"htmlAttributes":370,"restEndpoints":372,"jsGlobals":373,"shortcodeOutput":386},[359,360,361,362,363,364,365,366,367],"is-scroll","is-not-scroll","is-scroll-top","is-not-scroll-top","is-scroll-top-px","is-scroll-mid-px","is-scroll-n-px","is-scroll-max-px","is-scroll-top-vh",[369],"wp247-body-classes Custom CSS",[371],"wp247-body-classes-post-body-classes",[],[374,375,376,377,378,379,380,381,382,383,384,385],"wp247_body_classes_multipage_options","wp247_body_classes_debug","wp247_mobile_detect","WP247_BODY_CLASSES_DEBUG","WP247_BODY_CLASSES_VERSION","WP247_BODY_CLASSES_PLUGIN_PATH","WP247_BODY_CLASSES_PLUGIN_URL","WP247_BODY_CLASSES_PLUGIN_NAME","WP247_BODY_CLASSES_PLUGIN_ID","WP247_BODY_CLASSES_PLUGIN_NONCE_ID","WP247_BODY_CLASSES_POST_META_KEY","WP247_BODY_CLASSES_POST_META_NAME",[],{"error":211,"url":388,"statusCode":389,"statusMessage":390,"message":390},"http:\u002F\u002Flocalhost\u002Fapi\u002Fplugins\u002Fwp247-body-classes\u002Fbundle",404,"no bundle for this plugin yet",{"slug":4,"current_version":6,"total_versions":392,"versions":393},14,[394,401,406,413,420,427,434,441,448,455,462,469,476,483],{"version":395,"download_url":396,"svn_tag_url":397,"released_at":28,"has_diff":209,"diff_files_changed":398,"diff_lines":28,"trac_diff_url":399,"vulnerabilities":400,"is_current":209},"2.2.1","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fwp247-body-classes.2.2.1.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fwp247-body-classes\u002Ftags\u002F2.2.1\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fwp247-body-classes%2Ftags%2F2.2.0&new_path=%2Fwp247-body-classes%2Ftags%2F2.2.1",[],{"version":6,"download_url":25,"svn_tag_url":402,"released_at":28,"has_diff":209,"diff_files_changed":403,"diff_lines":28,"trac_diff_url":404,"vulnerabilities":405,"is_current":211},"https:\u002F\u002Fplugins.svn.wordpress.org\u002Fwp247-body-classes\u002Ftags\u002F2.2.0\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fwp247-body-classes%2Ftags%2F2.1.2&new_path=%2Fwp247-body-classes%2Ftags%2F2.2.0",[],{"version":407,"download_url":408,"svn_tag_url":409,"released_at":28,"has_diff":209,"diff_files_changed":410,"diff_lines":28,"trac_diff_url":411,"vulnerabilities":412,"is_current":209},"2.1.2","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fwp247-body-classes.2.1.2.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fwp247-body-classes\u002Ftags\u002F2.1.2\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fwp247-body-classes%2Ftags%2F2.1.1&new_path=%2Fwp247-body-classes%2Ftags%2F2.1.2",[],{"version":414,"download_url":415,"svn_tag_url":416,"released_at":28,"has_diff":209,"diff_files_changed":417,"diff_lines":28,"trac_diff_url":418,"vulnerabilities":419,"is_current":209},"2.1.1","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fwp247-body-classes.2.1.1.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fwp247-body-classes\u002Ftags\u002F2.1.1\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fwp247-body-classes%2Ftags%2F2.1&new_path=%2Fwp247-body-classes%2Ftags%2F2.1.1",[],{"version":421,"download_url":422,"svn_tag_url":423,"released_at":28,"has_diff":209,"diff_files_changed":424,"diff_lines":28,"trac_diff_url":425,"vulnerabilities":426,"is_current":209},"2.1","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fwp247-body-classes.2.1.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fwp247-body-classes\u002Ftags\u002F2.1\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fwp247-body-classes%2Ftags%2F2.0.1&new_path=%2Fwp247-body-classes%2Ftags%2F2.1",[],{"version":428,"download_url":429,"svn_tag_url":430,"released_at":28,"has_diff":209,"diff_files_changed":431,"diff_lines":28,"trac_diff_url":432,"vulnerabilities":433,"is_current":209},"2.0.1","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fwp247-body-classes.2.0.1.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fwp247-body-classes\u002Ftags\u002F2.0.1\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fwp247-body-classes%2Ftags%2F2.0&new_path=%2Fwp247-body-classes%2Ftags%2F2.0.1",[],{"version":435,"download_url":436,"svn_tag_url":437,"released_at":28,"has_diff":209,"diff_files_changed":438,"diff_lines":28,"trac_diff_url":439,"vulnerabilities":440,"is_current":209},"2.0","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fwp247-body-classes.2.0.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fwp247-body-classes\u002Ftags\u002F2.0\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fwp247-body-classes%2Ftags%2F1.1.3&new_path=%2Fwp247-body-classes%2Ftags%2F2.0",[],{"version":442,"download_url":443,"svn_tag_url":444,"released_at":28,"has_diff":209,"diff_files_changed":445,"diff_lines":28,"trac_diff_url":446,"vulnerabilities":447,"is_current":209},"1.1.3","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fwp247-body-classes.1.1.3.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fwp247-body-classes\u002Ftags\u002F1.1.3\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fwp247-body-classes%2Ftags%2F1.1.2&new_path=%2Fwp247-body-classes%2Ftags%2F1.1.3",[],{"version":449,"download_url":450,"svn_tag_url":451,"released_at":28,"has_diff":209,"diff_files_changed":452,"diff_lines":28,"trac_diff_url":453,"vulnerabilities":454,"is_current":209},"1.1.2","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fwp247-body-classes.1.1.2.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fwp247-body-classes\u002Ftags\u002F1.1.2\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fwp247-body-classes%2Ftags%2F1.1.1&new_path=%2Fwp247-body-classes%2Ftags%2F1.1.2",[],{"version":456,"download_url":457,"svn_tag_url":458,"released_at":28,"has_diff":209,"diff_files_changed":459,"diff_lines":28,"trac_diff_url":460,"vulnerabilities":461,"is_current":209},"1.1.1","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fwp247-body-classes.1.1.1.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fwp247-body-classes\u002Ftags\u002F1.1.1\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fwp247-body-classes%2Ftags%2F1.1&new_path=%2Fwp247-body-classes%2Ftags%2F1.1.1",[],{"version":463,"download_url":464,"svn_tag_url":465,"released_at":28,"has_diff":209,"diff_files_changed":466,"diff_lines":28,"trac_diff_url":467,"vulnerabilities":468,"is_current":209},"1.1","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fwp247-body-classes.1.1.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fwp247-body-classes\u002Ftags\u002F1.1\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fwp247-body-classes%2Ftags%2F1.0.3&new_path=%2Fwp247-body-classes%2Ftags%2F1.1",[],{"version":470,"download_url":471,"svn_tag_url":472,"released_at":28,"has_diff":209,"diff_files_changed":473,"diff_lines":28,"trac_diff_url":474,"vulnerabilities":475,"is_current":209},"1.0.3","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fwp247-body-classes.1.0.3.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fwp247-body-classes\u002Ftags\u002F1.0.3\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fwp247-body-classes%2Ftags%2F1.0.1&new_path=%2Fwp247-body-classes%2Ftags%2F1.0.3",[],{"version":477,"download_url":478,"svn_tag_url":479,"released_at":28,"has_diff":209,"diff_files_changed":480,"diff_lines":28,"trac_diff_url":481,"vulnerabilities":482,"is_current":209},"1.0.1","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fwp247-body-classes.1.0.1.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fwp247-body-classes\u002Ftags\u002F1.0.1\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fwp247-body-classes%2Ftags%2F1.0&new_path=%2Fwp247-body-classes%2Ftags%2F1.0.1",[],{"version":91,"download_url":484,"svn_tag_url":485,"released_at":28,"has_diff":209,"diff_files_changed":486,"diff_lines":28,"trac_diff_url":28,"vulnerabilities":487,"is_current":209},"https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fwp247-body-classes.1.0.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fwp247-body-classes\u002Ftags\u002F1.0\u002F",[],[]]