e just respond '304 Not Modified'. header( $this->config->get_server_input( 'SERVER_PROTOCOL', '' ) . ' 304 Not Modified', true, 304 ); header( 'Expires: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' ); header( 'Cache-Control: no-cache, must-revalidate' ); $this->log( 'Serving `304` cache file.', [ 'path' => $cache_filepath, 'modified' => $if_modified_since, ], 'info' ); exit; } // Serve the cache if file isn't store in the client browser cache. readfile( $cache_filepath ); $this->log( 'Serving cache file.', [ 'path' => $cache_filepath, 'modified' => $if_modified_since, ], 'info' ); exit; } /** * Serve a gzipped cache file. * * @since 3.3 * * @param string $cache_filepath Path to the gzip cache file. */ private function serve_gzip_cache_file( $cache_filepath ) { header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s', filemtime( $cache_filepath ) ) . ' GMT' ); $if_modified_since = $this->get_if_modified_since(); // Checking if the client is validating his cache and if it is current. if ( $if_modified_since && ( strtotime( $if_modified_since ) === @filemtime( $cache_filepath ) ) ) { // Client's cache is current, so we just respond '304 Not Modified'. header( $this->config->get_server_input( 'SERVER_PROTOCOL', '' ) . ' 304 Not Modified', true, 304 ); header( 'Expires: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' ); header( 'Cache-Control: no-cache, must-revalidate' ); $this->log( 'Serving `304` gzip cache file.', [ 'path' => $cache_filepath, 'modified' => $if_modified_since, ], 'info' ); exit; } // Serve the cache if file isn't store in the client browser cache. readgzfile( $cache_filepath ); $this->log( 'Serving gzip cache file.', [ 'path' => $cache_filepath, 'modified' => $if_modified_since, ], 'info' ); exit; } /** * Maybe cache the page content. * * @since 3.3 * * @param string $buffer The buffer content. * @return string The buffered content. */ public function maybe_process_buffer( $buffer ) { if ( ! $this->tests->can_process_buffer( $buffer ) ) { $this->log_last_test_error(); return $buffer; } $footprint = ''; $is_html = $this->is_html( $buffer ); if ( ! static::can_generate_caching_files() ) { // Not allowed to generate cache files. if ( $is_html ) { $footprint = $this->get_rocket_footprint(); } $this->log( 'Page not cached by filter.', [ 'filter' => 'do_rocket_generate_caching_files', ] ); return $buffer . $footprint; } $webp_enabled = preg_match( '@@', $buffer, $webp_tag ); $has_webp = ! empty( $webp_tag ) ? 'has' === $webp_tag[1] : false; $cache_filepath = $this->get_cache_path( [ 'webp' => $has_webp ] ); $cache_dir_path = dirname( $cache_filepath ); // Create cache folders. rocket_mkdir_p( $cache_dir_path ); if ( $is_html ) { $footprint = $this->get_rocket_footprint( time() ); } // Webp request. if ( $webp_enabled ) { $buffer = str_replace( $webp_tag[0], '', $buffer ); if ( ! $has_webp ) { // The buffer doesn’t contain webp files. $cache_dir_path = rtrim( dirname( $cache_filepath ), '/\\' ); $this->maybe_create_nowebp_file( $cache_dir_path ); } } $this->write_cache_file( $cache_filepath, $buffer . $footprint ); $this->maybe_create_nginx_mobile_file( $cache_dir_path ); // Send headers with the last modified time of the cache file. if ( file_exists( $cache_filepath ) ) { header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s', filemtime( $cache_filepath ) ) . ' GMT' ); } if ( $is_html ) { $footprint = $this->get_rocket_footprint(); } $this->log( 'Page cached.', [ 'path' => $cache_filepath, ], 'info' ); return $buffer . $footprint; } /** * Writes the cache file(s) * * @since 3.5 * * @param string $cache_filepath Absolute path to the cache file. * @param string $content Content to write in the cache file. * @return void */ private function write_cache_file( $cache_filepath, $content ) { $gzip_filepath = $cache_filepath . '_gzip'; $temp_filepath = $cache_filepath . '_temp'; $temp_gzip_filepath = $gzip_filepath . '_temp'; if ( rocket_direct_filesystem()->exists( $temp_filepath ) ) { return; } // Save the cache file. rocket_put_content( $temp_filepath, $content ); rocket_direct_filesystem()->move( $temp_filepath, $cache_filepath, true ); if ( function_exists( 'gzencode' ) ) { /** * Filters the Gzip compression level to use for the cache file * * @param int $compression_level Compression level between 0 and 9. */ $compression_level = apply_filters( 'rocket_gzencode_level_compression', 6 ); rocket_put_content( $temp_gzip_filepath, gzencode( $content, $compression_level ) ); rocket_direct_filesystem()->move( $temp_gzip_filepath, $gzip_filepath, true ); } } /** * Get the path to the cache file. * * @since 3.3 * * @param array $args { * A list of arguments. * * @type bool $webp Set to false to prevent adding the part related to webp. * } * @return string */ public function get_cache_path( $args = [] ) { $args = array_merge( [ 'webp' => true, ], $args ); $cookies = $this->tests->get_cookies(); $request_uri_path = $this->get_request_cache_path( $cookies ); $filename = 'index'; $filename = $this->maybe_mobile_filename( $filename ); // Rename the caching filename for SSL URLs. if ( is_ssl() && $this->config->get_config( 'cache_ssl' ) ) { $filename .= '-https'; } if ( $args['webp'] ) { $filename = $this->maybe_webp_filename( $filename ); } $filename = $this->maybe_dynamic_cookies_filename( $filename, $cookies ); // Ensure proper formatting of the path. $request_uri_path = preg_replace_callback( '/%[0-9A-F]{2}/', [ $this, 'reset_lowercase' ], $request_uri_path ); // Directories in Windows can't contain question marks. $request_uri_path = str_replace( '?', '#', $request_uri_path ); // Limit filename max length to 255 characters. $request_uri_path .= '/' . substr( $filename, 0, 250 ) . '.html'; return $request_uri_path; } /** ----------------------------------------------------------------------------------------- */ /** VARIOUS TOOLS =========================================================================== */ /** ----------------------------------------------------------------------------------------- */ /** * Declares and sets value of constant preventing Optimizations. * * @since 3.3 */ private function define_donotoptimize_true() { if ( ! defined( 'DONOTROCKETOPTIMIZE' ) ) { define( 'DONOTROCKETOPTIMIZE', true ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals } } /** * Gets If-modified-since header value * * @since 3.3 * @return string */ private function get_if_modified_since() { if ( function_exists( 'apache_request_headers' ) ) { $headers = apache_request_headers(); return isset( $headers['If-Modified-Since'] ) ? $headers['If-Modified-Since'] : ''; } return $this->config->get_server_input( 'HTTP_IF_MODIFIED_SINCE', '' ); } /** * Get WP Rocket footprint * * @since 3.0.5 White label footprint if WP_ROCKET_WHITE_LABEL_FOOTPRINT is defined. * @since 2.0 * * @param int $time UNIX timestamp when the cache file was saved. * @return string The footprint that will be printed */ private function get_rocket_footprint( $time = '' ) { $footprint = defined( 'WP_ROCKET_WHITE_LABEL_FOOTPRINT' ) ? "\n" . ''; return $footprint; } /** * Create a hidden empty file for mobile detection on NGINX with the Rocket NGINX configuration. * * @param string $cache_dir_path Path to the current cache directory. * @return void */ private function maybe_create_nginx_mobile_file( $cache_dir_path ) { global $is_nginx; if ( ! $this->config->get_config( 'do_caching_mobile_files' ) ) { return; } if ( ! $is_nginx ) { return; } $nginx_mobile_detect = $cache_dir_path . '/.mobile-active'; if ( rocket_direct_filesystem()->exists( $nginx_mobile_detect ) ) { return; } rocket_direct_filesystem()->touch( $nginx_mobile_detect ); } /** * Create a hidden empty file when webp is enabled but the buffer doesn’t contain webp files. * * @since 3.4 * * @param string $cache_dir_path Path to the current cache directory (without trailing slah). */ private function maybe_create_nowebp_file( $cache_dir_path ) { $nowebp_filepath = $cache_dir_path . DIRECTORY_SEPARATOR . '.no-webp'; if ( rocket_direct_filesystem()->exists( $nowebp_filepath ) ) { return; } rocket_direct_filesystem()->touch( $nowebp_filepath ); } /** * Tell if generating cache files is allowed. * * @since 3.3 * * @return bool */ public static function can_generate_caching_files() { /** * Allow to the generate the caching file. * * @since 2.5 * * @param bool True will force the cache file generation. */ return (bool) apply_filters( 'do_rocket_generate_caching_files', true ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals } /** * Gets the base cache path for the current request * * @since 3.3 * * @param array $cookies Cookies for the current request. * @return string */ private function get_request_cache_path( $cookies ) { $host = $this->config->get_host(); if ( $this->config->get_config( 'url_no_dots' ) ) { $host = str_replace( '.', '_', $host ); } $request_uri = $this->tests->get_clean_request_uri(); $cookie_hash = $this->config->get_config( 'cookie_hash' ); $logged_in_cookie = $this->config->get_config( 'logged_in_cookie' ); $logged_in_cookie_no_hash = str_replace( $cookie_hash, '', $logged_in_cookie ); // Get cache folder of host name. if ( $logged_in_cookie && isset( $cookies[ $logged_in_cookie ] ) && ! $this->tests->has_rejected_cookie( $logged_in_cookie_no_hash ) ) { if ( $this->config->get_config( 'common_cache_logged_users' ) ) { return $this->cache_dir_path . $host . '-loggedin-' . $this->config->get_config( 'secret_cache_key' ) . rtrim( $request_uri, '/' ); } $user_key = explode( '|', $cookies[ $logged_in_cookie ] ); $user_key = reset( $user_key ); $user_key = $user_key . '-' . $this->config->get_config( 'secret_cache_key' ); // Get cache folder of host name. return $this->cache_dir_path . $host . '-' . $user_key . rtrim( $request_uri, '/' ); } return $this->cache_dir_path . $host . rtrim( $request_uri, '/' ); } /** * Modifies the filename if the request is from a mobile device. * * @since 3.3 * * @param string $filename Cache filename. * @return string */ private function maybe_mobile_filename( $filename ) { $cache_mobile_files_tablet = $this->config->get_config( 'cache_mobile_files_tablet' ); if ( ! ( $this->config->get_config( 'cache_mobile' ) && $this->config->get_config( 'do_caching_mobile_files' ) ) ) { return $filename; } if ( ! $cache_mobile_files_tablet ) { return $filename; } if ( ! class_exists( 'WP_Rocket_Mobile_Detect' ) ) { return $filename; } $detect = new \WP_Rocket_Mobile_Detect(); if ( $detect->isMobile() && ! $detect->isTablet() && 'desktop' === $cache_mobile_files_tablet || ( $detect->isMobile() || $detect->isTablet() ) && 'mobile' === $cache_mobile_files_tablet ) { return $filename .= '-mobile'; } return $filename; } /** * Modifies the filename if the request is WebP compatible * * @since 3.4 * * @param string $filename Cache filename. * @return string */ private function maybe_webp_filename( $filename ) { if ( ! $this->config->get_config( 'cache_webp' ) ) { return $filename; } /** * Force WP Rocket to disable its webp cache. * * @since 3.4 * * @param bool $disable_webp_cache Set to true to disable the webp cache. */ $disable_webp_cache = apply_filters( 'rocket_disable_webp_cache', false ); if ( $disable_webp_cache ) { return $filename; } $http_accept = $this->config->get_server_input( 'HTTP_ACCEPT', '' ); if ( ! $http_accept && function_exists( 'apache_request_headers' ) ) { $headers = apache_request_headers(); $http_accept = isset( $headers['Accept'] ) ? $headers['Accept'] : ''; } if ( ! $http_accept || false === strpos( $http_accept, 'webp' ) ) { if ( preg_match( '#Firefox/(?[0-9]{2})#i', $this->config->get_server_input( 'HTTP_USER_AGENT' ), $matches ) ) { if ( 66 <= (int) $matches['version'] ) { return $filename . '-webp'; } } return $filename; } return $filename . '-webp'; } /** * Modifies the filename if dynamic cookies are set * * @param string $filename Cache filename. * @param array $cookies Cookies for the request. * @return string */ private function maybe_dynamic_cookies_filename( $filename, $cookies ) { $cache_dynamic_cookies = $this->config->get_config( 'cache_dynamic_cookies' ); if ( ! $cache_dynamic_cookies ) { return $filename; } foreach ( $cache_dynamic_cookies as $key => $cookie_name ) { if ( is_array( $cookie_name ) ) { if ( isset( $_COOKIE[ $key ] ) ) { foreach ( $cookie_name as $cookie_key ) { if ( '' !== $cookies[ $key ][ $cookie_key ] ) { $cache_key = $cookies[ $key ][ $cookie_key ]; $cache_key = preg_replace( '/[^a-z0-9_\-]/i', '-', $cache_key ); $filename .= '-' . $cache_key; } } } continue; } if ( isset( $cookies[ $cookie_name ] ) && '' !== $cookies[ $cookie_name ] ) { $cache_key = $cookies[ $cookie_name ]; $cache_key = preg_replace( '/[^a-z0-9_\-]/i', '-', $cache_key ); $filename .= '-' . $cache_key; } } return $filename; } /** * Force lowercase on encoded url strings from different alphabets to prevent issues on some hostings. * * @since 3.3 * * @param array $matches Cache path. * @return string Cache path in lowercase. */ protected function reset_lowercase( $matches ) { return strtolower( $matches[0] ); } } , 'WPSEO_Redirect_Handler' => __DIR__ . '/../..' . '/src/deprecated/redirect-handler.php', 'WPSEO_Redirect_Htaccess_Exporter' => __DIR__ . '/../..' . '/classes/redirect/exporters/redirect-htaccess-exporter.php', 'WPSEO_Redirect_Htaccess_Util' => __DIR__ . '/../..' . '/classes/redirect/redirect-htaccess-util.php', 'WPSEO_Redirect_Import_Exception' => __DIR__ . '/../..' . '/classes/redirect/redirect-import-exception.php', 'WPSEO_Redirect_Importer' => __DIR__ . '/../..' . '/classes/redirect/redirect-importer.php', 'WPSEO_Redirect_Loader' => __DIR__ . '/../..' . '/classes/redirect/loaders/redirect-loader-interface.php', 'WPSEO_Redirect_Manager' => __DIR__ . '/../..' . '/classes/redirect/redirect-manager.php', 'WPSEO_Redirect_Nginx_Exporter' => __DIR__ . '/../..' . '/classes/redirect/exporters/redirect-nginx-exporter.php', 'WPSEO_Redirect_Option' => __DIR__ . '/../..' . '/classes/redirect/redirect-option.php', 'WPSEO_Redirect_Option_Exporter' => __DIR__ . '/../..' . '/classes/redirect/exporters/redirect-option-exporter.php', 'WPSEO_Redirect_Page' => __DIR__ . '/../..' . '/classes/redirect/redirect-page.php', 'WPSEO_Redirect_Page_Presenter' => __DIR__ . '/../..' . '/classes/redirect/presenters/redirect-page-presenter.php', 'WPSEO_Redirect_Presence_Validation' => __DIR__ . '/../..' . '/classes/redirect/validation/redirect-presence-validation.php', 'WPSEO_Redirect_Presenter' => __DIR__ . '/../..' . '/classes/redirect/presenters/redirect-presenter-interface.php', 'WPSEO_Redirect_Quick_Edit_Presenter' => __DIR__ . '/../..' . '/classes/redirect/presenters/redirect-quick-edit-presenter.php', 'WPSEO_Redirect_Redirection_Loader' => __DIR__ . '/../..' . '/classes/redirect/loaders/redirect-redirection-loader.php', 'WPSEO_Redirect_Relative_Origin_Validation' => __DIR__ . '/../..' . '/classes/redirect/validation/redirect-relative-origin-validation.php', 'WPSEO_Redirect_Safe_Redirect_Loader' => __DIR__ . '/../..' . '/classes/redirect/loaders/redirect-safe-redirect-loader.php', 'WPSEO_Redirect_Self_Redirect_Validation' => __DIR__ . '/../..' . '/classes/redirect/validation/redirect-self-redirect-validation.php', 'WPSEO_Redirect_Settings_Presenter' => __DIR__ . '/../..' . '/classes/redirect/presenters/redirect-settings-presenter.php', 'WPSEO_Redirect_Simple_301_Redirect_Loader' => __DIR__ . '/../..' . '/classes/redirect/loaders/redirect-simple-301-redirect-loader.php', 'WPSEO_Redirect_Sitemap_Filter' => __DIR__ . '/../..' . '/classes/redirect/redirect-sitemap-filter.php', 'WPSEO_Redirect_Subdirectory_Validation' => __DIR__ . '/../..' . '/classes/redirect/validation/redirect-subdirectory-validation.php', 'WPSEO_Redirect_Tab_Presenter' => __DIR__ . '/../..' . '/classes/redirect/presenters/redirect-tab-presenter.php', 'WPSEO_Redirect_Table' => __DIR__ . '/../..' . '/classes/redirect/redirect-table.php', 'WPSEO_Redirect_Table_Presenter' => __DIR__ . '/../..' . '/classes/redirect/presenters/redirect-table-presenter.php', 'WPSEO_Redirect_Types' => __DIR__ . '/../..' . '/classes/redirect/redirect-types.php', 'WPSEO_Redirect_Uniqueness_Validation' => __DIR__ . '/../..' . '/classes/redirect/validation/redirect-uniqueness-validation.php', 'WPSEO_Redirect_Upgrade' => __DIR__ . '/../..' . '/classes/redirect/redirect-upgrade.php', 'WPSEO_Redirect_Url_Formatter' => __DIR__ . '/../..' . '/classes/redirect/redirect-url-formatter.php', 'WPSEO_Redirect_Util' => __DIR__ . '/../..' . '/classes/redirect/redirect-util.php', 'WPSEO_Redirect_Validation' => __DIR__ . '/../..' . '/classes/redirect/validation/redirect-validation-interface.php', 'WPSEO_Redirect_Validator' => __DIR__ . '/../..' . '/classes/redirect/redirect-validator.php', 'WPSEO_Social_Previews' => __DIR__ . '/../..' . '/classes/social-previews.php', 'WPSEO_Term_Watcher' => __DIR__ . '/../..' . '/classes/term-watcher.php', 'WPSEO_Upgrade_Manager' => __DIR__ . '/../..' . '/classes/upgrade-manager.php', 'WPSEO_Validation_Error' => __DIR__ . '/../..' . '/classes/validation-error.php', 'WPSEO_Validation_Result' => __DIR__ . '/../..' . '/classes/validation-result.php', 'WPSEO_Validation_Warning' => __DIR__ . '/../..' . '/classes/validation-warning.php', 'WPSEO_Watcher' => __DIR__ . '/../..' . '/classes/watcher.php', 'Yoast\\WP\\SEO\\Actions\\Link_Suggestions_Action' => __DIR__ . '/../..' . '/src/deprecated/actions/renamed-classes.php', 'Yoast\\WP\\SEO\\Actions\\Prominent_Words\\Complete_Action' => __DIR__ . '/../..' . '/src/deprecated/actions/prominent-words/renamed-classes.php', 'Yoast\\WP\\SEO\\Actions\\Prominent_Words\\Content_Action' => __DIR__ . '/../..' . '/src/deprecated/actions/prominent-words/renamed-classes.php', 'Yoast\\WP\\SEO\\Actions\\Prominent_Words\\Save_Action' => __DIR__ . '/../..' . '/src/deprecated/actions/prominent-words/renamed-classes.php', 'Yoast\\WP\\SEO\\Actions\\Zapier_Action' => __DIR__ . '/../..' . '/src/deprecated/actions/renamed-classes.php', 'Yoast\\WP\\SEO\\Conditionals\\Zapier_Enabled_Conditional' => __DIR__ . '/../..' . '/src/deprecated/conditionals/renamed-classes.php', 'Yoast\\WP\\SEO\\Config\\Migrations\\WpYoastPremiumImprovedInternalLinking' => __DIR__ . '/../..' . '/src/config/migrations/20190715101200_WpYoastPremiumImprovedInternalLinking.php', 'Yoast\\WP\\SEO\\Database\\Migration_Runner_Premium' => __DIR__ . '/../..' . '/src/deprecated/database/renamed-classes.php', 'Yoast\\WP\\SEO\\Helpers\\Prominent_Words_Helper' => __DIR__ . '/../..' . '/src/deprecated/helpers/renamed-classes.php', 'Yoast\\WP\\SEO\\Helpers\\Zapier_Helper' => __DIR__ . '/../..' . '/src/deprecated/helpers/renamed-classes.php', 'Yoast\\WP\\SEO\\Initializers\\Redirect_Handler' => __DIR__ . '/../..' . '/src/deprecated/initializers/renamed-classes.php', 'Yoast\\WP\\SEO\\Integrations\\Admin\\Prominent_Words_Notification' => __DIR__ . '/../..' . '/src/deprecated/integrations/admin/prominent-words-notification.php', 'Yoast\\WP\\SEO\\Integrations\\Blocks\\Block_Patterns' => __DIR__ . '/../..' . '/src/integrations/blocks/block-patterns.php', 'Yoast\\WP\\SEO\\Integrations\\Blocks\\Estimated_Reading_Time_Block' => __DIR__ . '/../..' . '/src/deprecated/integrations/blocks/renamed-classes.php', 'Yoast\\WP\\SEO\\Integrations\\Blocks\\Job_Posting_Block' => __DIR__ . '/../..' . '/src/integrations/blocks/job-posting-block.php', 'Yoast\\WP\\SEO\\Integrations\\Blocks\\Related_Links_Block' => __DIR__ . '/../..' . '/src/deprecated/integrations/blocks/renamed-classes.php', 'Yoast\\WP\\SEO\\Integrations\\Blocks\\Schema_Blocks' => __DIR__ . '/../..' . '/src/deprecated/integrations/blocks/renamed-classes.php', 'Yoast\\WP\\SEO\\Integrations\\Blocks\\Siblings_Block' => __DIR__ . '/../..' . '/classes/blocks/siblings-block.php', 'Yoast\\WP\\SEO\\Integrations\\Blocks\\Subpages_Block' => __DIR__ . '/../..' . '/classes/blocks/subpages-block.php', 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Elementor_Premium' => __DIR__ . '/../..' . '/src/deprecated/integrations/third-party/renamed-classes.php', 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\TranslationsPress' => __DIR__ . '/../..' . '/src/integrations/third-party/translationspress.php', 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Zapier' => __DIR__ . '/../..' . '/src/deprecated/integrations/third-party/renamed-classes.php', 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Zapier_Classic_Editor' => __DIR__ . '/../..' . '/src/deprecated/integrations/third-party/renamed-classes.php', 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Zapier_Trigger' => __DIR__ . '/../..' . '/src/deprecated/integrations/third-party/renamed-classes.php', 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Premium_Option_Wpseo_Watcher' => __DIR__ . '/../..' . '/src/deprecated/integrations/watchers/renamed-classes.php', 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Zapier_APIKey_Reset_Watcher' => __DIR__ . '/../..' . '/src/deprecated/integrations/watchers/renamed-classes.php', 'Yoast\\WP\\SEO\\Models\\Prominent_Words' => __DIR__ . '/../..' . '/src/models/prominent-words.php', 'Yoast\\WP\\SEO\\Premium\\Actions\\Link_Suggestions_Action' => __DIR__ . '/../..' . '/src/actions/link-suggestions-action.php', 'Yoast\\WP\\SEO\\Premium\\Actions\\Prominent_Words\\Complete_Action' => __DIR__ . '/../..' . '/src/actions/prominent-words/complete-action.php', 'Yoast\\WP\\SEO\\Premium\\Actions\\Prominent_Words\\Content_Action' => __DIR__ . '/../..' . '/src/actions/prominent-words/content-action.php', 'Yoast\\WP\\SEO\\Premium\\Actions\\Prominent_Words\\Save_Action' => __DIR__ . '/../..' . '/src/actions/prominent-words/save-action.php', 'Yoast\\WP\\SEO\\Premium\\Actions\\Zapier_Action' => __DIR__ . '/../..' . '/src/actions/zapier-action.php', 'Yoast\\WP\\SEO\\Premium\\Addon_Installer' => __DIR__ . '/../..' . '/src/addon-installer.php', 'Yoast\\WP\\SEO\\Premium\\Conditionals\\Algolia_Enabled_Conditional' => __DIR__ . '/../..' . '/src/conditionals/algolia-enabled-conditional.php', 'Yoast\\WP\\SEO\\Premium\\Conditionals\\Zapier_Enabled_Conditional' => __DIR__ . '/../..' . '/src/conditionals/zapier-enabled-conditional.php', 'Yoast\\WP\\SEO\\Premium\\Config\\Badge_Group_Names' => __DIR__ . '/../..' . '/src/config/badge-group-names.php', 'Yoast\\WP\\SEO\\Premium\\Config\\Migrations\\AddIndexOnIndexableIdAndStem' => __DIR__ . '/../..' . '/src/config/migrations/20210827093024_AddIndexOnIndexableIdAndStem.php', 'Yoast\\WP\\SEO\\Premium\\Database\\Migration_Runner_Premium' => __DIR__ . '/../..' . '/src/database/migration-runner-premium.php', 'Yoast\\WP\\SEO\\Premium\\Generated\\Cached_Container' => __DIR__ . '/../..' . '/src/generated/container.php', 'Yoast\\WP\\SEO\\Premium\\Helpers\\Prominent_Words_Helper' => __DIR__ . '/../..' . '/src/helpers/prominent-words-helper.php', 'Yoast\\WP\\SEO\\Premium\\Helpers\\Zapier_Helper' => __DIR__ . '/../..' . '/src/helpers/zapier-helper.php', 'Yoast\\WP\\SEO\\Premium\\Initializers\\Plugin' => __DIR__ . '/../..' . '/src/initializers/plugin.php', 'Yoast\\WP\\SEO\\Premium\\Initializers\\Redirect_Handler' => __DIR__ . '/../..' . '/src/initializers/redirect-handler.php', 'Yoast\\WP\\SEO\\Premium\\Integrations\\Abstract_OpenGraph_Integration' => __DIR__ . '/../..' . '/src/integrations/abstract-opengraph-integration.php', 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Crawl_Settings_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/crawl-settings-integration.php', 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Plugin_Links_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/plugin-links-integration.php', 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Prominent_Words\\Indexing_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/prominent-words/indexing-integration.php', 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Prominent_Words\\Metabox_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/prominent-words/metabox-integration.php', 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Thank_You_Page_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/thank-you-page-integration.php', 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\User_Profile_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/user-profile-integration.php', 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Workouts_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/workouts-integration.php', 'Yoast\\WP\\SEO\\Premium\\Integrations\\Blocks\\Estimated_Reading_Time_Block' => __DIR__ . '/../..' . '/src/integrations/blocks/estimated-reading-time-block.php', 'Yoast\\WP\\SEO\\Premium\\Integrations\\Blocks\\Related_Links_Block' => __DIR__ . '/../..' . '/src/integrations/blocks/related-links-block.php', 'Yoast\\WP\\SEO\\Premium\\Integrations\\Blocks\\Schema_Blocks' => __DIR__ . '/../..' . '/src/integrations/blocks/schema-blocks.php', 'Yoast\\WP\\SEO\\Premium\\Integrations\\Cleanup_Integration' => __DIR__ . '/../..' . '/src/integrations/cleanup-integration.php', 'Yoast\\WP\\SEO\\Premium\\Integrations\\Front_End\\Crawl_Cleanup_Rss' => __DIR__ . '/../..' . '/src/integrations/front-end/crawl-cleanup-rss.php', 'Yoast\\WP\\SEO\\Premium\\Integrations\\OpenGraph_Author_Archive' => __DIR__ . '/../..' . '/src/integrations/opengraph-author-archive.php', 'Yoast\\WP\\SEO\\Premium\\Integrations\\OpenGraph_Date_Archive' => __DIR__ . '/../..' . '/src/integrations/opengraph-date-archive.php', 'Yoast\\WP\\SEO\\Premium\\Integrations\\OpenGraph_PostType_Archive' => __DIR__ . '/../..' . '/src/integrations/opengraph-posttype-archive.php', 'Yoast\\WP\\SEO\\Premium\\Integrations\\OpenGraph_Post_Type' => __DIR__ . '/../..' . '/src/integrations/opengraph-post-type.php', 'Yoast\\WP\\SEO\\Premium\\Integrations\\OpenGraph_Term_Archive' => __DIR__ . '/../..' . '/src/integrations/opengraph-term-archive.php', 'Yoast\\WP\\SEO\\Premium\\Integrations\\Routes\\Workouts_Routes_Integration' => __DIR__ . '/../..' . '/src/integrations/routes/workouts-routes-integration.php', 'Yoast\\WP\\SEO\\Premium\\Integrations\\Third_Party\\Algolia' => __DIR__ . '/../..' . '/src/integrations/third-party/algolia.php', 'Yoast\\WP\\SEO\\Premium\\Integrations\\Third_Party\\Elementor_Premium' => __DIR__ . '/../..' . '/src/integrations/third-party/elementor-premium.php', 'Yoast\\WP\\SEO\\Premium\\Integrations\\Third_Party\\Zapier' => __DIR__ . '/../..' . '/src/integrations/third-party/zapier.php', 'Yoast\\WP\\SEO\\Premium\\Integrations\\Third_Party\\Zapier_Classic_Editor' => __DIR__ . '/../..' . '/src/integrations/third-party/zapier-classic-editor.php', 'Yoast\\WP\\SEO\\Premium\\Integrations\\Third_Party\\Zapier_Trigger' => __DIR__ . '/../..' . '/src/integrations/third-party/zapier-trigger.php', 'Yoast\\WP\\SEO\\Premium\\Integrations\\Upgrade_Integration' => __DIR__ . '/../..' . '/src/integrations/upgrade-integration.php', 'Yoast\\WP\\SEO\\Premium\\Integrations\\User_Profile_Integration' => __DIR__ . '/../..' . '/src/integrations/user-profile-integration.php', 'Yoast\\WP\\SEO\\Premium\\Integrations\\Watchers\\Premium_Option_Wpseo_Watcher' => __DIR__ . '/../..' . '/src/integrations/watchers/premium-option-wpseo-watcher.php', 'Yoast\\WP\\SEO\\Premium\\Integrations\\Watchers\\Zapier_APIKey_Reset_Watcher' => __DIR__ . '/../..' . '/src/integrations/watchers/zapier-apikey-reset-watcher.php', 'Yoast\\WP\\SEO\\Premium\\Main' => __DIR__ . '/../..' . '/src/main.php', 'Yoast\\WP\\SEO\\Premium\\Repositories\\Prominent_Words_Repository' => __DIR__ . '/../..' . '/src/repositories/prominent-words-repository.php', 'Yoast\\WP\\SEO\\Premium\\Routes\\Link_Suggestions_Route' => __DIR__ . '/../..' . '/src/routes/link-suggestions-route.php', 'Yoast\\WP\\SEO\\Premium\\Routes\\Prominent_Words_Route' => __DIR__ . '/../..' . '/src/routes/prominent-words-route.php', 'Yoast\\WP\\SEO\\Premium\\Routes\\Workouts_Route' => __DIR__ . '/../..' . '/src/routes/workouts-route.php', 'Yoast\\WP\\SEO\\Premium\\Routes\\Zapier_Route' => __DIR__ . '/../..' . '/src/routes/zapier-route.php', 'Yoast\\WP\\SEO\\Premium\\Surfaces\\Helpers_Surface' => __DIR__ . '/../..' . '/src/surfaces/helpers-surface.php', 'Yoast\\WP\\SEO\\Premium\\WordPress\\Wrapper' => __DIR__ . '/../..' . '/src/wordpress/wrapper.php', 'Yoast\\WP\\SEO\\Presenters\\Admin\\Prominent_Words\\Indexation_List_Item_Presenter' => __DIR__ . '/../..' . '/src/deprecated/presenters/indexation-list-item-presenter.php', 'Yoast\\WP\\SEO\\Presenters\\Admin\\Prominent_Words\\Indexation_Modal_Presenter' => __DIR__ . '/../..' . '/src/deprecated/presenters/indexation-modal-presenter.php', 'Yoast\\WP\\SEO\\Presenters\\Prominent_Words_Notification' => __DIR__ . '/../..' . '/src/deprecated/presenters/prominent-words-notification.php', 'Yoast\\WP\\SEO\\Repositories\\Prominent_Words_Repository' => __DIR__ . '/../..' . '/src/deprecated/repositories/renamed-classes.php', 'Yoast\\WP\\SEO\\Routes\\Link_Suggestions_Route' => __DIR__ . '/../..' . '/src/deprecated/routes/renamed-classes.php', 'Yoast\\WP\\SEO\\Routes\\Prominent_Words_Route' => __DIR__ . '/../..' . '/src/deprecated/routes/renamed-classes.php', 'Yoast\\WP\\SEO\\Routes\\Zapier_Route' => __DIR__ . '/../..' . '/src/deprecated/routes/renamed-classes.php', 'Yoast\\WP\\SEO\\Schema_Templates\\Block_Patterns\\Block_Pattern' => __DIR__ . '/../..' . '/src/schema-templates/block-patterns/block-pattern.php', 'Yoast\\WP\\SEO\\Schema_Templates\\Block_Patterns\\Block_Pattern_Categories' => __DIR__ . '/../..' . '/src/schema-templates/block-patterns/block-pattern-categories.php', 'Yoast\\WP\\SEO\\Schema_Templates\\Block_Patterns\\Block_Pattern_Keywords' => __DIR__ . '/../..' . '/src/schema-templates/block-patterns/block-pattern-keywords.php', 'Yoast\\WP\\SEO\\Schema_Templates\\Block_Patterns\\Job_Posting_Base_Pattern' => __DIR__ . '/../..' . '/src/schema-templates/block-patterns/job-posting-base-pattern.php', 'Yoast\\WP\\SEO\\Schema_Templates\\Block_Patterns\\Job_Posting_One_Column' => __DIR__ . '/../..' . '/src/schema-templates/block-patterns/job-posting-one-column.php', 'Yoast\\WP\\SEO\\Schema_Templates\\Block_Patterns\\Job_Posting_Two_Columns' => __DIR__ . '/../..' . '/src/schema-templates/block-patterns/job-posting-two-columns.php', ); public static function getInitializer(ClassLoader $loader) { return \Closure::bind(function () use ($loader) { $loader->prefixLengthsPsr4 = ComposerStaticInite554042ed15084fc810f35bc3b27a9ba::$prefixLengthsPsr4; $loader->prefixDirsPsr4 = ComposerStaticInite554042ed15084fc810f35bc3b27a9ba::$prefixDirsPsr4; $loader->classMap = ComposerStaticInite554042ed15084fc810f35bc3b27a9ba::$classMap; }, null, ClassLoader::class); } }