url(), PHP_URL_PATH ) ) ), 'template' => self::escape_pattern_string( trailingslashit( (string) wp_parse_url( get_stylesheet_directory_uri(), PHP_URL_PATH ) ) ), 'stylesheet' => self::escape_pattern_string( trailingslashit( (string) wp_parse_url( get_template_directory_uri(), PHP_URL_PATH ) ) ), ); } /** * Escapes a string for use in a URL pattern component. * * @since 6.8.0 * @see https://urlpattern.spec.whatwg.org/#escape-a-pattern-string * * @param string $str String to be escaped. * @return string String with backslashes added where required. */ private static function escape_pattern_string( string $str ): string { return addcslashes( $str, '+*?:{}()\\' ); } } ob_details->status ) { // On job error. return $this->on_job_error( $job_details, $item_url, $is_mobile, $item_type ); } // On job status 200. $job_state = $job_details->data->state; // For pending job status. if ( isset( $job_state ) && 'complete' !== $job_state ) { return $this->on_job_pending( $item_url, $item_type ); } // For successful job status. if ( isset( $job_state, $job_details->data->critical_path ) ) { return $this->on_job_success( $item_path, $item_url, $job_details->data->critical_path, $is_mobile, $item_type ); } return $this->on_job_error( $job_details, $item_url, $is_mobile, $item_type ); } /** * Process logic for job error. * * @since 3.6 * * @param object $job_details Job details object. * @param string $item_url Url for web page to be processed, used for error messages. * @param bool $is_mobile Bool identifier for is_mobile CPCSS generation. * @param string $item_type Optional. Type for this item if it's custom or specific type. Default: custom. * * @return WP_Error */ private function on_job_error( $job_details, $item_url, $is_mobile = false, $item_type = 'custom' ) { $this->data_manager->delete_cache_job_id( $item_url, $is_mobile ); if ( $is_mobile ) { $error = sprintf( // translators: %1$s = item URL or item type. __( 'Mobile Critical CSS for %1$s not generated.', 'rocket' ), ( 'custom' === $item_type ) ? $item_url : $item_type ); } else { $error = sprintf( // translators: %1$s = item URL or item type. __( 'Critical CSS for %1$s not generated.', 'rocket' ), ( 'custom' === $item_type ) ? $item_url : $item_type ); } if ( isset( $job_details->message ) ) { // translators: %1$s = error message. $error .= ' ' . sprintf( __( 'Error: %1$s', 'rocket' ), $job_details->message ); } return new WP_Error( 'cpcss_generation_failed', $error, [ 'status' => 400, ] ); } /** * Process logic for job pending status. * * @since 3.6 * * @param string $item_url Url for web page to be processed, used for error messages. * @param string $item_type Optional. Type for this item if it's custom or specific type. Default: custom. * * @return array */ private function on_job_pending( $item_url, $item_type = 'custom' ) { return [ 'code' => 'cpcss_generation_pending', 'message' => sprintf( // translators: %1$s = Item URL or item type. __( 'Critical CSS for %s in progress.', 'rocket' ), ( 'custom' === $item_type ) ? $item_url : $item_type ), ]; } /** * Process logic for job success status. * * @since 3.6 * * @param string $item_path Item Path for web page to be processed. * @param string $item_url Item Url for web page to be processed. * @param string $cpcss_code CPCSS Code to be saved. * @param bool $is_mobile Bool identifier for is_mobile CPCSS generation. * @param string $item_type Optional. Type for this item if it's custom or specific type. Default: custom. * * @return array|WP_Error */ private function on_job_success( $item_path, $item_url, $cpcss_code, $is_mobile = false, $item_type = 'custom' ) { // delete cache job_id for this item. $this->data_manager->delete_cache_job_id( $item_url, $is_mobile ); // save the generated CPCSS code into file. $saved = $this->data_manager->save_cpcss( $item_path, $cpcss_code, $item_url, $is_mobile, $item_type ); if ( is_wp_error( $saved ) ) { return $saved; } if ( $is_mobile ) { return [ 'code' => 'cpcss_generation_successful', 'message' => sprintf( // translators: %1$s = Item URL or item type. __( 'Mobile Critical CSS for %s generated.', 'rocket' ), ( 'custom' === $item_type ) ? $item_url : $item_type ), ]; } // Send the current status of job. return [ 'code' => 'cpcss_generation_successful', 'message' => sprintf( // translators: %1$s = Item URL or item type. __( 'Critical CSS for %s generated.', 'rocket' ), ( 'custom' === $item_type ) ? $item_url : $item_type ), ]; } /** * Process the login for CPCSS deletion. * * @param string $item_path Path for item to delete CPCSS code. * * @return array|WP_Error */ public function process_delete( $item_path ) { $deleted = $this->data_manager->delete_cpcss( $item_path ); if ( is_wp_error( $deleted ) ) { return $deleted; } return [ 'code' => 'success', 'message' => __( 'Critical CSS file deleted successfully.', 'rocket' ), ]; } /** * Process timeout action for CPCSS generation. * * @since 3.6 * * @param string $item_url URL for item to be used in error messages. * @param bool $is_mobile Bool identifier for is_mobile CPCSS generation. * @param string $item_type Optional. Type for this item if it's custom or specific type. Default: custom. * @return WP_Error */ private function process_timeout( $item_url, $is_mobile = false, $item_type = 'custom' ) { $this->data_manager->delete_cache_job_id( $item_url, $is_mobile ); if ( $is_mobile ) { return new WP_Error( 'cpcss_generation_timeout', sprintf( // translators: %1$s = Item URL or item type. __( 'Mobile Critical CSS for %1$s timeout. Please retry a little later.', 'rocket' ), ( 'custom' === $item_type ) ? $item_url : $item_type ), [ 'status' => 400, ] ); } return new WP_Error( 'cpcss_generation_timeout', sprintf( // translators: %1$s = Item URL or item type. __( 'Critical CSS for %1$s timeout. Please retry a little later.', 'rocket' ), ( 'custom' === $item_type ) ? $item_url : $item_type ), [ 'status' => 400, ] ); } }
Fatal error: Uncaught TypeError: WP_Rocket\Engine\CriticalPath\RESTWP::__construct(): Argument #1 ($cpcss_service) must be of type WP_Rocket\Engine\CriticalPath\ProcessorService, string given in /htdocs/le-blog.fr/wp-content/plugins/wp-rocket/inc/Engine/CriticalPath/RESTWP.php:51 Stack trace: #0 [internal function]: WP_Rocket\Engine\CriticalPath\RESTWP->__construct('WP_Rocket\\Engin...', Object(WP_Rocket\Admin\Options_Data)) #1 /htdocs/le-blog.fr/wp-content/plugins/wp-rocket/inc/Dependencies/League/Container/Definition/Definition.php(225): ReflectionClass->newInstanceArgs(Array) #2 /htdocs/le-blog.fr/wp-content/plugins/wp-rocket/inc/Dependencies/League/Container/Definition/Definition.php(181): WP_Rocket\Dependencies\League\Container\Definition\Definition->resolveClass('WP_Rocket\\Engin...') #3 /htdocs/le-blog.fr/wp-content/plugins/wp-rocket/inc/Dependencies/League/Container/Definition/Definition.php(160): WP_Rocket\Dependencies\League\Container\Definition\Definition->resolveNew() #4 /htdocs/le-blog.fr/wp-content/plugins/wp-rocket/inc/Dependencies/League/Container/Definition/DefinitionAggregate.php(79): WP_Rocket\Dependencies\League\Container\Definition\Definition->resolve() #5 /htdocs/le-blog.fr/wp-content/plugins/wp-rocket/inc/Dependencies/League/Container/Container.php(175): WP_Rocket\Dependencies\League\Container\Definition\DefinitionAggregate->resolve('rest_cpcss_wp_p...') #6 /htdocs/le-blog.fr/wp-content/plugins/wp-rocket/inc/Dependencies/League/Container/Container.php(118): WP_Rocket\Dependencies\League\Container\Container->resolve('rest_cpcss_wp_p...') #7 /htdocs/le-blog.fr/wp-content/plugins/wp-rocket/inc/Engine/CriticalPath/ServiceProvider.php(70): WP_Rocket\Dependencies\League\Container\Container->get('rest_cpcss_wp_p...') #8 /htdocs/le-blog.fr/wp-content/plugins/wp-rocket/inc/Dependencies/League/Container/ServiceProvider/ServiceProviderAggregate.php(71): WP_Rocket\Engine\CriticalPath\ServiceProvider->register() #9 /htdocs/le-blog.fr/wp-content/plugins/wp-rocket/inc/Dependencies/League/Container/Container.php(192): WP_Rocket\Dependencies\League\Container\ServiceProvider\ServiceProviderAggregate->register('critical_css_su...') #10 /htdocs/le-blog.fr/wp-content/plugins/wp-rocket/inc/Dependencies/League/Container/Container.php(118): WP_Rocket\Dependencies\League\Container\Container->resolve('critical_css_su...') #11 /htdocs/le-blog.fr/wp-content/plugins/wp-rocket/inc/Plugin.php(168): WP_Rocket\Dependencies\League\Container\Container->get('critical_css_su...') #12 /htdocs/le-blog.fr/wp-content/plugins/wp-rocket/inc/main.php(47): WP_Rocket\Plugin->load() #13 /htdocs/le-blog.fr/wp-includes/class-wp-hook.php(341): rocket_init('') #14 /htdocs/le-blog.fr/wp-includes/class-wp-hook.php(365): WP_Hook->apply_filters(NULL, Array) #15 /htdocs/le-blog.fr/wp-includes/plugin.php(522): WP_Hook->do_action(Array) #16 /htdocs/le-blog.fr/wp-settings.php(593): do_action('plugins_loaded') #17 /htdocs/le-blog.fr/wp-config.php(102): require_once('/htdocs/le-blog...') #18 /htdocs/le-blog.fr/wp-load.php(50): require_once('/htdocs/le-blog...') #19 /htdocs/le-blog.fr/wp-blog-header.php(13): require_once('/htdocs/le-blog...') #20 /htdocs/le-blog.fr/index.php(17): require('/htdocs/le-blog...') #21 {main} thrown in /htdocs/le-blog.fr/wp-content/plugins/wp-rocket/inc/Engine/CriticalPath/RESTWP.php on line 51