Warning: Class "Automattic\WooCommerce\Internal\Admin\MobileAppBanner" not found in /htdocs/wp-content/plugins/woocommerce/src/Admin/Features/Features.php on line 375
$data = get_file_data( $file, $default_headers ); // We want to store the relative path in the cache, so we can use it later to register the pattern. $data['source'] = str_replace( $this->patterns_path . '/', '', $file ); $patterns[] = $data; } $this->set_pattern_cache( $patterns ); return $patterns; } /** * Gets block pattern cache. * * @return array|false Returns an array of patterns if cache is found, otherwise false. */ private function get_pattern_cache() { $pattern_data = get_site_transient( 'woocommerce_blocks_patterns' ); if ( is_array( $pattern_data ) && WOOCOMMERCE_VERSION === $pattern_data['version'] ) { return $pattern_data['patterns']; } return false; } /** * Sets block pattern cache. * * @param array $patterns Block patterns data to set in cache. */ private function set_pattern_cache( array $patterns ) { $pattern_data = array( 'version' => WOOCOMMERCE_VERSION, 'patterns' => $patterns, ); set_site_transient( 'woocommerce_blocks_patterns', $pattern_data, MONTH_IN_SECONDS ); } /** * Register patterns from the Patterns Toolkit. * * @return void */ public function register_ptk_patterns() { // Only if the user has allowed tracking, we register the patterns from the PTK. $allow_tracking = 'yes' === get_option( 'woocommerce_allow_tracking' ); if ( ! $allow_tracking ) { return; } // The most efficient way to check for an existing action is to use `as_has_scheduled_action`, but in unusual // cases where another plugin has loaded a very old version of Action Scheduler, it may not be available to us. $has_scheduled_action = function_exists( 'as_has_scheduled_action' ) ? 'as_has_scheduled_action' : 'as_next_scheduled_action'; $patterns = $this->ptk_patterns_store->get_patterns(); if ( empty( $patterns ) || ! is_array( $patterns ) ) { // Only log once per day by using a transient. $transient_key = 'wc_ptk_pattern_store_warning'; // By only logging when patterns are empty and no fetch is scheduled, // we ensure that warnings are only generated in genuinely problematic situations, // such as when the pattern fetching mechanism has failed entirely. if ( ! get_transient( $transient_key ) && ! call_user_func( $has_scheduled_action, 'fetch_patterns' ) ) { wc_get_logger()->warning( __( 'Empty patterns received from the PTK Pattern Store', 'woocommerce' ), ); // Set the transient to true to indicate that the warning has been logged in the current day. set_transient( $transient_key, true, DAY_IN_SECONDS ); } return; } $patterns = $this->parse_categories( $patterns ); foreach ( $patterns as $pattern ) { $pattern['slug'] = $pattern['name']; $pattern['content'] = $pattern['html']; $this->pattern_registry->register_block_pattern( $pattern['ID'], $pattern ); } } /** * Parse prefixed categories from the PTK patterns into the actual WooCommerce categories. * * @param array $patterns The patterns to parse. * @return array The parsed patterns. */ private function parse_categories( array $patterns ) { return array_map( function ( $pattern ) { if ( ! isset( $pattern['categories'] ) ) { $pattern['categories'] = array(); } $values = array_values( $pattern['categories'] ); foreach ( $values as $value ) { if ( ! isset( $value['title'] ) || ! isset( $value['slug'] ) ) { $pattern['categories'] = array(); } } $pattern['categories'] = array_map( function ( $category ) { foreach ( self::CATEGORIES_PREFIXES as $prefix ) { if ( strpos( $category['title'], $prefix ) !== false ) { $parsed_category = str_replace( $prefix, '', $category['title'] ); $parsed_category = str_replace( '_', ' ', $parsed_category ); $category['title'] = ucfirst( $parsed_category ); } } return $category; }, $pattern['categories'] ); return $pattern; }, $patterns ); } }
Fatal error: Uncaught Error: Class "Automattic\WooCommerce\Blocks\BlockPatterns" not found in /htdocs/wp-content/plugins/woocommerce/src/Blocks/Domain/Bootstrap.php:367 Stack trace: #0 /htdocs/wp-content/plugins/woocommerce/src/Blocks/Registry/AbstractDependencyType.php(42): Automattic\WooCommerce\Blocks\Domain\Bootstrap->Automattic\WooCommerce\Blocks\Domain\{closure}(Object(Automattic\WooCommerce\Blocks\Registry\Container)) #1 /htdocs/wp-content/plugins/woocommerce/src/Blocks/Registry/SharedType.php(28): Automattic\WooCommerce\Blocks\Registry\AbstractDependencyType->resolve_value(Object(Automattic\WooCommerce\Blocks\Registry\Container)) #2 /htdocs/wp-content/plugins/woocommerce/src/Blocks/Registry/Container.php(96): Automattic\WooCommerce\Blocks\Registry\SharedType->get(Object(Automattic\WooCommerce\Blocks\Registry\Container)) #3 /htdocs/wp-content/plugins/woocommerce/src/Blocks/Domain/Bootstrap.php(150): Automattic\WooCommerce\Blocks\Registry\Container->get('Automattic\\WooC...') #4 /htdocs/wp-content/plugins/woocommerce/src/Blocks/Domain/Bootstrap.php(72): Automattic\WooCommerce\Blocks\Domain\Bootstrap->init() #5 /htdocs/wp-content/plugins/woocommerce/src/Blocks/Package.php(106): Automattic\WooCommerce\Blocks\Domain\Bootstrap->__construct(Object(Automattic\WooCommerce\Blocks\Registry\Container)) #6 /htdocs/wp-content/plugins/woocommerce/src/Blocks/Registry/AbstractDependencyType.php(42): Automattic\WooCommerce\Blocks\Package::Automattic\WooCommerce\Blocks\{closure}(Object(Automattic\WooCommerce\Blocks\Registry\Container)) #7 /htdocs/wp-content/plugins/woocommerce/src/Blocks/Registry/SharedType.php(28): Automattic\WooCommerce\Blocks\Registry\AbstractDependencyType->resolve_value(Object(Automattic\WooCommerce\Blocks\Registry\Container)) #8 /htdocs/wp-content/plugins/woocommerce/src/Blocks/Registry/Container.php(96): Automattic\WooCommerce\Blocks\Registry\SharedType->get(Object(Automattic\WooCommerce\Blocks\Registry\Container)) #9 /htdocs/wp-content/plugins/woocommerce/src/Blocks/Package.php(44): Automattic\WooCommerce\Blocks\Registry\Container->get('Automattic\\WooC...') #10 [internal function]: Automattic\WooCommerce\Blocks\Package::init() #11 /htdocs/wp-content/plugins/woocommerce/src/Packages.php(291): call_user_func(Array) #12 /htdocs/wp-content/plugins/woocommerce/src/Packages.php(89): Automattic\WooCommerce\Packages::initialize_packages() #13 /htdocs/wp-includes/class-wp-hook.php(341): Automattic\WooCommerce\Packages::on_init('') #14 /htdocs/wp-includes/class-wp-hook.php(365): WP_Hook->apply_filters(NULL, Array) #15 /htdocs/wp-includes/plugin.php(522): WP_Hook->do_action(Array) #16 /htdocs/wp-settings.php(593): do_action('plugins_loaded') #17 /htdocs/wp-config.php(116): require_once('/htdocs/wp-sett...') #18 /htdocs/wp-load.php(50): require_once('/htdocs/wp-conf...') #19 /htdocs/wp-blog-header.php(13): require_once('/htdocs/wp-load...') #20 /htdocs/index.php(17): require('/htdocs/wp-blog...') #21 {main} thrown in /htdocs/wp-content/plugins/woocommerce/src/Blocks/Domain/Bootstrap.php on line 367