[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$f4aANNCEvtoGUdkLEsoLadbpWJ-JAtYaaJWxBSIrapO8":3},{"slug":4,"display_name":5,"profile_url":6,"plugin_count":7,"total_installs":8,"avg_security_score":9,"avg_patch_time_days":10,"trust_score":11,"computed_at":12,"plugins":13},"getpantheon","Pantheon Systems","https:\u002F\u002Fprofiles.wordpress.org\u002Fgetpantheon\u002F",8,39000,99,30,93,"2026-04-04T06:47:04.646Z",[14,37,53,69,85,100,114,132],{"slug":15,"name":16,"version":17,"author":5,"author_profile":6,"description":18,"short_description":19,"active_installs":20,"downloaded":21,"rating":22,"num_ratings":23,"last_updated":24,"tested_up_to":25,"requires_at_least":26,"requires_php":27,"tags":28,"homepage":32,"download_link":33,"security_score":22,"vuln_count":34,"unpatched_count":34,"last_vuln_date":35,"fetched_at":36},"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.",10000,1039772,100,1,"2025-12-16T18:21:00.000Z","6.9.4","6.4","7.4",[29,30,31],"cache","cdn","pantheon","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fpantheon-advanced-page-cache\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fpantheon-advanced-page-cache.2.1.2.zip",0,null,"2026-03-15T15:16:48.613Z",{"slug":38,"name":39,"version":40,"author":5,"author_profile":6,"description":41,"short_description":42,"active_installs":20,"downloaded":43,"rating":44,"num_ratings":45,"last_updated":46,"tested_up_to":25,"requires_at_least":47,"requires_php":27,"tags":48,"homepage":51,"download_link":52,"security_score":22,"vuln_count":34,"unpatched_count":34,"last_vuln_date":35,"fetched_at":36},"wp-native-php-sessions","Native PHP Sessions","1.4.5","\u003Cp>\u003Ca href=\"https:\u002F\u002Ftravis-ci.org\u002Fpantheon-systems\u002Fwp-native-php-sessions\" rel=\"nofollow ugc\">\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcircleci.com\u002Fgh\u002Fpantheon-systems\u002Fwp-native-php-sessions\u002Ftree\u002Fmaster\" rel=\"nofollow ugc\">\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>WordPress core does not use PHP sessions, but sometimes they are required by your use-case, a plugin or theme.\u003C\u002Fp>\n\u003Cp>This plugin implements PHP’s native session handlers, backed by the WordPress database. This allows plugins, themes, and custom code to safely use PHP \u003Ccode>$_SESSION\u003C\u002Fcode>s in a distributed environment where PHP’s default tempfile storage just won’t work.\u003C\u002Fp>\n\u003Cp>Note that primary development is on GitHub if you would like to contribute:\u003C\u002Fp>\n\u003Cp>https:\u002F\u002Fgithub.com\u002Fpantheon-systems\u002Fwp-native-php-sessions\u003C\u002Fp>\n\u003Ch3>Configuration\u003C\u002Fh3>\n\u003Cp>By default the session lifetime is set to 0, which is until the browser is closed.\u003C\u002Fp>\n\u003Cp>To override this use the \u003Ccode>pantheon_session_expiration\u003C\u002Fcode> filter before the Native PHP Sessions plugin is loaded. For example a small Must-use plugin (a.k.a. mu-plugin) could contain:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u003C?php\nfunction my_session_expiration_override() {\n    return 60*60*4; \u002F\u002F 4 hours\n}\nadd_filter( 'pantheon_session_expiration', 'my_session_expiration_override' );\u003Ch3>CLI Commands\u003C\u002Fh3>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>wp pantheon session add-index\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Added in 1.4.0. This command should be run if your installation of the plugin occurred before the addition of the primary ID key to the session table in version 1.2.2. You will be automatically notified when you visit any admin page if this is the case. If there’s no message, your version is good to go. Note that this command is non-destructive, a new table will be created and the existing one preserved in a backup state until you have verified that the upgrade is functioning as expected.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>wp pantheon session primary-key-finalize\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Added in 1.4.0. If you have run the \u003Ccode>add-index\u003C\u002Fcode> command and have verified that the new table is functioning correctly, running the \u003Ccode>primary-key-finalize\u003C\u002Fcode> command will perform a database cleanup and remove the backup table.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>wp pantheon session primary-key-revert\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Added in 1.4.0. If you have run the \u003Ccode>add-index\u003C\u002Fcode> command and something unexpected has occurred, just run the \u003Ccode>primary-key-revert\u003C\u002Fcode> command and the backup table will immediately be returned to being the active table.\u003C\u002Fp>\n\u003Ch4>WordPress Multisite\u003C\u002Fh4>\n\u003Cp>As of 1.4.2 the \u003Ccode>add-index\u003C\u002Fcode>, \u003Ccode>primary-key-add\u003C\u002Fcode> and \u003Ccode>primary-key-revert\u003C\u002Fcode> commands are fully multisite compatible.\u003C\u002Fp>\n\u003Ch3>Contributing\u003C\u002Fh3>\n\u003Cp>See \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fpantheon-systems\u002Fwp-native-php-sessions\u002Fblob\u002Fmain\u002FCONTRIBUTING.md\" rel=\"nofollow ugc\">CONTRIBUTING.md\u003C\u002Fa> for information on contributing.\u003C\u002Fp>\n\u003Ch3>Troubleshooting\u003C\u002Fh3>\n\u003Cp>If you see an error like “Fatal error: session_start(): Failed to initialize storage module:” or “Warning: ini_set(): A session is active.”, then you likely have a plugin that is starting a session before WP Native PHP Sessions is loading.\u003C\u002Fp>\n\u003Cp>To fix, create a new file at \u003Ccode>wp-content\u002Fmu-plugins\u002F000-loader.php\u003C\u002Fcode> and include the following:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u003C?php\nif (file_exists(WP_PLUGIN_DIR . '\u002Fwp-native-php-sessions\u002Fpantheon-sessions.php')) {\n    require_once WP_PLUGIN_DIR . '\u002Fwp-native-php-sessions\u002Fpantheon-sessions.php';\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>This mu-plugin will load WP Native PHP Sessions before all other plugins, while letting you still use the WordPress plugin updater to keep the plugin up-to-date.\u003C\u002Fp>\n","Use native PHP sessions and stay horizontally scalable. Better living through superior technology.",1319188,98,16,"2025-12-04T16:13:00.000Z","5.3",[49,50],"comments","sessions","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fwp-native-php-sessions\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fwp-native-php-sessions.1.4.5.zip",{"slug":54,"name":55,"version":56,"author":5,"author_profile":6,"description":57,"short_description":58,"active_installs":20,"downloaded":59,"rating":60,"num_ratings":61,"last_updated":62,"tested_up_to":25,"requires_at_least":63,"requires_php":27,"tags":64,"homepage":67,"download_link":68,"security_score":22,"vuln_count":34,"unpatched_count":34,"last_vuln_date":35,"fetched_at":36},"wp-redis","WP Redis","1.4.7","\u003Cp>\u003Ca href=\"https:\u002F\u002Fcircleci.com\u002Fgh\u002Fpantheon-systems\u002Fwp-redis\u002Ftree\u002Fmaster\" rel=\"nofollow ugc\">\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>For sites concerned with high traffic, speed for logged-in users, or dynamic pageloads, a high-speed and persistent object cache is a must. You also need something that can scale across multiple instances of your application, so using local file caches or APC are out.\u003C\u002Fp>\n\u003Cp>Redis is a great answer, and one we bundle on the Pantheon platform. This is our plugin for integrating with the cache, but you can use it on any self-hosted WordPress site if you have Redis. Install from \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fwp-redis\u002F\" rel=\"ugc\">WordPress.org\u003C\u002Fa> or \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fpantheon-systems\u002Fwp-redis\" rel=\"nofollow ugc\">Github\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>It’s important to note that a persistent object cache isn’t a panacea – a page load with 2,000 Redis calls can be 2 full seconds of object cache transactions. Make sure you use the object cache wisely: keep to a sensible number of keys, don’t store a huge amount of data on each key, and avoid stampeding frontend writes and deletes.\u003C\u002Fp>\n\u003Cp>Go forth and make awesome! And, once you’ve built something great, \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fpantheon-systems\u002Fwp-redis\u002Fissues\" rel=\"nofollow ugc\">send us feature requests (or bug reports)\u003C\u002Fa>. Take a look at the wiki for \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fpantheon-systems\u002Fwp-redis\u002Fwiki\" rel=\"nofollow ugc\">useful code snippets and other tips\u003C\u002Fa>.\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 redis\u003C\u002Fcode> namespace.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$ wp help redis\n\nNAME\n\n  wp redis\n\nSYNOPSIS\n\n  wp redis \u003Ccommand>\n\nSUBCOMMANDS\n\n  cli         Launch redis-cli using Redis configuration for WordPress\n  debug       Debug object cache hit \u002F miss ratio for any page URL.\n  enable      Enable WP Redis by creating the symlink for object-cache.php\n  info        Provide details on the Redis connection.\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Use \u003Ccode>wp help redis \u003Ccommand>\u003C\u002Fcode> to learn more about each command.\u003C\u002Fp>\n\u003Ch3>Contributing\u003C\u002Fh3>\n\u003Cp>See \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fpantheon-systems\u002Fwp-redis\u002Fblob\u002Fmaster\u002FCONTRIBUTING.md\" rel=\"nofollow ugc\">CONTRIBUTING.md\u003C\u002Fa> for information on contributing.\u003C\u002Fp>\n","Back your WP Object Cache with Redis, a high-performance in-memory storage backend.",959582,94,20,"2025-12-11T19:38:00.000Z","3.0.1",[29,65,66],"object-cache","redis","http:\u002F\u002Fgithub.com\u002Fpantheon-systems\u002Fwp-redis\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fwp-redis.1.4.7.zip",{"slug":70,"name":71,"version":72,"author":5,"author_profile":6,"description":73,"short_description":74,"active_installs":75,"downloaded":76,"rating":77,"num_ratings":78,"last_updated":79,"tested_up_to":25,"requires_at_least":26,"requires_php":27,"tags":80,"homepage":83,"download_link":84,"security_score":22,"vuln_count":34,"unpatched_count":34,"last_vuln_date":35,"fetched_at":36},"wp-saml-auth","WP SAML Auth","2.3.1","\u003Cp>SAML authentication for WordPress, using the bundled OneLogin SAML library or optionally installed \u003Ca href=\"https:\u002F\u002Fsimplesamlphp.org\u002F\" rel=\"nofollow ugc\">SimpleSAMLphp\u003C\u002Fa>. OneLogin provides a SAML authentication bridge; SimpleSAMLphp provides SAML plus a variety of other authentication mechanisms. This plugin acts as a bridge between WordPress and the authentication library.\u003C\u002Fp>\n\u003Cp>If your organization uses Google Apps, \u003Ca href=\"https:\u002F\u002Fpantheon.io\u002Fdocs\u002Fwordpress-google-sso\u002F\" rel=\"nofollow ugc\">integrating Google Apps with WP SAML Auth\u003C\u002Fa> takes just a few steps.\u003C\u002Fp>\n\u003Cp>The standard user flow looks like this:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>User can log in via SAML using a button added to the standard WordPress login view.\u003C\u002Fli>\n\u003Cli>When the button is clicked, the user is handed off to the authentication library. With OneLogin, the user is redirected to the SAML identity provider. With SimpleSAMLphp, the user is redirected to the SimpleSAMLphp install.\u003C\u002Fli>\n\u003Cli>Once the user is authenticated with the identity provider, they’re redirected back to WordPress and signed in to their account. A new WordPress user will be created if none exists (although this behavior can be disabled).\u003C\u002Fli>\n\u003Cli>When the user logs out of WordPress, they are also logged out of the identity provider.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>A set of configuration options allow you to change the plugin’s default behavior. For instance, \u003Ccode>permit_wp_login=>false\u003C\u002Fcode> will force all authentication to go through the SAML identity provider, bypassing \u003Ccode>wp-login.php\u003C\u002Fcode>. Similiarly, \u003Ccode>auto_provision=>false\u003C\u002Fcode> will disable automatic creation of new WordPress users.\u003C\u002Fp>\n\u003Cp>See installation instructions for full configuration details.\u003C\u002Fp>\n\u003Ch3>Installing SimpleSAMLphp\u003C\u002Fh3>\n\u003Cp>The plugin supports both SimpleSAMLphp v1.x and v2.x. The autoloader is automatically detected:\u003C\u002Fp>\n\u003Cp>\u003Cstrong>SimpleSAMLphp v2.x\u003C\u002Fstrong> uses \u003Ccode>vendor\u002Fautoload.php\u003C\u002Fcode>\u003Cbr \u002F>\n\u003Cstrong>SimpleSAMLphp v1.x\u003C\u002Fstrong> uses \u003Ccode>lib\u002F_autoload.php\u003C\u002Fcode>\u003C\u002Fp>\n\u003Ch4>Default Search Paths\u003C\u002Fh4>\n\u003Cp>The plugin automatically searches for SimpleSAMLphp in these locations:\u003Cbr \u002F>\n* \u003Ccode>ABSPATH . 'simplesaml'\u003C\u002Fcode>\u003Cbr \u002F>\n* \u003Ccode>ABSPATH . 'private\u002Fsimplesamlphp'\u003C\u002Fcode>\u003Cbr \u002F>\n* \u003Ccode>ABSPATH . 'simplesamlphp'\u003C\u002Fcode>\u003Cbr \u002F>\n* \u003Ccode>ABSPATH . 'vendor\u002Fsimplesamlphp\u002Fsimplesamlphp'\u003C\u002Fcode> (Composer installation)\u003Cbr \u002F>\n* \u003Ccode>plugin_dir_path . 'simplesamlphp'\u003C\u002Fcode>\u003C\u002Fp>\n\u003Cp>For each path, the plugin checks for both \u003Ccode>vendor\u002Fautoload.php\u003C\u002Fcode> (v2.x) and \u003Ccode>lib\u002F_autoload.php\u003C\u002Fcode> (v1.x).\u003C\u002Fp>\n\u003Cp>\u003Cstrong>This means Composer installations work automatically!\u003C\u002Fstrong> If you run \u003Ccode>composer require simplesamlphp\u002Fsimplesamlphp\u003C\u002Fcode> in your site root, the plugin will find it without any additional configuration.\u003C\u002Fp>\n\u003Ch4>Composer Installation (Advanced)\u003C\u002Fh4>\n\u003Cp>If you install SimpleSAMLphp via Composer to a \u003Cstrong>custom location\u003C\u002Fstrong> (not the standard \u003Ccode>vendor\u002Fsimplesamlphp\u002Fsimplesamlphp\u003C\u002Fcode>), you can specify the autoloader path:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>add_filter( 'wp_saml_auth_option', function( $value, $option_name ) {\n    if ( 'simplesamlphp_autoload' === $option_name ) {\n        \u002F\u002F Point to your custom Composer vendor autoloader\n        return '\u002Fcustom\u002Fpath\u002Fvendor\u002Fautoload.php';\n    }\n    return $value;\n}, 10, 2 );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>Custom Installation Paths\u003C\u002Fh4>\n\u003Cp>If SimpleSAMLphp is installed in a non-default location, you can set custom search paths with the \u003Ccode>wp_saml_auth_simplesamlphp_path_array\u003C\u002Fcode> filter:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>add_filter( 'wp_saml_auth_simplesamlphp_path_array', function( $simplesamlphp_path_array ) {\n    \u002F\u002F Override default paths with custom paths\n    return [ '\u002Fcustom\u002Fpath\u002Fto\u002Fsimplesamlphp' ];\n} );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Or define an explicit autoloader path with the \u003Ccode>wp_saml_auth_ssp_autoloader\u003C\u002Fcode> filter:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>add_filter( 'wp_saml_auth_ssp_autoloader', function( $ssp_autoloader ) {\n    return ABSPATH . 'path\u002Fto\u002Fsimplesamlphp\u002Fvendor\u002Fautoload.php';\n} );\u003Ch3>WP-CLI Commands\u003C\u002Fh3>\n\u003C\u002Fcode>\u003C\u002Fpre>\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 saml-auth\u003C\u002Fcode> namespace.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$ wp help saml-auth\n\nNAME\n\n  wp saml-auth\n\nDESCRIPTION\n\n  Configure and manage the WP SAML Auth plugin.\n\nSYNOPSIS\n\n  wp saml-auth \u003Ccommand>\n\nSUBCOMMANDS\n\n  scaffold-config      Scaffold a configuration filter to customize WP SAML Auth usage.\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Use \u003Ccode>wp help saml-auth \u003Ccommand>\u003C\u002Fcode> to learn more about each command.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Note:\u003C\u002Fstrong> The \u003Ccode>scaffold-config\u003C\u002Fcode> command generates a configuration function with default values. The \u003Ccode>simplesamlphp_autoload\u003C\u002Fcode> option is not included in the scaffolded output because the plugin auto-detects SimpleSAMLphp installations. Only add this option manually if SimpleSAMLphp is in a non-standard location.\u003C\u002Fp>\n\u003Ch3>Contributing\u003C\u002Fh3>\n\u003Cp>See \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fpantheon-systems\u002Fwp-saml-auth\u002Fblob\u002Fmain\u002FCONTRIBUTING.md\" rel=\"nofollow ugc\">CONTRIBUTING.md\u003C\u002Fa> for information on contributing.\u003C\u002Fp>\n","SAML authentication for WordPress.",7000,198907,88,7,"2026-03-09T14:46:00.000Z",[81,82],"authentication","saml","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fwp-saml-auth\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fwp-saml-auth.2.3.1.zip",{"slug":86,"name":87,"version":88,"author":5,"author_profile":6,"description":89,"short_description":90,"active_installs":91,"downloaded":92,"rating":22,"num_ratings":78,"last_updated":93,"tested_up_to":25,"requires_at_least":94,"requires_php":95,"tags":96,"homepage":98,"download_link":99,"security_score":22,"vuln_count":34,"unpatched_count":34,"last_vuln_date":35,"fetched_at":36},"bv-pantheon-migration","Pantheon Migrations","5.88","\u003Cp>Pantheon is a website management platform that is the best place to run your WordPress site — hands down. And migrating your WordPress site doesn’t get any easier than with Pantheon Migrations.\u003C\u002Fp>\n\u003Cp>With this plugin forget the headaches of manually migrating your site. All you need to activate the plugin is administrative access to your WordPress site. Just copy and paste your SFTP credentials from your new Pantheon site to the Pantheon Migrations tab in your WordPress Dashboard and click “migrate”. You can get back to work on other projects, and our migrations team will email you when everything is complete.\u003C\u002Fp>\n\u003Cp>For full instructions please see our \u003Ca href=\"https:\u002F\u002Fpantheon.io\u002Fdocs\u002Fmigrate-wordpress\u002F\" rel=\"nofollow ugc\">docs page\u003C\u002Fa> on Pantheon Migrations.\u003C\u002Fp>\n\u003Cp>Shout out to \u003Ca href=\"https:\u002F\u002Fblogvault.net\u002F\" rel=\"nofollow ugc\">BlogVault.net\u003C\u002Fa> for the development and hand in creating this plugin. By using this plugin you are agreeing to their \u003Ca href=\"https:\u002F\u002Fblogvault.net\u002Ftos\" rel=\"nofollow ugc\">Terms of Service\u003C\u002Fa>\u003C\u002Fp>\n","The easiest way to migrate your site to Pantheon",1000,100092,"2025-12-03T16:43:00.000Z","4.0","5.6.0",[97,31],"migration","https:\u002F\u002Fpantheon.io","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fbv-pantheon-migration.5.88.zip",{"slug":101,"name":102,"version":103,"author":5,"author_profile":6,"description":104,"short_description":105,"active_installs":106,"downloaded":107,"rating":22,"num_ratings":23,"last_updated":108,"tested_up_to":25,"requires_at_least":109,"requires_php":27,"tags":110,"homepage":98,"download_link":113,"security_score":22,"vuln_count":34,"unpatched_count":34,"last_vuln_date":35,"fetched_at":36},"pantheon-hud","Pantheon HUD","0.4.5","\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,"2025-12-02T18:56:00.000Z","4.9",[111,112,31],"environment-indicator","hosting","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fpantheon-hud.0.4.5.zip",{"slug":115,"name":116,"version":117,"author":5,"author_profile":6,"description":118,"short_description":119,"active_installs":22,"downloaded":120,"rating":121,"num_ratings":122,"last_updated":123,"tested_up_to":124,"requires_at_least":125,"requires_php":126,"tags":127,"homepage":129,"download_link":130,"security_score":131,"vuln_count":34,"unpatched_count":34,"last_vuln_date":35,"fetched_at":36},"solr-power","Solr Search for WordPress","2.6.0","\u003Cp>\u003Ca href=\"https:\u002F\u002Fcircleci.com\u002Fgh\u002Fpantheon-systems\u002Fsolr-power\" rel=\"nofollow ugc\">\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>Search is critical for your site, but the default search for WordPress leaves a lot to be desired. Improve your user experience with the Apache Solr search engine for your WordPress website.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Fast results, with better accuracy.\u003C\u002Fli>\n\u003Cli>Enables faceting on fields such as tags, categories, author, and page type.\u003C\u002Fli>\n\u003Cli>Indexing and faceting on custom fields.\u003C\u002Fli>\n\u003Cli>Drop-in support for \u003Ca href=\"https:\u002F\u002Fcodex.wordpress.org\u002FClass_Reference\u002FWP_Query\" rel=\"nofollow ugc\">WP_Query\u003C\u002Fa> with the \u003Ccode>solr_integrate\u003C\u002Fcode> parameter set to true.\u003C\u002Fli>\n\u003Cli>Completely replaces default WordPress search, just install and configure.\u003C\u002Fli>\n\u003Cli>Completely integrated into default WordPress theme and search widget.\u003C\u002Fli>\n\u003Cli>Very developer-friendly: uses the modern \u003Ca href=\"http:\u002F\u002Fwww.solarium-project.org\u002F\" rel=\"nofollow ugc\">Solarium\u003C\u002Fa> library\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Development\u003C\u002Fh3>\n\u003Cp>This plugin is under active development on GitHub:\u003C\u002Fp>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fpantheon-systems\u002Fsolr-power\" rel=\"nofollow ugc\">https:\u002F\u002Fgithub.com\u002Fpantheon-systems\u002Fsolr-power\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>Please feel free to file issues there. Pull requests are also welcome! See \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fpantheon-systems\u002Fsolr-power\u002Fblob\u002Fmain\u002FCONTRIBUTING.md\" rel=\"nofollow ugc\">CONTRIBUTING.md\u003C\u002Fa> for information on contributing.\u003C\u002Fp>\n\u003Cp>For further documentation, such as available filters and working with the \u003Ccode>SolrPower_Api\u003C\u002Fcode> class directly, please see the project wiki:\u003C\u002Fp>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fpantheon-systems\u002Fsolr-power\u002Fwiki\" rel=\"nofollow ugc\">https:\u002F\u002Fgithub.com\u002Fpantheon-systems\u002Fsolr-power\u002Fwiki\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>You may notice there are two sets of tests running, on two different services:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fphpunit.de\u002F\" rel=\"nofollow ugc\">PHPUnit\u003C\u002Fa> test suite against a Solr instance.\u003C\u002Fli>\n\u003Cli>The \u003Ca href=\"http:\u002F\u002Fbehat.org\u002F\" rel=\"nofollow ugc\">Behat\u003C\u002Fa> test suite against a Pantheon site, to ensure the plugin’s compatibility with the Pantheon platform.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Both of these test suites can be run locally, with a varying amount of setup.\u003C\u002Fp>\n\u003Cp>PHPUnit requires the \u003Ca href=\"https:\u002F\u002Fmake.wordpress.org\u002Fcore\u002Fhandbook\u002Ftesting\u002Fautomated-testing\u002Fphpunit\u002F\" rel=\"nofollow ugc\">WordPress PHPUnit test suite\u003C\u002Fa>, and access to a database with name \u003Ccode>wordpress_test\u003C\u002Fcode>. If you haven’t already configured the test suite locally, you can run \u003Ccode>bash bin\u002Finstall-wp-tests.sh wordpress_test root '' localhost\u003C\u002Fcode>. You’ll also need access to a running Solr instance, in order to run the unit tests against Solr.\u003C\u002Fp>\n\u003Cp>Behat requires a Pantheon site with Solr enabled. Once you’ve created the site, you’ll need \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fpantheon-systems\u002Fterminus#installation\" rel=\"nofollow ugc\">install Terminus\u003C\u002Fa>, and set the \u003Ccode>TERMINUS_TOKEN\u003C\u002Fcode>, \u003Ccode>TERMINUS_SITE\u003C\u002Fcode>, and \u003Ccode>TERMINUS_ENV\u003C\u002Fcode> environment variables. Then, you can run \u003Ccode>.\u002Fbin\u002Fbehat-prepare.sh\u003C\u002Fcode> to prepare the site for the test suite.\u003C\u002Fp>\n\u003Cp>Note that dependencies are installed via Composer and the \u003Ccode>vendor\u003C\u002Fcode> directory is not committed to the repository. You will need to run \u003Ccode>composer install\u003C\u002Fcode> locally for the plugin to function. You can read more about Composer \u003Ca href=\"https:\u002F\u002Fgetcomposer.org\" rel=\"nofollow ugc\">here\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch3>WP-CLI Support\u003C\u002Fh3>\n\u003Cp>This plugin has \u003Ca href=\"http:\u002F\u002Fwp-cli.org\u002F\" rel=\"nofollow ugc\">WP-CLI\u003C\u002Fa> support.\u003C\u002Fp>\n\u003Cp>All Solr Power related commands are grouped into the \u003Ccode>wp solr\u003C\u002Fcode> command, see an example:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$ wp solr\nusage: wp solr check-server-settings\n   or: wp solr delete [\u003Cid>...] [--all]\n   or: wp solr index [--batch=\u003Cbatch>] [--batch_size=\u003Csize>] [--post_type=\u003Cpost-type>]\n   or: wp solr info [--field=\u003Cfield>] [--format=\u003Cformat>]\n   or: wp solr optimize-index\n   or: wp solr repost-schema\n   or: wp solr stats [--field=\u003Cfield>] [--format=\u003Cformat>]\n\nSee 'wp help solr \u003Ccommand>' for more information on a specific command.\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>You can see more details about the commands using \u003Ccode>wp help solr\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>**NAME**\n\n  wp solr\n\n**DESCRIPTION**\n\n  Perform a variety of actions against your Solr instance.\n\n**SYNOPSIS**\n\n  wp solr \u003Ccommand>\n\n**SUBCOMMANDS**\n\n  check-server-settings      Check server settings.\n  delete                     Remove one or more posts from the index.\n  index                      Index all posts for a site.\n  info                       Report information about Solr Power configuration.\n  optimize-index             Optimize the Solr index.\n  repost-schema              Repost schema.xml to Solr.\n  stats                      Report stats about indexed content.\u003Ch3>WP_Query Integration\u003C\u002Fh3>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Use Solr in a custom WP_Query instead of querying a database. Add \u003Ccode>'solr_integrate' => true\u003C\u002Fcode> to the query arguments.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>NOTE:\u003C\u002Fstrong> Currently, only basic queries, tax_query, meta_query and date_query are supported. See \u003Ccode>examples\u002Fexample.custom_WP_Query.php\u003C\u002Fcode> for an example.\u003C\u002Fp>\n\u003Cp>A meta_query can use the following compare operators:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>'='\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>'!='\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>'>'\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>'>='\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>'\u003C'\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>'\u003C='\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>'LIKE'\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>'NOT LIKE'\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>'IN'\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>'NOT IN'\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>'BETWEEN'\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>'NOT BETWEEN'\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>'EXISTS'\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>'NOT EXISTS'\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>(\u003Ccode>'REGEXP'\u003C\u002Fcode>, \u003Ccode>'NOT REGEXP'\u003C\u002Fcode>, and \u003Ccode>'RLIKE'\u003C\u002Fcode> are not supported.)\u003C\u002Fp>\n\u003Ch3>Configuration Tips\u003C\u002Fh3>\n\u003C\u002Fp>\n\u003Cp>\u003Ch4>Searching by author name\u003C\u002Fh4>\n\u003C\u002Fp>\n\u003Cp>To support searching by author name (e.g. where “Pantheon” would return posts authored by the “Pantheon” user), add the following to your custom \u003Ccode>schema.xml\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>  \u003CcopyField source=\"post_author\" dest=\"text\"\u002F>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Ch4>Boosting relevancy score by publish date\u003C\u002Fh4>\n\u003C\u002Fp>\n\u003Cp>The following guidance can be used to extend the Solr index and modify boosts beyond just this example.\u003C\u002Fp>\n\u003Cp>To support math functions on dates, you must add a custom \u003Ccode>schema.xml\u003C\u002Fcode> to Solr and \u003Cstrong>reindex with the new schema\u003C\u002Fstrong>.\u003C\u002Fp>\n\u003Cp>Add the following to \u003Ccode>schema.xml\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>  \u003C!-- Add to \u003Ctypes> -->\n  \u003C!-- See: https:\u002F\u002Flucene.apache.org\u002Fsolr\u002F6_2_0\u002Fsolr-core\u002Forg\u002Fapache\u002Fsolr\u002Fschema\u002FTrieDateField.html -->\n  \u003CfieldType name=\"tdate\" class=\"solr.TrieDateField\" omitNorms=\"true\" precisionStep=\"6\" positionIncrementGap=\"0\"\u002F>\n\n  \u003C!-- Add to \u003Cfields> -->\n  \u003Cfield name=\"post_date_iso\" type=\"tdate\" indexed=\"true\" stored=\"true\" required=\"true\" \u002F>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Add the following to your \u003Ccode>functions.php\u003C\u002Fcode> file.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>  \u003C?php\n  \u002F**\n   * Hooks into the document build process to add post date field in proper format.\n   *\u002F\n  function my_solr_build_document( $doc, $post_info ) {\n        $post_time = strtotime( $post_info->post_date );\n        \u002F\u002F Matches format required for TrieDateField\n        $doc->setField( 'post_date_iso', gmdate( 'c\\Z', $post_time ) );\n        return $doc;\n  }\n  add_filter( 'solr_build_document', 'my_solr_build_document', 10, 2 );\n\n  \u002F**\n   * Hooks into query processor, Dismax, to add publish date boost.\n   * See: https:\u002F\u002Fwww.metaltoad.com\u002Fblog\u002Fdate-boosting-solr-drupal-search-results\n   *\u002F\n  function my_solr_dismax_query( $dismax ) {\n        $dismax->setQueryParser( 'edismax' );\n        $dismax->setBoostQuery( 'recip(abs(ms(NOW\u002FHOUR,post_date_iso),3.16e-11,1,1))' );\n        return $dismax;\n  }\n  add_filter( 'solr_dismax_query', 'my_solr_dismax_query' );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Ch4>\u003Ccode>is_solr_query\u003C\u002Fcode> Filter\u003C\u002Fh4>\n\u003C\u002Fp>\n\u003Cp>The \u003Ccode>is_solr_query\u003C\u002Fcode> filter controls whether Solr should be used for a specific query.\u003C\u002Fp>\n\u003Cp>Parameters:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>$enabled (bool): Indicates whether Solr should be used for the query. Defaults to true if the query is a search or if solr_integrate is set in the query.\u003C\u002Fli>\n\u003Cli>$query (WP_Query): The current WordPress query object.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Return:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\n\u003Cp>bool: true to enable Solr for the query, false to disable it.\u003C\u002Fp>\n\u003Cp>add_filter( ‘is_solr_query’, function( $enabled, $query ) {\u003Cbr \u002F>\n    if ( $query->is_category( ‘news’ ) ) {\u003Cbr \u002F>\n        return false;\u003Cbr \u002F>\n    }\u003Cbr \u002F>\n    return $enabled;\u003Cbr \u002F>\n}, 10, 2 );\u003C\u002Fp>\n\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Ch4>Custom schema file path\u003C\u002Fh4>\n\u003C\u002Fp>\n\u003Cp>By default, custom schema is sourced from \u003Ccode>wp-content\u002Fuploads\u002Fsolr-for-wordpress-on-pantheon\u002Fschema.xml\u003C\u002Fcode>. This can be overridden with an absolute path using the the \u003Ccode>solr_power_customer_schema_file_path\u003C\u002Fcode> filter.\u003C\u002Fp>\n\u003Cp>Parameters:\u003Cbr \u002F>\n* $custom_schema_file_path (string): Default path to a custom schema file\u003C\u002Fp>\n\u003Cp>Return:\u003Cbr \u002F>\n* string: Absolute path to a custom schema.xml file.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>add_filter('solr_power_customer_schema_file_path', function($custom_schema_file_path) {\n    return '\u002Fabsolute\u002Fpath\u002Fto\u002Fschema.xml';\n});\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Ch4>Common issues\u003C\u002Fh4>\n\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Failing to post the schema.xml will result in an error during indexing, “Missing \u003Ccode>post_date_iso\u003C\u002Fcode> field.”\u003C\u002Fli>\n\u003Cli>If you have the field and type in the schema, but don’t add the \u003Ccode>solr_build_document\u003C\u002Fcode> filter, you will get a similar error.\u003C\u002Fli>\n\u003Cli>If the \u003Ccode>post_date_iso\u003C\u002Fcode> field is missing from the index, Solr will ignore this boost and return regular results.\u003C\u002Fli>\n\u003Cli>Trying to use a regular date field for the boost query will result in an error in the request instead of results.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Ch4>Explicit Commit vs Autocommit\u003C\u002Fh4>\n\u003C\u002Fp>\n\u003Cp>Once solr has sent the data to the solr server, solr must COMMIT the data to the index and adjust the index and relevancy ratings accordingly before that data can appear in search results.\u003C\u002Fp>\n\u003Cp>By default, Solr Search for WordPress has auto-commit disabled. The index is committed when the uncommitted item is two minutes old, or the cron runs. By default, the cron runs on the Pantheon platform every hour.\u003C\u002Fp>\n\u003Cp>When autocommit is enabled, Solr Search for WordPress commits data when it sends every post. When running on Pantheon, we recommend leaving autocommit disabled to aid overall site performance.\u003C\u002Fp>\n\u003Cp>To enable autocommit, add the following to \u003Ccode>wp-config.php\u003C\u002Fcode> or an mu-plugin.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>  define( 'SOLRPOWER_DISABLE_AUTOCOMMIT', false );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>To force-commit data outside of a normal cron run, from the command line, you can run the command below or simply force a cron-run.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>  wp solr commit\n\u003C\u002Fcode>\u003C\u002Fpre>\n","Improve your user experience with the Apache Solr search engine for your WordPress website.",92442,80,2,"2024-12-09T18:05:00.000Z","6.7.5","4.6","7.1",[128],"search","","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fsolr-power.2.6.0.zip",92,{"slug":133,"name":134,"version":135,"author":5,"author_profile":6,"description":136,"short_description":137,"active_installs":34,"downloaded":138,"rating":34,"num_ratings":34,"last_updated":129,"tested_up_to":25,"requires_at_least":139,"requires_php":140,"tags":141,"homepage":144,"download_link":145,"security_score":22,"vuln_count":34,"unpatched_count":34,"last_vuln_date":35,"fetched_at":146},"pantheon-content-publisher","Pantheon Content Publisher","1.3.5","\u003Cp>\u003Cstrong>The Pantheon Content Publisher plugin for WordPress enables seamless content publishing from Google Drive and Google Docs directly to WordPress sites.\u003C\u002Fstrong> Perfect for editorial teams who collaborate on content within Google Docs, this plugin ensures a smooth transition from document creation to web publishing, facilitating real-time previews and direct publishing options.\u003C\u002Fp>\n\u003Ch3>Features\u003C\u002Fh3>\n\u003Ch4>Real-time Preview\u003C\u002Fh4>\n\u003Cp>Experience seamless document previews within your WordPress environment as they would appear live on the web.\u003C\u002Fp>\n\u003Ch4>One-click Publishing\u003C\u002Fh4>\n\u003Cp>Enable direct publishing from Google Docs to WordPress, simplifying content management and streamlining workflows.\u003C\u002Fp>\n\u003Ch4>Custom Post Type Support\u003C\u002Fh4>\n\u003Cp>Publish content to any public post type registered on your WordPress site, including custom post types. Authors can also specify the target post type per document via metadata.\u003C\u002Fp>\n\u003Ch4>ACF Integration\u003C\u002Fh4>\n\u003Cp>Sync Content Publisher metadata fields to Advanced Custom Fields (ACF). Navigate to Settings > Pantheon Content Publisher > Integration tab to define field mappings per post type. Each tab shows ACF fields from the field groups assigned to that post type — enter the exact Content Publisher metadata field name (case-sensitive) to create a mapping. Mapped values are automatically applied on every publish. Sync errors are displayed in the Integration tab and auto-clear after one hour. Requires the ACF plugin (free or Pro) to be installed and active. Works with custom post types.\u003C\u002Fp>\n\u003Cp>For more information, please check \u003Ca href=\"https:\u002F\u002Fdocs.content.pantheon.io\" rel=\"nofollow ugc\">Pantheon Content Publisher documentation\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch3>Integration with Third-Party Services\u003C\u002Fh3>\n\u003Ch4>Important Disclosure\u003C\u002Fh4>\n\u003Cp>This plugin integrates with Google Drive and Google Docs to facilitate document publishing to WordPress.\u003Cbr \u002F>\nWhen enabled, it will access documents from these services for the purposes of rendering previews and enabling publishing functionality via the \u003Ca href=\"https:\u002F\u002Fdocs.content.pantheon.io\" rel=\"nofollow ugc\">Pantheon Content Publisher service\u003C\u002Fa>. These services are not processing any data or content originating from WordPress or the plugin itself and no other third-party service is used to process data.\u003Cbr \u002F>\nPantheon Content Publisher policies and terms are available at \u003Ca href=\"https:\u002F\u002Flegal.pantheon.io\u002F\" rel=\"nofollow ugc\">https:\u002F\u002Flegal.pantheon.io\u002F\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>This plugin makes use of the Apollo open-source GraphQL Client library and references its \u003Ca href=\"https:\u002F\u002Fchromewebstore.google.com\u002Fdetail\u002Fapollo-client-devtools\u002Fjdkknkkbebbapilgoeccciglkfbmbnfm\" rel=\"nofollow ugc\">Chrome extension\u003C\u002Fa>.\u003Cbr \u002F>\nGoogle Chrome Web Store: \u003Ca href=\"https:\u002F\u002Fssl.gstatic.com\u002Fchrome\u002Fwebstore\u002Fintl\u002Fen\u002Fgallery_tos.html\" rel=\"nofollow ugc\">Terms of Service\u003C\u002Fa>,  \u003Ca href=\"https:\u002F\u002Fpolicies.google.com\u002Fprivacy?hl=en\" rel=\"nofollow ugc\">Privacy Policy\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>Mozilla\u002FFireFox:  \u003Ca href=\"https:\u002F\u002Fwww.mozilla.org\u002Fen-US\u002Fabout\u002Flegal\u002Fterms\u002Fmozilla\u002F\" rel=\"nofollow ugc\">Terms of Service\u003C\u002Fa>, \u003Ca href=\"https:\u002F\u002Fwww.mozilla.org\u002Fen-US\u002Fprivacy\u002Fwebsites\u002F\" rel=\"nofollow ugc\">Privacy Policy\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>This library only suggests the use of this tool to developers. Users don’t interact with it and no data is exchanged with this service.\u003C\u002Fp>\n\u003Cp>This service is provided by \u003Ca href=\"https:\u002F\u002Fwww.apollographql.com\" rel=\"nofollow ugc\">Apollo\u003C\u002Fa>. See the \u003Ca href=\"https:\u002F\u002Fwww.apollographql.com\u002FApollo-Terms-of-Service.pdf\" rel=\"nofollow ugc\">Apollo Term of Service\u003C\u002Fa> and \u003Ca href=\"https:\u002F\u002Fwww.apollographql.com\u002FApollo-Privacy-Policy.pdf\" rel=\"nofollow ugc\">Apollo Privacy Policy\u003C\u002Fa> for details on terms.\u003C\u002Fp>\n\u003Ch4>Data Handling\u003C\u002Fh4>\n\u003Cp>User documents from Google Drive are accessed and processed to generate content on WordPress.\u003Cbr \u002F>\nNo other personal data is shared with or stored on third-party services beyond this operational scope.\u003C\u002Fp>\n","The Pantheon Content Publisher plugin for WordPress enables seamless content publishing from Google Drive and Google Docs directly to WordPress sites.",1266,"5.7","8.1.0",[142,143,31],"acf","google-docs","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fpantheon-content-publisher\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fpantheon-content-publisher.1.3.5.zip","2026-03-15T10:48:56.248Z"]