[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$f5nHd4s9jM6FgRNRHVcPu06ZsjfZM91kyX9tPSCcjA8M":3},{"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":13,"last_updated":14,"tested_up_to":15,"requires_at_least":16,"requires_php":17,"tags":18,"homepage":21,"download_link":22,"security_score":23,"vuln_count":13,"unpatched_count":13,"last_vuln_date":24,"fetched_at":25,"vulnerabilities":26,"developer":27,"crawl_stats":24,"alternatives":34,"analysis":138,"fingerprints":360},"plugin-builder","Plugin Builder","1.0.0","Chris Taylor","https:\u002F\u002Fprofiles.wordpress.org\u002Fmrwiblog\u002F","\u003Cp>This is a plugin for WordPress plugin developers. If you don’t understand what \u003Ccode>PHP\u003C\u002Fcode>, \u003Ccode>HTML\u003C\u002Fcode>, \u003Ccode>CSS\u003C\u002Fcode>, \u003Ccode>add_action\u003C\u002Fcode> and \u003Ccode>apply_filters\u003C\u002Fcode> are then this plugin is not for you!\u003C\u002Fp>\n\u003Cp>The \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Ftommcfarlin\u002FWordPress-Plugin-Boilerplate\" rel=\"nofollow ugc\">WordPress Plugin Boilerplate\u003C\u002Fa> is a fantastic tool for standardising WordPress plugins, and encouraging developers to use best practices. But manual editing of every file to enter the name of the plugin, the author name and all the other metadata is a bit of a chore. This plugin automates that process, giving you a simple form to enter your metadata, then when you hit the ‘Build’ button your new plugin is created with all the correct metadata.\u003C\u002Fp>\n\u003Cp>But there’s more. You can also define Custom Post Types and even other custom classes which will have .php files created automatically, and all the relevant code to include those files in your plugin. Once your plugin is built you can, of course, edit the files in any way you want to add extra methods.\u003C\u002Fp>\n\u003Cp>Plugin Builder will even create a manager class for your Custom Post Types if you want, as a place to store methods related to your CPTs – such as a get_all() method, for example.\u003C\u002Fp>\n\u003Cp>And that’s not all. Some developers like to include extra items in their plugins, like utility classes or frameworks such as the \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fgilbitron\u002FWordPress-Settings-Framework\" rel=\"nofollow ugc\">WordPress Settings Framework\u003C\u002Fa>. Plugin Builder automates that process, too, by downloading and including the files you choose in your new plugin.\u003C\u002Fp>\n\u003Cp>Plugin Builder comes with a range of these additional includes you can choose from, but if there are other items you want to include you can make those part of the build process really easily (by extending a simple interface and using a filter).\u003C\u002Fp>\n\u003Cp>So, let’s look at the traditional way of using the WordPress Plugin Boilerplate to create a new plugin:\u003C\u002Fp>\n\u003Col>\n\u003Cli>Download the Boilerplate and extract it\u003C\u002Fli>\n\u003Cli>Rename all the files using your plugin name (e.g. ‘class-plugin-name.php’ to ‘class-my-plugin.php’)\u003C\u002Fli>\n\u003Cli>Go through all the files and replace the metadata with your plugin details (name, slug, author, URIs etc)\u003C\u002Fli>\n\u003Cli>Create your CPT class and the registration code,\u003C\u002Fli>\n\u003Cli>Add the code to include the CPT file and register the CPT with WordPress\u003C\u002Fli>\n\u003Cli>Create a custom class\u003C\u002Fli>\n\u003Cli>Add the code to include your custom class file\u003C\u002Fli>\n\u003Cli>Download your favourite utility files to your plugin folder\u003C\u002Fli>\n\u003Cli>Add the code to include your utility files in your plugin\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>Or, using Plugin Builder:\u003C\u002Fp>\n\u003Col>\n\u003Cli>Enter the details of your plugin (name and description – the slug and class name are automatically created)\u003C\u002Fli>\n\u003Cli>Enter the details of your Custom Post Type (name and description, whether you want a manager class creating)\u003C\u002Fli>\n\u003Cli>Enter the details of your custom class (name and description)\u003C\u002Fli>\n\u003Cli>Check the box next to any utility files you want to be included\u003C\u002Fli>\n\u003Cli>Press ‘Build’\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>My guess is Plugin Builder will save you 2-4 hours work, and make your plugins much more standard in their architecture.\u003C\u002Fp>\n\u003Cp>When your plugin is built the settings for it will be saved so you can rebuild your plugin at any time (this will overwrite any changes you’ve made manually) or make a few changes and create a new plugin.\u003C\u002Fp>\n\u003Ch3>Optional includes\u003C\u002Fh3>\n\u003Cp>The optional includes available in Plugin Builder are:\u003C\u002Fp>\n\u003Ch4>WordPress Settings Framework\u003C\u002Fh4>\n\u003Cp>The \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fgilbitron\u002FWordPress-Settings-Framework\" rel=\"nofollow ugc\">WordPress Settings Framework\u003C\u002Fa> aims to take the pain out of creating settings pages for your WordPress plugins by effectively creating a wrapper around the WordPress settings API and making it super simple to create and maintain settings pages.\u003C\u002Fp>\n\u003Ch4>util.php\u003C\u002Fh4>\n\u003Cp>\u003Ca href=\"http:\u002F\u002Fbrandonwamboldt.github.io\u002Futilphp\u002F\" rel=\"nofollow ugc\">util.php\u003C\u002Fa> is a collection of useful functions and snippets that you need or could use every day, designed to avoid conflicts with existing projects.\u003C\u002Fp>\n\u003Cp>Expect more includes to be bundled with future versions of Plugin Builder. If you have an idea for an include you want and you think it may be useful for other developers let me know. Or, add your own include (see the next section for details).\u003C\u002Fp>\n\u003Ch4>Adding your own includes\u003C\u002Fh4>\n\u003Cp>Adding your own includes to Plugin Builder is really easy. There’s an interface named Plugin_Builder_Include which you need to extend, it has a few methods that need to be implemented. Then you add a call to a method in your include class for the plugin_builder_includes filter. Here’s a simple example:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>class My_Include implements Plugin_Builder_Include {\n\n    \u002F**\n     * The method run when the user has selected this include.\n     *\n     * @since    1.0.0\n     * @var      Plugin_Builder_Settings    $settings    The settings for the plugin being built.\n     *\u002F\n    public function process_include( $settings ) {\n\n        \u002F\u002F This is where you would do the work for your include; downloading files and saving them locally,\n        \u002F\u002F creating folders, adding settings etc.\n\n        \u002F\u002F Returns 'true' if your processing succeeds, and a string detailing the error if it fails.\n\n        \u002F\u002F We ALWAYS use the WordPress Filesystem API for file operations, see this for details: https:\u002F\u002Fcodex.wordpress.org\u002FFilesystem_API\n        global $wp_filesystem;\n        if ( ! isset( $wp_filesystem ) || null == $wp_filesystem ) {\n            return false;\n        }\n\n        \u002F\u002F get the file we want to include in the new plugin from a local folder\n        \u002F\u002F Note: it's tempting to get your files from somewhere on the Internet (such as Github or your own site) but\n        \u002F\u002F this would be against the WordPress Plugin Guidelines: https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fabout\u002Fguidelines\u002F\n        \u002F\u002F Also you can't include your files in a Zip or other archive, they have to be diff-able (i.e. text-based) files.\n        $cache_file = PLUGIN_BUILDER_DIR . 'cache\u002Fmy-include.php';\n\n        \u002F\u002F copy the file to the build folder\n        $wp_filesystem->copy( $cache_file, $settings->build_path . 'includes\u002Fmy-include.php' );\n\n        return true;\n\n    }\n\n    \u002F**\n     * Returns any code to be injected into the top of the load_dependencies() method.\n     *\n     * @since    1.0.0\n     *\u002F\n    public function get_dependencies_code() {\n\n        \u002F\u002F Be careful here: you're writing PHP code as a string to be injected into a .php file, so it must be valid.\n\n        return \"\n        \u002F**\n         * My Include\n         *\n         * My Include is an example include for the Plugin Builder plugin.\n         *\n         *\u002F\n        require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes\u002Fmy-include.php';\n        \";\n\n    }\n\n    \u002F**\n     * Returns the unique slug for this include.\n     *\n     * @since    1.0.0\n     *\u002F\n    public function get_slug(){\n\n        return 'my-include';\n\n    }\n\n    \u002F**\n     * Returns the translated title for this include.\n     *\n     * @since    1.0.0\n     *\u002F\n    public function get_title() {\n\n        return __( 'My Include' );\n\n    }\n\n    \u002F**\n     * Returns the translated description (HTML allowed) for this include.\n     *\n     * @since    1.0.0\n     *\u002F\n    public function get_description() {\n\n        return __( '\u003Cp>My Include is an example include for the Plugin Builder plugin.\u003C\u002Fp>' );\n\n    }\n\n    \u002F**\n     * Returns the URL giving more information on this include.\n     *\n     * @since    1.0.0\n     *\u002F\n    public function get_info_url() {\n\n        return 'https:\u002F\u002Fsome-website.com\u002Fmy-include\u002F';\n\n    }\n\n    \u002F**\n     * The method that will be called when the add_includes filter runs.\n     *\n     * @since    1.0.0\n     * @var      array    $includes    The array of includes.\n     *\u002F\n    public function add_includes( $includes ) {\n\n        return $includes;\n\n    }\n\n}\n\n\u002F\u002F add this include to Plugin Builder using the plugin_builder_includes filter\n$my_include = new My_Include();\nadd_filter( 'plugin_builder_includes', array( $my_include, 'add_include' ) );\n\u003C\u002Fcode>\u003C\u002Fpre>\n","Gets started building a plugin using the WordPress Plugin Boilerplate in seconds, not hours. Speed up your development.",20,3958,0,"2015-04-20T21:08:00.000Z","4.7.32","3.0.1","",[19,20],"boilerplate","development","http:\u002F\u002Fwww.stillbreathing.co.uk\u002Fwordpress\u002Fplugin-builder","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fplugin-builder.zip",85,null,"2026-03-15T15:16:48.613Z",[],{"slug":28,"display_name":7,"profile_url":8,"plugin_count":29,"total_installs":30,"avg_security_score":31,"avg_patch_time_days":32,"trust_score":31,"computed_at":33},"mrwiblog",11,460,81,30,"2026-04-04T14:24:12.181Z",[35,60,80,101,122],{"slug":36,"name":37,"version":38,"author":39,"author_profile":40,"description":41,"short_description":42,"active_installs":43,"downloaded":44,"rating":45,"num_ratings":46,"last_updated":47,"tested_up_to":48,"requires_at_least":49,"requires_php":50,"tags":51,"homepage":55,"download_link":56,"security_score":57,"vuln_count":58,"unpatched_count":13,"last_vuln_date":59,"fetched_at":25},"query-monitor","Query Monitor – The developer tools panel for WordPress","3.20.2","John Blackbourn","https:\u002F\u002Fprofiles.wordpress.org\u002Fjohnbillion\u002F","\u003Cp>Query Monitor is the developer tools panel for WordPress and WooCommerce. It enables debugging of database queries, PHP errors, hooks and actions, block editor blocks, enqueued scripts and stylesheets, HTTP API calls, and more.\u003C\u002Fp>\n\u003Cp>It includes some advanced features such as debugging of Ajax calls, REST API calls, user capability checks, and full support for block themes and full site editing. It includes the ability to narrow down much of its output by plugin or theme, allowing you to quickly determine poorly performing plugins, themes, or functions.\u003C\u002Fp>\n\u003Cp>Query Monitor focuses heavily on presenting its information in a useful manner, for example by showing aggregate database queries grouped by the plugins, themes, or functions that are responsible for them. It adds an admin toolbar menu showing an overview of the current page, with complete debugging information shown in panels once you select a menu item.\u003C\u002Fp>\n\u003Cp>Query Monitor supports versions of WordPress up to three years old, and PHP version 7.4 or higher.\u003C\u002Fp>\n\u003Cp>For complete information, please see \u003Ca href=\"https:\u002F\u002Fquerymonitor.com\u002F\" rel=\"nofollow ugc\">the Query Monitor website\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>Here’s an overview of what’s shown for each page load:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Database queries, including notifications for slow, duplicate, or erroneous queries. Allows filtering by query type (\u003Ccode>SELECT\u003C\u002Fcode>, \u003Ccode>UPDATE\u003C\u002Fcode>, \u003Ccode>DELETE\u003C\u002Fcode>, etc), responsible component (plugin, theme, WordPress core), and calling function, and provides separate aggregate views for each.\u003C\u002Fli>\n\u003Cli>The template filename, the complete template hierarchy, and names of all template parts that were loaded or not loaded (for block themes and classic themes).\u003C\u002Fli>\n\u003Cli>PHP errors presented nicely along with their responsible component and call stack, and a visible warning in the admin toolbar.\u003C\u002Fli>\n\u003Cli>Usage of “Doing it Wrong” or “Deprecated” functionality in the code on your site.\u003C\u002Fli>\n\u003Cli>Blocks and associated properties within post content and within full site editing (FSE).\u003C\u002Fli>\n\u003Cli>Matched rewrite rules, associated query strings, and query vars.\u003C\u002Fli>\n\u003Cli>Enqueued scripts and stylesheets, along with their dependencies, dependents, and alerts for broken dependencies.\u003C\u002Fli>\n\u003Cli>Language settings and loaded translation files (MO files and JSON files) for each text domain.\u003C\u002Fli>\n\u003Cli>HTTP API requests, with response code, responsible component, and time taken, with alerts for failed or erroneous requests.\u003C\u002Fli>\n\u003Cli>User capability checks, along with the result and any parameters passed to the capability check.\u003C\u002Fli>\n\u003Cli>Environment information, including detailed information about PHP, the database, WordPress, and the web server.\u003C\u002Fli>\n\u003Cli>The values of all WordPress conditional functions such as \u003Ccode>is_single()\u003C\u002Fcode>, \u003Ccode>is_home()\u003C\u002Fcode>, etc.\u003C\u002Fli>\n\u003Cli>Transients that were updated.\u003C\u002Fli>\n\u003Cli>Usage of \u003Ccode>switch_to_blog()\u003C\u002Fcode> and \u003Ccode>restore_current_blog()\u003C\u002Fcode> on Multisite installations.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>In addition:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Whenever a redirect occurs, Query Monitor adds an HTTP header containing the call stack, so you can use your favourite HTTP inspector or browser developer tools to trace what triggered the redirect.\u003C\u002Fli>\n\u003Cli>The response from any jQuery-initiated Ajax request on the page will contain various debugging information in its headers. PHP errors also get output to the browser’s developer console.\u003C\u002Fli>\n\u003Cli>The response from an authenticated WordPress REST API request will contain an overview of performance information and PHP errors in its headers, as long as the authenticated user has permission to view Query Monitor’s output. An \u003Ca href=\"https:\u002F\u002Fdeveloper.wordpress.org\u002Frest-api\u002Fusing-the-rest-api\u002Fglobal-parameters\u002F#_envelope\" rel=\"nofollow ugc\">an enveloped REST API request\u003C\u002Fa> will include even more debugging information in the \u003Ccode>qm\u003C\u002Fcode> property of the response.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>By default, Query Monitor’s output is only shown to Administrators on single-site installations, and Super Admins on Multisite installations.\u003C\u002Fp>\n\u003Cp>In addition to this, you can set an authentication cookie which allows you to view Query Monitor output when you’re not logged in (or if you’re logged in as a non-Administrator). See the Settings panel for details.\u003C\u002Fp>\n\u003Ch3>Other Plugins\u003C\u002Fh3>\n\u003Cp>I maintain several other plugins for developers. Check them out:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fuser-switching\u002F\" rel=\"ugc\">User Switching\u003C\u002Fa> provides instant switching between user accounts in WordPress.\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fwp-crontrol\u002F\" rel=\"ugc\">WP Crontrol\u003C\u002Fa> lets you view and control what’s happening in the WP-Cron system\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Privacy Statement\u003C\u002Fh3>\n\u003Cp>Query Monitor is private by default and always will be. It does not persistently store any of the data that it collects. It does not send data to any third party, nor does it include any third party resources. \u003Ca href=\"https:\u002F\u002Fquerymonitor.com\u002Fprivacy\u002F\" rel=\"nofollow ugc\">Query Monitor’s full privacy statement can be found here\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch3>Accessibility Statement\u003C\u002Fh3>\n\u003Cp>Query Monitor aims to be fully accessible to all of its users. \u003Ca href=\"https:\u002F\u002Fquerymonitor.com\u002Faccessibility\u002F\" rel=\"nofollow ugc\">Query Monitor’s full accessibility statement can be found here\u003C\u002Fa>.\u003C\u002Fp>\n","Query Monitor is the developer tools panel for WordPress and WooCommerce.",200000,19156533,98,463,"2025-12-11T22:16:00.000Z","6.9.4","6.1","7.4",[52,53,20,54,36],"debug","debug-bar","performance","https:\u002F\u002Fquerymonitor.com\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fquery-monitor.3.20.2.zip",97,1,"2026-03-30 23:21:22",{"slug":61,"name":62,"version":63,"author":64,"author_profile":65,"description":66,"short_description":67,"active_installs":68,"downloaded":69,"rating":45,"num_ratings":70,"last_updated":71,"tested_up_to":48,"requires_at_least":72,"requires_php":73,"tags":74,"homepage":77,"download_link":78,"security_score":79,"vuln_count":13,"unpatched_count":13,"last_vuln_date":24,"fetched_at":25},"yoast-test-helper","Yoast Test Helper","1.18","Yoast","https:\u002F\u002Fprofiles.wordpress.org\u002Fyoast\u002F","\u003Cp>This plugin makes testing Yoast SEO, Yoast SEO add-ons and integrations and resetting the different features a lot easier. It also makes testing database migrations a lot easier as it allows you to set the database version and see if the upgrade process runs smoothly.\u003C\u002Fp>\n\u003Ch4>Features\u003C\u002Fh4>\n\u003Cp>This test helper plugin has several features:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Easily enable Yoast SEO development mode.\u003C\u002Fli>\n\u003Cli>Saving and restoring Yoast SEO and Yoast SEO extension options, to test upgrade paths.\u003C\u002Fli>\n\u003Cli>Add options debug info to Yoast SEO admin pages.\u003C\u002Fli>\n\u003Cli>Reset the internal link counter, prominent words calculation and other features.\u003C\u002Fli>\n\u003Cli>Add two post types (Books and Movies) with two taxonomies (Category and Genre) each and optionally disable the block editor for them.\u003C\u002Fli>\n\u003Cli>Easily add an inline script after a selected script.\u003C\u002Fli>\n\u003Cli>Replace your \u003Ccode>.test\u003C\u002Fcode> TLD with \u003Ccode>example.com\u003C\u002Fcode> in your Schema output, so you can easily copy paste to Google’s Structured Data Testing Tool.\u003C\u002Fli>\n\u003Cli>Change the number of URLs shown in an XML Sitemap.\u003C\u002Fli>\n\u003Cli>Easily change your MyYoast URL.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>If you find bugs or would like to contribute, see our \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FYoast\u002Fyoast-test-helper\" rel=\"nofollow ugc\">GitHub repo\u003C\u002Fa>.\u003C\u002Fp>\n","This plugin makes testing Yoast SEO, Yoast SEO add-ons and integrations and resetting the different features a lot easier.",60000,762113,12,"2025-12-01T18:28:00.000Z","6.4","7.2.5",[20,75,76],"yoast","yoast-seo","https:\u002F\u002Fgithub.com\u002Fyoast\u002Fyoast-test-helper","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fyoast-test-helper.1.18.zip",100,{"slug":81,"name":82,"version":83,"author":84,"author_profile":85,"description":86,"short_description":87,"active_installs":88,"downloaded":89,"rating":45,"num_ratings":90,"last_updated":91,"tested_up_to":48,"requires_at_least":92,"requires_php":93,"tags":94,"homepage":99,"download_link":100,"security_score":79,"vuln_count":13,"unpatched_count":13,"last_vuln_date":24,"fetched_at":25},"what-the-file","What The File","1.6.1","Barry Kooij","https:\u002F\u002Fprofiles.wordpress.org\u002Fbarrykooij\u002F","\u003Cp>What The File adds an option to your toolbar showing what file and template parts are used to display the page you’re currently viewing.\u003C\u002Fp>\n\u003Cp>You can click the file name to directly edit it through the theme editor, though I don’t recommend this for bigger changes.\u003C\u002Fp>\n\u003Cp>What The File supports BuddyPress and Roots Theme based themes.\u003C\u002Fp>\n\u003Cp>More information can be found \u003Ca href=\"http:\u002F\u002Fwww.barrykooij.com\u002Fwhat-the-file\u002F\" rel=\"nofollow ugc\">here\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch4>Looking for a great related posts plugin for WordPress?\u003C\u002Fh4>\n\u003Cp>Another plugin I’ve built, that I’m very proud of is Related Posts for WordPress. Related Posts for WordPress offers you the ability to link related posts to each other with just 1 click! And it’s 100% free! \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Frelated-posts-for-wp\u002F\" rel=\"ugc\">Check it out on the WordPress repository.\u003C\u002Fa>\u003C\u002Fp>\n","What The File is the best tool to find out what template parts are used to display the page you're currently viewing!",40000,585647,882,"2026-02-19T17:21:00.000Z","3.1","5.3",[20,95,96,97,98],"file","template","template-editing","toolbar","http:\u002F\u002Fwww.barrykooij.com\u002Fwhat-the-file\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fwhat-the-file.1.6.1.zip",{"slug":102,"name":103,"version":104,"author":105,"author_profile":106,"description":107,"short_description":108,"active_installs":109,"downloaded":110,"rating":45,"num_ratings":111,"last_updated":112,"tested_up_to":113,"requires_at_least":114,"requires_php":17,"tags":115,"homepage":17,"download_link":120,"security_score":121,"vuln_count":13,"unpatched_count":13,"last_vuln_date":24,"fetched_at":25},"prevent-browser-caching","Prevent Browser Caching","2.3.5","kostyatereshchuk","https:\u002F\u002Fprofiles.wordpress.org\u002Fkostyatereshchuk\u002F","\u003Cp>Are you a frontend developer? Do you want to clear browser cache for all users? Just activate this plugin and show your work!\u003C\u002Fp>\n\u003Cp>Prevent Browser Caching allows you to update the assets version of all CSS and JS files automatically or manually in one click.\u003C\u002Fp>\n\u003Cp>Now you can show the latest changes on the site without asking the client to clear the cache.\u003C\u002Fp>\n\u003Ch4>How it works?\u003C\u002Fh4>\n\u003Cp>Usually, WordPress loads assets using query param “ver” in the URL (e.g., style.css?ver=4.9.6). It allows browsers to cache these files until the parameter will not be updated.\u003C\u002Fp>\n\u003Cp>To prevent caching of CSS and JS files, this plugin adds a unique number (e.g., 1526905286) to the “ver” parameter (e.g., style.css?ver=4.9.6.1526905286) for all links, loaded using wp_enqueue_style and wp_enqueue_script functions.\u003C\u002Fp>\n\u003Ch4>For developers\u003C\u002Fh4>\n\u003Cp>By default, this plugin updates all assets files every time a user loads a page and adds options in the admin panel (Settings -> Prevent Browser Caching) which allows you to configure updating of these files.\u003C\u002Fp>\n\u003Cp>But you can also set the version of CSS and JS files programmatically.\u003C\u002Fp>\n\u003Cp>Just insert this code in functions.php file of your theme and change the value of assets_version when you need to update assets:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>prevent_browser_caching( array( \n    'assets_version' => '123' \n) );\n\u003C\u002Fcode>\u003C\u002Fpre>\n","Updates the assets version of all CSS and JS files. Shows the latest changes on the site without asking the client to clear browser cache.",10000,109482,28,"2024-04-09T17:18:00.000Z","6.5.8","4.0",[116,117,118,20,119],"assets","browser-cache","clear","frontend","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fprevent-browser-caching.2.3.5.zip",92,{"slug":123,"name":124,"version":125,"author":126,"author_profile":127,"description":128,"short_description":129,"active_installs":130,"downloaded":131,"rating":79,"num_ratings":70,"last_updated":132,"tested_up_to":48,"requires_at_least":133,"requires_php":17,"tags":134,"homepage":136,"download_link":137,"security_score":79,"vuln_count":13,"unpatched_count":13,"last_vuln_date":24,"fetched_at":25},"stop-emails","Stop Emails","1.2.1","Sal Ferrarello","https:\u002F\u002Fprofiles.wordpress.org\u002Fsalcode\u002F","\u003Cp>Stops outgoing emails sent from WordPress.  This plugin stops\u003Cbr \u002F>\noutgoing emails generated by WordPress core, plugins, and themes.\u003Cbr \u002F>\nEmails sent using the \u003Ccode>wp_mail()\u003C\u002Fcode> function, will not be sent.\u003Cbr \u002F>\nIn the case where an author does not use the recommended \u003Ccode>wp_mail()\u003C\u002Fcode>\u003Cbr \u002F>\nfunction and instead sends the email using another mechanism, an email will\u003Cbr \u002F>\nstill be sent.\u003C\u002Fp>\n\u003Cp>This plugin allows you to suspend sending emails when doing development work.\u003Cbr \u002F>\nAny calls to \u003Ccode>wp_mail()\u003C\u002Fcode> will fail silently.  WordPress\u003Cbr \u002F>\nwill operate as if the email were sent successfully\u003Cbr \u002F>\nbut no email will actually be sent.\u003C\u002Fp>\n\u003Cp>On the admin menu page Settings > Stop Emails, there is the option\u003Cbr \u002F>\nto log all emails to the PHP error log.  By default this logging is\u003Cbr \u002F>\ndisabled.\u003C\u002Fp>\n\u003Cp>NOTE: If using the PHP \u003Ccode>mail()\u003C\u002Fcode> function directly, this\u003Cbr \u002F>\nplugin will NOT stop the emails.\u003C\u002Fp>\n\u003Cp>Built by \u003Ca href=\"http:\u002F\u002Fsalferrarello.com\u002F\" rel=\"nofollow ugc\">Sal Ferrarello\u003C\u002Fa> \u002F \u003Ca href=\"http:\u002F\u002Ftwitter.com\u002Fsalcode\" rel=\"nofollow ugc\">@salcode\u003C\u002Fa>\u003C\u002Fp>\n","Stop all outgoing emails sent from WordPress.",5000,76809,"2026-01-13T02:08:00.000Z","3.6",[20,135],"email","http:\u002F\u002Fsalferrarello.com\u002Fstop-emails-wordpress-plugin\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fstop-emails.1.2.1.zip",{"attackSurface":139,"codeSignals":195,"taintFlows":348,"riskAssessment":349,"analyzedAt":359},{"hooks":140,"ajaxHandlers":191,"restRoutes":192,"shortcodes":193,"cronEvents":194,"entryPointCount":13,"unprotectedCount":13},[141,147,150,152,155,157,161,164,166,169,171,173,176,178,180,182,188],{"type":142,"name":143,"callback":144,"file":145,"line":146},"action","plugins_loaded","anonymous","cache\\wordpress-plugin-boilerplate\\plugin-name\\trunk\\includes\\class-plugin-name.php",140,{"type":142,"name":148,"callback":144,"file":145,"line":149},"admin_enqueue_scripts",155,{"type":142,"name":148,"callback":144,"file":145,"line":151},156,{"type":142,"name":153,"callback":144,"file":145,"line":154},"wp_enqueue_scripts",171,{"type":142,"name":153,"callback":144,"file":145,"line":156},172,{"type":142,"name":158,"callback":158,"file":159,"line":160},"admin_init","cache\\wp-settings-framework\\wp-settings-framework.php",64,{"type":142,"name":162,"callback":162,"file":159,"line":163},"admin_notices",65,{"type":142,"name":148,"callback":148,"file":159,"line":165},66,{"type":142,"name":143,"callback":144,"file":167,"line":168},"includes\\class-plugin-builder.php",175,{"type":142,"name":148,"callback":144,"file":167,"line":170},190,{"type":142,"name":148,"callback":144,"file":167,"line":172},191,{"type":142,"name":174,"callback":144,"file":167,"line":175},"admin_menu",192,{"type":142,"name":158,"callback":144,"file":167,"line":177},193,{"type":142,"name":153,"callback":144,"file":167,"line":179},208,{"type":142,"name":153,"callback":144,"file":167,"line":181},209,{"type":183,"name":184,"callback":185,"file":186,"line":187},"filter","plugin_builder_includes","add_include","includes\\include-classes\\class-util-php.php",115,{"type":183,"name":184,"callback":185,"file":189,"line":190},"includes\\include-classes\\class-wordpress-settings-framework.php",129,[],[],[],[],{"dangerousFunctions":196,"sqlUsage":202,"outputEscaping":204,"fileOperations":346,"externalRequests":13,"nonceChecks":58,"capabilityChecks":13,"bundledLibraries":347},[197],{"fn":198,"file":199,"line":200,"context":201},"unserialize","cache\\util-php\\util.php",439,"return @unserialize( $data );",{"prepared":13,"raw":13,"locations":203},[],{"escaped":205,"rawEcho":31,"locations":206},15,[207,211,213,214,216,218,219,222,224,225,227,229,231,233,234,236,238,239,240,241,242,243,244,245,246,248,250,252,253,255,257,258,260,263,264,265,266,268,270,272,274,276,277,279,281,283,284,286,289,290,291,292,293,294,296,298,300,301,302,304,306,308,310,312,313,315,317,319,320,322,324,326,328,330,332,334,336,338,340,342,344],{"file":208,"line":209,"context":210},"admin\\class-plugin-builder-admin.php",169,"raw output",{"file":208,"line":212,"context":210},185,{"file":208,"line":179,"context":210},{"file":208,"line":215,"context":210},223,{"file":208,"line":217,"context":210},416,{"file":208,"line":200,"context":210},{"file":220,"line":221,"context":210},"admin\\partials\\classes.php",24,{"file":220,"line":223,"context":210},25,{"file":220,"line":223,"context":210},{"file":220,"line":226,"context":210},26,{"file":220,"line":228,"context":210},29,{"file":220,"line":230,"context":210},32,{"file":220,"line":232,"context":210},33,{"file":220,"line":232,"context":210},{"file":220,"line":235,"context":210},37,{"file":237,"line":221,"context":210},"admin\\partials\\custom-post-types.php",{"file":237,"line":223,"context":210},{"file":237,"line":223,"context":210},{"file":237,"line":226,"context":210},{"file":237,"line":228,"context":210},{"file":237,"line":230,"context":210},{"file":237,"line":232,"context":210},{"file":237,"line":232,"context":210},{"file":237,"line":235,"context":210},{"file":237,"line":247,"context":210},38,{"file":237,"line":249,"context":210},42,{"file":237,"line":251,"context":210},43,{"file":237,"line":251,"context":210},{"file":237,"line":254,"context":210},47,{"file":237,"line":256,"context":210},48,{"file":237,"line":256,"context":210},{"file":237,"line":259,"context":210},52,{"file":261,"line":262,"context":210},"admin\\partials\\general-settings.php",18,{"file":261,"line":262,"context":210},{"file":261,"line":221,"context":210},{"file":261,"line":230,"context":210},{"file":261,"line":267,"context":210},40,{"file":261,"line":269,"context":210},45,{"file":261,"line":271,"context":210},50,{"file":261,"line":273,"context":210},55,{"file":261,"line":275,"context":210},60,{"file":261,"line":163,"context":210},{"file":261,"line":278,"context":210},82,{"file":261,"line":280,"context":210},87,{"file":261,"line":282,"context":210},95,{"file":261,"line":79,"context":210},{"file":261,"line":285,"context":210},101,{"file":287,"line":288,"context":210},"admin\\partials\\includes.php",23,{"file":287,"line":288,"context":210},{"file":287,"line":221,"context":210},{"file":287,"line":221,"context":210},{"file":287,"line":223,"context":210},{"file":287,"line":228,"context":210},{"file":199,"line":295,"context":210},133,{"file":199,"line":297,"context":210},1282,{"file":159,"line":299,"context":210},131,{"file":159,"line":175,"context":210},{"file":159,"line":177,"context":210},{"file":159,"line":303,"context":210},197,{"file":159,"line":305,"context":210},198,{"file":159,"line":307,"context":210},202,{"file":159,"line":309,"context":210},203,{"file":159,"line":311,"context":210},207,{"file":159,"line":181,"context":210},{"file":159,"line":314,"context":210},212,{"file":159,"line":316,"context":210},217,{"file":159,"line":318,"context":210},219,{"file":159,"line":215,"context":210},{"file":159,"line":321,"context":210},224,{"file":159,"line":323,"context":210},232,{"file":159,"line":325,"context":210},233,{"file":159,"line":327,"context":210},235,{"file":159,"line":329,"context":210},240,{"file":159,"line":331,"context":210},241,{"file":159,"line":333,"context":210},242,{"file":159,"line":335,"context":210},243,{"file":159,"line":337,"context":210},260,{"file":159,"line":339,"context":210},261,{"file":159,"line":341,"context":210},262,{"file":159,"line":343,"context":210},280,{"file":159,"line":345,"context":210},283,17,[],[],{"summary":350,"deductions":351},"The plugin \"plugin-builder\" v1.0.0 presents a mixed security posture. On the positive side, it demonstrates excellent security hygiene in several areas. The absence of known CVEs and a clean vulnerability history, coupled with 100% of SQL queries using prepared statements, suggests a development process that prioritizes robust security practices. Furthermore, the complete lack of external HTTP requests and no recorded taint flows with unsanitized paths are significant strengths.\n\nHowever, there are critical areas for concern. The static analysis reveals a potentially dangerous function, 'unserialize', which can be a major vector for PHP Object Injection if not handled with extreme caution and input validation. Compounding this, a mere 16% of output escaping is alarming, indicating a high risk of Cross-Site Scripting (XSS) vulnerabilities. The complete lack of capability checks is another significant weakness, meaning actions within the plugin may not be properly authorized. While the attack surface is currently reported as zero entry points, this could change if functionality is added without adhering to security best practices.\n\nIn conclusion, while the plugin avoids common pitfalls like unpatched vulnerabilities and direct SQL injection, the presence of 'unserialize' and the overwhelmingly poor output escaping create a substantial risk profile. The lack of capability checks further exacerbates these issues. Addressing the output escaping and carefully scrutinizing the usage of 'unserialize' are paramount for improving the security of this plugin.",[352,354,356],{"reason":353,"points":205},"Dangerous function 'unserialize' used",{"reason":355,"points":205},"Low output escaping percentage (16%)",{"reason":357,"points":358},"No capability checks",10,"2026-03-16T23:08:50.219Z",{"wat":361,"direct":370},{"assetPaths":362,"generatorPatterns":365,"scriptPaths":366,"versionParams":367},[363,364],"\u002Fwp-content\u002Fplugins\u002Fplugin-builder\u002Fadmin\u002Fcss\u002Fplugin-builder-admin.css","\u002Fwp-content\u002Fplugins\u002Fplugin-builder\u002Fadmin\u002Fjs\u002Fplugin-builder-admin.js",[],[364],[368,369],"plugin-builder\u002Fadmin\u002Fcss\u002Fplugin-builder-admin.css?ver=","plugin-builder\u002Fadmin\u002Fjs\u002Fplugin-builder-admin.js?ver=",{"cssClasses":371,"htmlComments":373,"htmlAttributes":385,"restEndpoints":387,"jsGlobals":388,"shortcodeOutput":389},[372],"plugin-builder-admin-css",[374,375,376,377,378,379,378,380,381,382,383,384],"\u003C!-- The code that runs during plugin activation. -->","\u003C!-- The code that runs during plugin deactivation. -->","\u003C!-- The core plugin class that is used to define internationalization, dashboard-specific hooks, and public-facing site hooks. -->","\u003C!-- Begins execution of the plugin. -->","\u003C!-- The dashboard-specific functionality of the plugin. -->","\u003C!-- Defines the plugin name, version, and two examples hooks for how to enqueue the dashboard-specific stylesheet and JavaScript. -->","\u003C!-- Initialize the class and set its properties. -->","\u003C!-- Register the stylesheets for the Dashboard. -->","\u003C!-- Register the JavaScript for the dashboard. -->","\u003C!-- Adds pages to the admin menu. -->","\u003C!-- Handles form submissions. -->",[386],"data-plugin-builder-settings",[],[],[]]