[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fAVX78MEtWTG56edUx2uGpSz4PS2n9tEB6L9MNKUbGuc":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":14,"last_updated":15,"tested_up_to":16,"requires_at_least":17,"requires_php":18,"tags":19,"homepage":23,"download_link":24,"security_score":13,"vuln_count":25,"unpatched_count":25,"last_vuln_date":26,"fetched_at":27,"vulnerabilities":28,"developer":29,"crawl_stats":26,"alternatives":37,"analysis":136,"fingerprints":196},"pantheon-hud","Pantheon HUD","0.4.5","Pantheon Systems","https:\u002F\u002Fprofiles.wordpress.org\u002Fgetpantheon\u002F","\u003Cp>This plugin provides situational awareness of the Pantheon plaform from within your WordPress dashboard. It’s helpful to be reminded what environment you’re in, as well as providing quick links to get back to Pantheon’s dashboard, or to interface with your WordPress installation via the command line.\u003C\u002Fp>\n\u003Cp>Pantheon HUD is in early stages of development. We want your feedback! \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fpantheon-systems\u002Fpantheon-hud\u002Fissues\" rel=\"nofollow ugc\">Create a Github issue\u003C\u002Fa> with questions, feature requests, or bug reports.\u003C\u002Fp>\n","A heads-up display into your Pantheon environment.",900,70929,100,1,"2025-12-02T18:56:00.000Z","6.9.4","4.9","7.4",[20,21,22],"environment-indicator","hosting","pantheon","https:\u002F\u002Fpantheon.io","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fpantheon-hud.0.4.5.zip",0,null,"2026-03-15T15:16:48.613Z",[],{"slug":30,"display_name":7,"profile_url":8,"plugin_count":31,"total_installs":32,"avg_security_score":33,"avg_patch_time_days":34,"trust_score":35,"computed_at":36},"getpantheon",8,39000,99,30,93,"2026-04-05T03:01:42.813Z",[38,56,79,104,123],{"slug":39,"name":40,"version":41,"author":42,"author_profile":43,"description":44,"short_description":45,"active_installs":25,"downloaded":46,"rating":25,"num_ratings":25,"last_updated":47,"tested_up_to":48,"requires_at_least":49,"requires_php":50,"tags":51,"homepage":53,"download_link":54,"security_score":55,"vuln_count":25,"unpatched_count":25,"last_vuln_date":26,"fetched_at":27},"environment-displayer-for-pantheon","Environment Displayer for Pantheon","1.0.1","Rajin Sharwar","https:\u002F\u002Fprofiles.wordpress.org\u002Frajinsharwar\u002F","\u003Cp>A super light-weight WordPress plugin to display the current Pantheon’s environment in the ADMIN Toolbar of WordPress. Avoid conflicts while working on various envionment, and always besure that you are working on the correct branch. No configurations needed. Just activate it, and your admin panel will display the current environment.\u003C\u002Fp>\n","A super light-weight WordPress plugin to display the current Pantheon's environment in the ADMIN Toolbar of WordPress.",779,"2022-11-18T06:38:00.000Z","6.1.10","3.9","5.6",[22,52],"pantheon-hosting","","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fenvironment-displayer-for-pantheon.1.0.1.zip",85,{"slug":57,"name":58,"version":59,"author":60,"author_profile":61,"description":62,"short_description":63,"active_installs":64,"downloaded":65,"rating":66,"num_ratings":67,"last_updated":68,"tested_up_to":16,"requires_at_least":69,"requires_php":70,"tags":71,"homepage":76,"download_link":77,"security_score":33,"vuln_count":14,"unpatched_count":25,"last_vuln_date":78,"fetched_at":27},"hostinger","Hostinger Tools","3.0.59","Hostinger","https:\u002F\u002Fprofiles.wordpress.org\u002Fhostinger\u002F","\u003Cp>Hostinger Tools is an all-in-one plugin designed to streamline essential tasks for WordPress site administrators. This plugin offers a range of features to help you manage your site’s information, maintenance mode, security, and redirects effectively.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Features:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>\u003Cem>Basic Info\u003C\u002Fem>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Displays the current WordPress version with automatic update checks.\u003C\u002Fli>\n\u003Cli>Shows the current PHP version with automatic update checks.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cem>Maintenance Mode\u003C\u002Fem>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Easily enable or disable maintenance mode for your site.\u003C\u002Fli>\n\u003Cli>Provide a URL to bypass maintenance mode for selected users.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cem>Security\u003C\u002Fem>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Enable or disable XML-RPC requests to enhance your site’s security.\u003C\u002Fli>\n\u003Cli>Enable or disable Authorize application page to enhance your site’s security.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cem>Redirects\u003C\u002Fem>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Force all URLs to use HTTPS for secure browsing.\u003C\u002Fli>\n\u003Cli>Force all URLs to use WWW to ensure consistency in site access.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cem>LLMs.txt Generation\u003C\u002Fem>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Automatically generate a structured LLMs.txt file in Markdown format.\u003C\u002Fli>\n\u003Cli>Include website title, description, posts, pages, and products (if WooCommerce is active).\u003C\u002Fli>\n\u003Cli>Keep the file updated when content changes or new content is published.\u003C\u002Fli>\n\u003Cli>Help AI-powered tools better understand and interact with your website content.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Hostinger Tools is the new version of the previous Hostinger plugin, offering an updated and enhanced experience.\u003Cbr \u002F>\nThe Onboarding assistant and the Learning section previously included in this plugin were moved to the separate plugin Hostinger Easy Onboarding.\u003C\u002Fp>\n","Simplified WordPress management. Manage site info, maintenance, security, & redirects.",3000000,16730722,60,25,"2026-03-03T11:48:00.000Z","5.5","8.1",[57,72,73,74,75],"https","maintenance","security","tools","https:\u002F\u002Fhostinger.com","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fhostinger.3.0.59.zip","2024-01-05 00:00:00",{"slug":80,"name":81,"version":82,"author":83,"author_profile":84,"description":85,"short_description":86,"active_installs":87,"downloaded":88,"rating":89,"num_ratings":90,"last_updated":91,"tested_up_to":92,"requires_at_least":53,"requires_php":93,"tags":94,"homepage":100,"download_link":101,"security_score":102,"vuln_count":14,"unpatched_count":25,"last_vuln_date":103,"fetched_at":27},"a2-optimized-wp","A2 Optimized WP – Turbocharge and secure your WordPress site","3.0.13","A2 Hosting","https:\u002F\u002Fprofiles.wordpress.org\u002Fa2hosting\u002F","\u003Cp>Boosting performance and securing your WordPress site has never been easier with the A2 Optimized WP plugin from \u003Ca href=\"https:\u002F\u002Fwww.a2hosting.com\u002F\" rel=\"nofollow ugc\">A2 Hosting\u003C\u002Fa>. Get customized desktop and mobile performance scores for your site, including:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Server speed (Time to First Byte)\u003C\u002Fli>\n\u003Cli>Page load speed (Largest Contentful Paint)\u003C\u002Fli>\n\u003Cli>User perception (First Contentful Paint)\u003C\u002Fli>\n\u003Cli>Visual stability (Cumulative Layout Shift)\u003C\u002Fli>\n\u003Cli>Website browser speed (First Input Delay)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Using these scores, A2 Optimized WP generates specific, personalized recommendations for improving your site:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Performance\u003C\u002Fli>\n\u003Cli>Security\u003C\u002Fli>\n\u003Cli>Best practices compliance\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>With just a few clicks you’ll give your WordPress site the boost it needs with stable, industry-proven optimizations and improvements.\u003C\u002Fp>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fpatchstack.com\u002Fdatabase\u002Fvdp\u002Fa2-optimized-wp\u002F\" rel=\"nofollow ugc\">Vulnerability disclosure program\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch4>Performance optimizations\u003C\u002Fh4>\n\u003Cp>Our plugin is optimized to work best in the A2 Hosting environment, so items marked with an asterisk (*) are only available for sites hosted at A2 Hosting. If you are not an A2 Hosting customer, \u003Ca href=\"https:\u002F\u002Fwww.a2hosting.com\" rel=\"nofollow ugc\">join today\u003C\u002Fa>!\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Page caching\u003C\u002Fstrong>\u003Cbr \u002F>\n* Allows site visitors to save copies of your web pages on their device or browser. When they return to your website in the future, your site files load faster.\u003Cbr \u002F>\n* This optimization improves Time to First Byte (TTFB) and reduces bandwidth usage.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Gzip compression\u003C\u002Fstrong>\u003Cbr \u002F>\n* Turns on Gzip compression to make text files smaller.\u003Cbr \u002F>\n* This optimization improves Time to First Byte (TTFB) and reduces bandwidth usage.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Redis object caching (*)\u003C\u002Fstrong>\u003Cbr \u002F>\n* Stores commonly used elements such as menus, widgets, and database sets in memory.\u003Cbr \u002F>\n* This optimization improves Time to First Byte (TTFB).\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Minify HTML pages\u003C\u002Fstrong>\u003Cbr \u002F>\n* Removes extra spaces, tabs, comments, and line breaks from HTML pages.\u003Cbr \u002F>\n* This optimization improves First Contentful Paint (FCP) and First Input Delay (FID).\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Automatic database optimizations\u003C\u002Fstrong>\u003Cbr \u002F>\n* Periodically cleans MySQL databases of expired transients (a type of cached data used in WordPress) as well as trashed and spam comments. Also optimizes database tables.\u003Cbr \u002F>\n* This optimization improves Time to First Byte (TTFB) for uncached pages.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Compress images on upload (*)\u003C\u002Fstrong>\u003Cbr \u002F>\n* Automatically compresses images when they are uploaded to your site.\u003Cbr \u002F>\n* This optimization improves First Contentful Paint (FCP), Largest Contentful Paint (LCP), and First Input Delay (FID).\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Turbo Web Hosting (*)\u003C\u002Fstrong>\u003Cbr \u002F>\n*Takes advantage of A2 Hosting’s Turbo Web Hosting platform to provide faster serving of static files, pre-compiled .htaccess files for improved performance, PHP opcode caching, and more.\u003Cbr \u002F>\n*This optimization can improve multiple benchmarks.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Use system cron instead of WordPress cron (*)\u003C\u002Fstrong>\u003Cbr \u002F>\n* Replaces the WordPress virtual “cron job” with a genuine, system-defined cron job.\u003Cbr \u002F>\n* This optimization reduces the load on WordPress and ensures scheduled tasks run at precise, correct intervals.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Minify inline CSS and JavaScript\u003C\u002Fstrong>\u003Cbr \u002F>\n* Removes extra spaces, tabs, comments, and line breaks from inline CSS and JavaScript.\u003Cbr \u002F>\n* This optimization improves First Contentful Paint (FCP) and First Input Delay (FID).\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Disable WooCommerce AJAX Cart Fragments\u003C\u002Fstrong>\u003Cbr \u002F>\n* Disables WooCommerce AJAX Cart Fragments on your homepage and enables the “redirect to cart page” option.\u003Cbr \u002F>\n* This optimization improves WooCommerce performance.\u003C\u002Fp>\n\u003Ch4>Security optimizations\u003C\u002Fh4>\n\u003Cp>Our plugin is optimized to work best in the A2 Hosting environment, so items marked with an asterisk (*) are only available for sites hosted at A2 Hosting. If you are not an A2 Hosting customer, \u003Ca href=\"https:\u002F\u002Fwww.a2hosting.com\" rel=\"nofollow ugc\">join today\u003C\u002Fa>!\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Lock editing of plugins and themes from wp-admin\u003C\u002Fstrong>\u003Cbr \u002F>\n* Prevents misuse of built-in editing capabilities for the WordPress admin.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Change login URL (*)\u003C\u002Fstrong>\u003Cbr \u002F>\n* Changes the login page URL from the default wp-login.php to a random URL.\u003Cbr \u002F>\n* Helps prevent bots from brute-force attacking your login page.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Add CAPTCHA for comments and login (*)\u003C\u002Fstrong>\u003Cbr \u002F>\n* Adds a CAPTCHA to comment forms and login pages to deter bots from posting spam comments and running brute-force attacks..\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Block unauthorized XML-RPC requests\u003C\u002Fstrong>\u003Cbr \u002F>\n* Rejects XML-RPC requests except for whitelisted services, such as Jetpack.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Deny direct access to configuration files\u003C\u002Fstrong>\u003Cbr \u002F>\n* Displays a “403 Forbidden” error when visitors or bots try to access WordPress configuration files.\u003C\u002Fp>\n\u003Ch4>Best practices recommendations\u003C\u002Fh4>\n\u003Cp>\u003Cstrong>Regenerate wp-config salts\u003C\u002Fstrong>\u003Cbr \u002F>\n* Generates new values for wp-config.php salts and security keys for increased security.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Recent post limit\u003C\u002Fstrong>\u003Cbr \u002F>\n*Checks the number of recent posts per page, which should be less than 15 for most sites.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>RSS post limit\u003C\u002Fstrong>\u003Cbr \u002F>\n* Checks the number of posts in RSS feeds, which should be less than 20 for most sites.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Recent posts showing on home page\u003C\u002Fstrong>\u003Cbr \u002F>\n* Checks whether the home page displays recent posts, and offers to use a static page instead for faster performance.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Permalink structure\u003C\u002Fstrong>\u003Cbr \u002F>\n* Checks that the permalink structure is configured to fully optimize page caching and get additional SEO benefits.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Unused themes\u003C\u002Fstrong>\u003Cbr \u002F>\n* Checks if there are any non-default, unused themes that should be deleted.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Inactive plugins\u003C\u002Fstrong>\u003Cbr \u002F>\n* Checks if there are any inactive plugins that should be deleted.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Hosted with A2 Hosting\u003C\u002Fstrong>\u003Cbr \u002F>\n* Checks if your site is hosted with \u003Ca href=\"https:\u002F\u002Fwww.a2hosting.com\u002F\" rel=\"nofollow ugc\">A2 Hosting\u003C\u002Fa> for faster page load times and more optimizations.\u003C\u002Fp>\n","Make your site faster and more secure with the click of a few buttons",70000,2039848,62,43,"2025-02-10T18:07:00.000Z","6.7.5","7.0",[95,96,97,98,99],"a2-hosting","cache","optimize","site-performancerequires-at-least-5-1","speed","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fa2-optimized\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fa2-optimized-wp.3.0.13.zip",92,"2023-02-06 00:00:00",{"slug":105,"name":106,"version":107,"author":108,"author_profile":109,"description":110,"short_description":111,"active_installs":112,"downloaded":113,"rating":102,"num_ratings":114,"last_updated":115,"tested_up_to":116,"requires_at_least":117,"requires_php":50,"tags":118,"homepage":121,"download_link":122,"security_score":13,"vuln_count":25,"unpatched_count":25,"last_vuln_date":26,"fetched_at":27},"ezcache","ezCache","1.6.6","uPress","https:\u002F\u002Fprofiles.wordpress.org\u002Fupress\u002F","\u003Cp>EzCache is an easy and innovative cache plugin that will help you significantly improve your site speed.\u003Cbr \u002F>\nThe plugin comes in a simple and easy installation, without the need for advanced technical knowledge, offers you the opportunity to make your site much faster in a few simple steps, cache pages on your site, automatically optimize images using WebP format to reduce the size of your site’s images by tens of percent and save You need the extra image minimization plugin.\u003C\u002Fp>\n\u003Cp>In addition, the plugin allows you to minimize advanced HTML files, JAVA SCRIPT files\u003Cbr \u002F>\nAnd CSS files\u003Cbr \u002F>\nIn the advanced settings of the extension, you can easily save advanced settings, such as:\u003Cbr \u002F>\nConfigure caching by page type, set cached links,\u003Cbr \u002F>\nExclude certain user types.\u003Cbr \u002F>\nAnd of course, you can always view statistics that will always keep you updated on your site’s caching performance.\u003C\u002Fp>\n\u003Cp>We created ezCash to take the new decade’s speed experience and bring it to your WordPress sites easily and quickly\u003C\u002Fp>\n","EzCache is an easy and innovative cache plugin that will help you significantly improve your site speed.",10000,113930,5,"2025-07-30T13:37:00.000Z","6.8.5","4.6",[119,96,21,99,120],"boost","upress","https:\u002F\u002Fezcache.app","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fezcache.zip",{"slug":124,"name":125,"version":126,"author":7,"author_profile":8,"description":127,"short_description":128,"active_installs":112,"downloaded":129,"rating":13,"num_ratings":14,"last_updated":130,"tested_up_to":16,"requires_at_least":131,"requires_php":18,"tags":132,"homepage":134,"download_link":135,"security_score":13,"vuln_count":25,"unpatched_count":25,"last_vuln_date":26,"fetched_at":27},"pantheon-advanced-page-cache","Pantheon Advanced Page Cache","2.1.2","\u003Cp>\u003Ca href=\"https:\u002F\u002Fcircleci.com\u002Fgh\u002Fpantheon-systems\u002Fpantheon-advanced-page-cache\" rel=\"nofollow ugc\">\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>For sites wanting fine-grained control over how their responses are represented in their edge cache, Pantheon Advanced Page Cache is the golden ticket. Here’s a high-level overview of how the plugin works:\u003C\u002Fp>\n\u003Col>\n\u003Cli>When a response is generated, the plugin uses surrogate keys based on WordPress’ main \u003Ccode>WP_Query\u003C\u002Fcode> object to “tag” the response with identifers for the data used in the response. See the “Adding Custom Keys” section for including your own surrogate keys.\u003C\u002Fli>\n\u003Cli>When WordPress data is modified, the plugin triggers a purge request for the data’s corresponding surrogate keys.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>Because of its surrogate key technology, Pantheon Advanced Page Cache empowers WordPress sites with a significantly more accurate cache purge mechanism, and generally higher cache hit rate. It even works with the WordPress REST API.\u003C\u002Fp>\n\u003Cp>Go forth and make awesome! And, once you’ve built something great, \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fpantheon-systems\u002Fpantheon-advanced-page-cache\u002Fissues\" rel=\"nofollow ugc\">send us feature requests (or bug reports)\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch3>How It Works\u003C\u002Fh3>\n\u003Cp>Pantheon Advanced Page Cache makes heavy use of surrogate keys, which enable responses to be “tagged” with identifiers that can then later be used in purge requests. For instance, a home page response might include the \u003Ccode>Surrogate-Key\u003C\u002Fcode> header with these keys:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>Surrogate-Key: front home post-43 user-4 post-41 post-9 post-7 post-1 user-1\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Similarly, a \u003Ccode>GET\u003C\u002Fcode> requests to \u003Ccode>\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts\u003C\u002Fcode> might include the \u003Ccode>Surrogate-Key\u003C\u002Fcode> header with these keys:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>Surrogate-Key: rest-post-collection rest-post-43 rest-post-43 rest-post-9 rest-post-7 rest-post-1\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Because cached responses include metadata describing the data therein, surrogate keys enable more flexible purging behavior like:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>When a post is updated, clear the cache for the post’s URL, the homepage, any index view the post appears on, and any REST API endpoints the post is present in.\u003C\u002Fli>\n\u003Cli>When an author changes their name, clear the cache for the author’s archive and any post they’ve authored.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>There is a limit to the number of surrogate keys in a response, so we’ve optimized them based on a user’s expectation of a normal WordPress site. See the “Emitted Keys” section for full details on which keys are included, and the “Adding Custom Keys” section following for information on how to add your own.\u003C\u002Fp>\n\u003Ch4>Adding Custom Keys\u003C\u002Fh4>\n\u003Cp>By default, Pantheon Advanced Page Cache generates surrogate keys based on an interpretation of the main \u003Ccode>WP_Query\u003C\u002Fcode> query object. Because WordPress sends headers before the page is rendered, you need to use the \u003Ccode>pantheon_wp_main_query_surrogate_keys\u003C\u002Fcode> filter to include additional surrogate keys for any data present on the page.\u003C\u002Fp>\n\u003Cp>For example, to include surrogate keys for a sidebar rendered on the homepage, you can filter the keys using the \u003Ccode>is_home()\u003C\u002Fcode> template tag:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u002F**\n * Add surrogate key for the featured content sidebar rendered on the homepage.\n *\u002F\nadd_filter( 'pantheon_wp_main_query_surrogate_keys', function( $keys ){\n    if ( is_home() ) {\n        $keys[] = 'sidebar-home-featured';\n    }\n    return $keys;\n});\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Then, when sidebars are updated, you can use the \u003Ccode>pantheon_wp_clear_edge_keys()\u003C\u002Fcode> helper function to emit a purge event specific to the surrogate key:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u002F**\n * Trigger a purge event for the featured content sidebar when widgets are updated.\n *\u002F\nadd_action( 'update_option_sidebars_widgets', function() {\n    pantheon_wp_clear_edge_keys( array( 'sidebar-home-featured' ) );\n});\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Similarly, to include surrogate keys for posts queried on the homepage, you can pre-fetch the posts before the page is rendered:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u002F**\n * An example of pre-fetching a WP_Query to tag the\n * response with queried data. You'd use `papcx_wp_query()`\n * a second time within your template to use the data.\n *\u002F\nadd_filter( 'pantheon_wp_main_query_surrogate_keys', function( $keys ) {\n    if ( is_home() ) {\n        $query = papcx_wp_query( array(\n            'post_type' => 'page',\n        ) );\n        foreach( $query->posts as $post ) {\n            $keys[] = 'post-' . $post->ID;\n        }\n    }\n    return $keys;\n});\n\n\u002F**\n * Register a 'papc-non-persistent' cache group to cache data\n * in a non-persistent manner. We only want data in this group\n * to be cached within the page request.\n *\u002F\nadd_action( 'init', function(){\n    wp_cache_add_non_persistent_groups( array( 'papc-non-persistent' ) );\n});\n\n\u002F**\n * Helper function to instantiate a WP_Query object only\n * once per page request.\n *\n * @param array $args Arguments to pass to WP_Query.\n * @return WP_Query\n *\u002F\nfunction papcx_wp_query( $args = array() ) {\n    $cache_key = md5( serialize( $args ) );\n    \u002F\u002F WP_Query object will be in cache the second time we use the function.\n    $cache_value = wp_cache_get( $cache_key, 'papc-non-persistent' );\n    if ( false !== $cache_value ) {\n        return $cache_value;\n    }\n    $query = new WP_Query( $args );\n    wp_cache_set( $cache_key, $query, 'papc-non-persistent' );\n    return $query;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Because Pantheon Advanced Page Cache already handles WordPress post purge events, there’s no additional call to \u003Ccode>pantheon_wp_clear_edge_keys()\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>Lastly, the \u003Ccode>pantheon_wp_rest_api_surrogate_keys\u003C\u002Fcode> filter lets you filter surrogate keys present in a REST API response.\u003C\u002Fp>\n\u003Ch4>Additional purging by path\u003C\u002Fh4>\n\u003Cp>When a post is published for the first time, the permalink’s path is also purged even if it has no matching keys. This can be further filtered with the \u003Ccode>pantheon_clear_post_path\u003C\u002Fcode> filter.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>    add_action('pantheon_clear_post_path', function($paths) {\n        \u002F\u002F Add or remove paths from $paths\n        return $paths\n    }, 10, 3);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Need a bit more power? In addition to \u003Ccode>pantheon_wp_clear_edge_keys()\u003C\u002Fcode>, there are two additional helper functions you can use:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>pantheon_wp_clear_edge_paths( $paths = array() )\u003C\u002Fcode> – Purge cache for one or more paths.\u003C\u002Fli>\n\u003Cli>\u003Ccode>pantheon_wp_clear_edge_all()\u003C\u002Fcode> – Warning! With great power comes great responsibility. Purge the entire cache, but do so wisely.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Ignoring Specific Post Types\u003C\u002Fh4>\n\u003Cp>By default, Pantheon Advanced Page Cache is pretty aggressive in how it clears its surrogate keys. Specifically, any time \u003Ccode>wp_insert_post\u003C\u002Fcode> is called (which can include any time a post of any type is added or updated, even private post types), it will purge a variety of keys including \u003Ccode>home\u003C\u002Fcode>, \u003Ccode>front\u003C\u002Fcode>, \u003Ccode>404\u003C\u002Fcode> and \u003Ccode>feed\u003C\u002Fcode>. To bypass or override this behavior, since 1.5.0 we have a filter allowing an array of post types to ignore to be passed before those caches are purged. By default, the \u003Ccode>revision\u003C\u002Fcode> post type is ignored, but others can be added:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u002F**\n* Add a custom post type to the ignored post types.\n*\n* @param array $ignored_post_types The array of ignored post types.\n* @return array\n*\u002F\nfunction filter_ignored_posts( $ignored_post_types ) {\n    $ignored_post_types[] = 'my-post-type'; \u002F\u002F Ignore my-post-type from cache purges.\n    return $ignored_post_types;\n}\n\nadd_filter( 'pantheon_purge_post_type_ignored', 'filter_ignored_posts' );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>This will prevent the cache from being purged if the given post type is updated.\u003C\u002Fp>\n\u003Ch4>Setting the Cache Max Age with a filter\u003C\u002Fh4>\n\u003Cp>The cache max age setting is controlled by the \u003Ca href=\"https:\u002F\u002Fdocs.pantheon.io\u002Fguides\u002Fwordpress-configurations\u002Fwordpress-cache-plugin\" rel=\"nofollow ugc\">Pantheon Page Cache\u003C\u002Fa> admin page. As of 2.0.0, there are three cache age options by default — 1 week, 1 month, 1 year. Pantheon Advanced Page Cache automatically purges the cache of updated and related posts and pages, but you might want to override the cache max age value and set it programmatically. In this case, you can use the \u003Ccode>pantheon_cache_default_max_age\u003C\u002Fcode> filter added in \u003Ca href=\"https:\u002F\u002Fdocs.pantheon.io\u002Fguides\u002Fwordpress-configurations\u002Fwordpress-cache-plugin#override-the-default-max-age\" rel=\"nofollow ugc\">Pantheon MU plugin 1.4.0+\u003C\u002Fa>. For example:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>add_filter( 'pantheon_cache_default_max_age', function() {\n    return 10 * DAY_IN_SECONDS;\n} );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>When the cache max age is filtered in this way, the admin option is disabled and a notice is displayed.\u003C\u002Fp>\n\u003Ch4>Updating the cache max age based on nonces\u003C\u002Fh4>\n\u003Cp>Nonces created on the front-end, often used to secure forms and other data, have a lifetime, and if the cache max age is longer than the nonce lifetime, the nonce may expire before the cache does. To avoid this, you can use the \u003Ccode>pantheon_cache_nonce_lifetime\u003C\u002Fcode> action to set the \u003Ccode>pantheon_cache_default_max_age\u003C\u002Fcode> to less than the nonce lifetime. For example:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>do_action( 'pantheon_cache_nonce_lifetime' );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>It’s important to wrap your \u003Ccode>do_action\u003C\u002Fcode> in the appropriate conditionals to ensure that the action is only called when necessary and not filtering the cache max age in cases when it’s not necessary. This might mean only running on certain pages or in certain contexts in your code.\u003C\u002Fp>\n\u003Ch3>WP-CLI Commands\u003C\u002Fh3>\n\u003Cp>This plugin implements a variety of \u003Ca href=\"https:\u002F\u002Fwp-cli.org\" rel=\"nofollow ugc\">WP-CLI\u003C\u002Fa> commands. All commands are grouped into the \u003Ccode>wp pantheon cache\u003C\u002Fcode> namespace.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$ wp help pantheon cache\n\nNAME\n\n  wp pantheon cache\n\nDESCRIPTION\n\n  Manage the Pantheon Advanced Page Cache.\n\nSYNOPSIS\n\n  wp pantheon cache \u003Ccommand>\n\nSUBCOMMANDS\n\n  purge-all       Purge the entire page cache.\n  purge-key       Purge one or more surrogate keys from cache.\n  purge-path      Purge one or more paths from cache.\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Use \u003Ccode>wp help pantheon cache \u003Ccommand>\u003C\u002Fcode> to learn more about each command.\u003C\u002Fp>\n\u003Ch3>Debugging\u003C\u002Fh3>\n\u003Cp>By default, Pantheon’s infrastructure strips out the \u003Ccode>Surrogate-Key\u003C\u002Fcode> response header before responses are served to clients. The contents of this header can be viewed as \u003Ccode>Surrogate-Key-Raw\u003C\u002Fcode> by adding on a debugging header to the request.\u003C\u002Fp>\n\u003Cp>A direct way of inspecting headers is with \u003Ccode>curl -I\u003C\u002Fcode>. This command will make a request and show just the response headers. Adding \u003Ccode>-H \"Pantheon-Debug:1\"\u003C\u002Fcode> will result in \u003Ccode>Surrogate-Key-Raw\u003C\u002Fcode> being included in the response headers. The complete command looks like this:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>curl -IH \"Pantheon-Debug:1\" https:\u002F\u002Fscalewp.io\u002F\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Piping to \u003Ccode>grep\u003C\u002Fcode> will filter the output down to just the \u003Ccode>Surrogate-Key-Raw\u003C\u002Fcode> header:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>curl -IH \"Pantheon-Debug:1\" https:\u002F\u002Fscalewp.io\u002F | grep -i Surrogate-Key-Raw\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Tada!\u003C\u002Fp>\n\u003Ch3>Emitted Keys and Purge Events\u003C\u002Fh3>\n\u003Ch4>Emitted Keys on Traditional Views\u003C\u002Fh4>\n\u003Cp>\u003Cstrong>Home \u003Ccode>\u002F\u003C\u002Fcode>\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Emits surrogate keys: \u003Ccode>home\u003C\u002Fcode>, \u003Ccode>front\u003C\u002Fcode>, \u003Ccode>post-\u003Cid>\u003C\u002Fcode> (all posts in main query)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Single post \u003Ccode>\u002F2016\u002F10\u002F14\u002Fsurrogate-keys\u002F\u003C\u002Fcode>\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Emits surrogate keys: \u003Ccode>single\u003C\u002Fcode>, \u003Ccode>post-\u003Cid>\u003C\u002Fcode>, \u003Ccode>post-user-\u003Cid>\u003C\u002Fcode>, \u003Ccode>post-term-\u003Cid>\u003C\u002Fcode> (all terms assigned to post)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Author archive \u003Ccode>\u002Fauthor\u002Fpantheon\u002F\u003C\u002Fcode>\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Emits surrogate keys: \u003Ccode>archive\u003C\u002Fcode>, \u003Ccode>user-\u003Cid>\u003C\u002Fcode>, \u003Ccode>post-\u003Cid>\u003C\u002Fcode> (all posts in main query)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Term archive \u003Ccode>\u002Ftag\u002Fcdn\u002F\u003C\u002Fcode>\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Emits surrogate keys: \u003Ccode>archive\u003C\u002Fcode>, \u003Ccode>term-\u003Cid>\u003C\u002Fcode>, \u003Ccode>post-\u003Cid>\u003C\u002Fcode> (all posts in main query)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Day archive \u003Ccode>\u002F2016\u002F10\u002F14\u002F\u003C\u002Fcode>\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Emits surrogate keys: \u003Ccode>archive\u003C\u002Fcode>, \u003Ccode>date\u003C\u002Fcode>, \u003Ccode>post-\u003Cid>\u003C\u002Fcode> (all posts in main query)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Month archive \u003Ccode>\u002F2016\u002F10\u002F\u003C\u002Fcode>\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Emits surrogate keys: \u003Ccode>archive\u003C\u002Fcode>, \u003Ccode>date\u003C\u002Fcode>, \u003Ccode>post-\u003Cid>\u003C\u002Fcode> (all posts in main query)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Year archive \u003Ccode>\u002F2016\u002F\u003C\u002Fcode>\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Emits surrogate keys: \u003Ccode>archive\u003C\u002Fcode>, \u003Ccode>date\u003C\u002Fcode>, \u003Ccode>post-\u003Cid>\u003C\u002Fcode> (all posts in main query)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Search \u003Ccode>\u002F?s=\u003Csearch>\u003C\u002Fcode>\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Emits surrogate keys: \u003Ccode>search\u003C\u002Fcode>, either \u003Ccode>search-results\u003C\u002Fcode> or \u003Ccode>search-no-results\u003C\u002Fcode>, \u003Ccode>post-\u003Cid>\u003C\u002Fcode> (all posts in main query)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Not found (404)\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Emits surrogate keys: \u003Ccode>404\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Emitted Keys on REST API Endpoints\u003C\u002Fh4>\n\u003Cp>\u003Cstrong>Posts\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts\u003C\u002Fcode> emits surrogate keys: \u003Ccode>rest-post-collection\u003C\u002Fcode>, \u003Ccode>rest-post-\u003Cid>\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts\u002F\u003Cid>\u003C\u002Fcode> emits surrogate keys: \u003Ccode>rest-post-\u003Cid>\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Pages\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>\u002Fwp-json\u002Fwp\u002Fv2\u002Fpages\u003C\u002Fcode> emits surrogate keys: \u003Ccode>rest-page-collection\u003C\u002Fcode>, \u003Ccode>rest-post-\u003Cid>\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>\u002Fwp-json\u002Fwp\u002Fv2\u002Fpages\u002F\u003Cid>\u003C\u002Fcode> emits surrogate keys: \u003Ccode>rest-post-\u003Cid>\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Categories\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>\u002Fwp-json\u002Fwp\u002Fv2\u002Fcategories\u003C\u002Fcode> emits surrogate keys: \u003Ccode>rest-category-collection\u003C\u002Fcode>, \u003Ccode>rest-term-\u003Cid>\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>\u002Fwp-json\u002Fwp\u002Fv2\u002Fcategories\u002F\u003Cid>\u003C\u002Fcode> emits surrogate keys: \u003Ccode>rest-term-\u003Cid>\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Tags\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>\u002Fwp-json\u002Fwp\u002Fv2\u002Ftags\u003C\u002Fcode> emits surrogate keys: \u003Ccode>rest-post_tag-collection\u003C\u002Fcode>, \u003Ccode>rest-term-\u003Cid>\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>\u002Fwp-json\u002Fwp\u002Fv2\u002Ftags\u002F\u003Cid>\u003C\u002Fcode> emits surrogate keys: \u003Ccode>rest-term-\u003Cid>\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Comments\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>\u002Fwp-json\u002Fwp\u002Fv2\u002Fcomments\u003C\u002Fcode> emits surrogate keys: \u003Ccode>rest-comment-collection\u003C\u002Fcode>, \u003Ccode>rest-comment-post-\u003Cpost-id>\u003C\u002Fcode>, \u003Ccode>rest-comment-\u003Cid>\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>\u002Fwp-json\u002Fwp\u002Fv2\u002Fcomments\u002F\u003Cid>\u003C\u002Fcode> emits surrogate keys: \u003Ccode>rest-comment-post-\u003Cpost-id>\u003C\u002Fcode>, \u003Ccode>rest-comment-\u003Cid>\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Users\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>\u002Fwp-json\u002Fwp\u002Fv2\u002Fusers\u003C\u002Fcode> emits surrogate keys: \u003Ccode>rest-user-collection\u003C\u002Fcode>, \u003Ccode>rest-user-\u003Cid>\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>\u002Fwp-json\u002Fwp\u002Fv2\u002Fusers\u002F\u003Cid>\u003C\u002Fcode> emits surrogate keys: \u003Ccode>rest-user-\u003Cid>\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Settings\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>\u002Fwp-json\u002Fwp\u002Fv2\u002Fsettings\u003C\u002Fcode> emits surrogate keys: \u003Ccode>rest-setting-\u003Cname>\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Purge Events\u003C\u002Fh4>\n\u003Cp>Different WordPress actions cause different surrogate keys to be purged, documented here.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>wp_insert_post \u002F transition_post_status \u002F before_delete_post \u002F delete_attachment\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Purges surrogate keys: \u003Ccode>home\u003C\u002Fcode>, \u003Ccode>front\u003C\u002Fcode>, \u003Ccode>404\u003C\u002Fcode>, \u003Ccode>post-\u003Cid>\u003C\u002Fcode>, \u003Ccode>user-\u003Cid>\u003C\u002Fcode>, \u003Ccode>term-\u003Cid>\u003C\u002Fcode>, \u003Ccode>rest-\u003Ctype>-collection\u003C\u002Fcode>, \u003Ccode>rest-comment-post-\u003Cid>\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>Affected views: homepage, single post, any page with 404 header, any archive where post displays, author archive, term archive, REST API collection and resource endpoints\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>clean_post_cache\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Purges surrogate keys: \u003Ccode>post-\u003Cid>\u003C\u002Fcode>, \u003Ccode>rest-post-\u003Cid>\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>Affected views: single post, REST API resource endpoint\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>created_term \u002F edited_term \u002F delete_term\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Purges surrogate keys: \u003Ccode>term-\u003Cid>\u003C\u002Fcode>, \u003Ccode>post-term-\u003Cid>\u003C\u002Fcode>, \u003Ccode>rest-\u003Ctaxonomy>-collection\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>Affected views: term archive, any post where the term is assigned, REST API collection and resource endpoints\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>clean_term_cache\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Purges surrogate keys: \u003Ccode>term-\u003Cid>\u003C\u002Fcode>, \u003Ccode>rest-term-\u003Cid>\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>Affected views: term archive, REST API resource endpoint\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>wp_insert_comment \u002F transition_comment_status\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Purges surrogate keys: \u003Ccode>rest-comment-collection\u003C\u002Fcode>, \u003Ccode>rest-comment-\u003Cid>\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>Affected views: REST API collection and resource endpoints\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>clean_comment_cache\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Purges surrogate keys: \u003Ccode>rest-comment-\u003Cid>\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>Affected views: REST API resource endpoint\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>clean_user_cache\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Purges surrogate keys: \u003Ccode>user-\u003Cid>\u003C\u002Fcode>, \u003Ccode>rest-user-\u003Cid>\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>Affected views: author archive, any post where the user is the author\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>updated_option\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Purges surrogate keys: \u003Ccode>rest-setting-\u003Cname>\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>Affected views: REST API resource endpoint\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Surrogate Keys for taxonomy terms\u003C\u002Fh3>\n\u003Cp>Setting surrogate keys for posts with large numbers of taxonomies (such as WooCommerce products with a large number of global attributes) can suffer from slower queries. Surrogate keys can be skipped for ‘product’ post types’ taxonomy terms (or any other criteria you see fit) with the following filter:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>function custom_should_add_terms($should_add_terms, $wp_query) {\n    if ( $wp_query->is_singular( 'product' ) ) {\n        return false;\n    }\n    return $should_add_terms;\n}\nadd_filter('pantheon_should_add_terms', 'custom_should_add_terms', 10, 2);\u003Ch3>Other Filters\u003C\u002Fh3>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>pantheon_apc_disable_admin_notices\u003C\u002Fh4>\n\u003Cp>Since 2.0.0, Pantheon Advanced Page Cache displays a number of admin notices about your current cache max age value. You can disable these notices with the \u003Ccode>pantheon_apc_disable_admin_notices\u003C\u002Fcode> filter.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>add_filter( 'pantheon_apc_disable_admin_notices', '__return_true' );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Alternately, the function callback is passed into the \u003Ccode>pantheon_apc_disable_admin_notices\u003C\u002Fcode> filter, allowing you to specify precisely \u003Cem>which\u003C\u002Fem> notice to disable, for example:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>add_filter( 'pantheon_apc_disable_admin_notices', function( $disable_notices, $callback ) {\n    if ( $callback === '\\\\Pantheon_Advanced_Page_Cache\\\\Admin_Interface\\\\admin_notice_maybe_recommend_higher_max_age' ) {\n        return true;\n    }\n    return $disable_notices;\n}, 10, 2 );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>The above example would disable \u003Cem>only\u003C\u002Fem> the admin notice recommending a higher cache max age.\u003C\u002Fp>\n\u003Ch3>Plugin Integrations\u003C\u002Fh3>\n\u003Cp>Pantheon Advanced Page Cache integrates with WordPress plugins, including:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fwp-graphql\u002F\" rel=\"ugc\">WPGraphQL\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Contributing\u003C\u002Fh3>\n\u003Cp>See \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fpantheon-systems\u002Fwp-saml-auth\u002Fblob\u002Fmaster\u002FCONTRIBUTING.md\" rel=\"nofollow ugc\">CONTRIBUTING.md\u003C\u002Fa> for information on contributing.\u003C\u002Fp>\n","Automatically clear related pages from Pantheon's Edge when you update content. High TTL. Fresh content. Visitors never wait.",1039772,"2025-12-16T18:21:00.000Z","6.4",[96,133,22],"cdn","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fpantheon-advanced-page-cache\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fpantheon-advanced-page-cache.2.1.2.zip",{"attackSurface":137,"codeSignals":179,"taintFlows":189,"riskAssessment":190,"analyzedAt":195},{"hooks":138,"ajaxHandlers":169,"restRoutes":176,"shortcodes":177,"cronEvents":178,"entryPointCount":14,"unprotectedCount":25},[139,145,149,154,158,161,165],{"type":140,"name":141,"callback":142,"file":143,"line":144},"filter","http_api_transports","anonymous","inc\\class-api.php",178,{"type":146,"name":147,"callback":142,"file":143,"line":148},"action","http_api_curl",182,{"type":146,"name":150,"callback":151,"priority":13,"file":152,"line":153},"admin_bar_menu","action_admin_bar_menu","inc\\class-toolbar.php",38,{"type":146,"name":155,"callback":156,"file":152,"line":157},"wp_enqueue_scripts","add_admin_bar_inline_styles",40,{"type":146,"name":159,"callback":156,"file":152,"line":160},"admin_enqueue_scripts",41,{"type":140,"name":162,"callback":163,"file":152,"line":164},"amp_dev_mode_element_xpaths","closure",181,{"type":146,"name":166,"callback":163,"file":167,"line":168},"init","pantheon-hud.php",17,[170],{"action":171,"nopriv":172,"callback":173,"hasNonce":174,"hasCapCheck":172,"file":152,"line":175},"pantheon_hud_markup",false,"action_handle_ajax_markup",true,39,[],[],[],{"dangerousFunctions":180,"sqlUsage":181,"outputEscaping":183,"fileOperations":25,"externalRequests":14,"nonceChecks":14,"capabilityChecks":14,"bundledLibraries":188},[],{"prepared":25,"raw":25,"locations":182},[],{"escaped":114,"rawEcho":14,"locations":184},[185],{"file":152,"line":186,"context":187},137,"raw output",[],[],{"summary":191,"deductions":192},"The \"pantheon-hud\" plugin v0.4.5 demonstrates a strong security posture based on the provided static analysis. It exhibits good practices by implementing nonce and capability checks for its single AJAX handler, and all SQL queries utilize prepared statements, mitigating the risk of SQL injection. The absence of dangerous functions, file operations, and critical taint analysis findings further contributes to its secure design.  Furthermore, the plugin has no recorded vulnerability history, indicating a mature and well-maintained codebase.\n\nWhile the plugin is generally secure, there is a minor concern regarding output escaping. With 6 total outputs and 83% properly escaped, there is one instance where output might not be sufficiently sanitized, potentially leading to cross-site scripting (XSS) vulnerabilities if the unescaped output is user-controlled or contains sensitive information. The presence of one external HTTP request, while not inherently a vulnerability, is a potential attack vector that warrants careful monitoring for insecure handling of the fetched data.\n\nOverall, \"pantheon-hud\" v0.4.5 is a well-secured plugin with minimal identified risks. The proactive implementation of security features and a clean vulnerability history are significant strengths. The sole deduction arises from the potential for unescaped output, which should be addressed to achieve a perfect security score.",[193],{"reason":194,"points":114},"One instance of unescaped output detected","2026-03-16T19:11:53.120Z",{"wat":197,"direct":203},{"assetPaths":198,"generatorPatterns":200,"scriptPaths":201,"versionParams":202},[199],"\u002Fwp-content\u002Fplugins\u002Fpantheon-hud\u002Fassets\u002Fimg\u002Fpantheon-fist-color.svg",[],[],[],{"cssClasses":204,"htmlComments":211,"htmlAttributes":212,"restEndpoints":221,"jsGlobals":223,"shortcodeOutput":225},[4,205,206,207,208,209,210],"wp-admin-bar-pantheon-hud-wp-admin-loading","wp-admin-bar-pantheon-hud-default","wp-admin-bar-pantheon-hud-wp-admin-links","wp-admin-bar-pantheon-hud-environment-details","wp-admin-bar-pantheon-hud-wp-cli-stub","wp-admin-bar-pantheon-hud-dashboard-link",[],[213,214,215,216,217,218,219,220],"id=\"wp-admin-bar-pantheon-hud\"","id=\"wp-admin-bar-pantheon-hud-wp-admin-loading\"","id=\"wp-admin-bar-pantheon-hud-default\"","id=\"wp-admin-bar-pantheon-hud-wp-admin-links\"","id=\"wp-admin-bar-pantheon-hud-environment-details\"","id=\"wp-admin-bar-pantheon-hud-wp-cli-stub\"","id=\"wp-admin-bar-pantheon-hud-dashboard-link\"","data-action=\"pantheon_hud_markup\"",[222],"\u002Fwp-json\u002Fpantheon-hud\u002Fv1\u002Fenvironment",[224],"pantheon_hud_request_url",[]]