ird argument if method is `update` if ( 'update' === $method ) { $arguments[2] = $arguments[1]; } // set the key as the second argument $arguments[1] = $key; return call_user_func_array( [ $this, $method ], $arguments ); } /** * @param WC_Product $product * @param string $key * @param mixed $value * * @throws InvalidMeta If the meta key is invalid. */ public function update( WC_Product $product, string $key, $value ) { self::validate_meta_key( $key ); if ( isset( self::TYPES[ $key ] ) ) { if ( in_array( self::TYPES[ $key ], [ 'bool', 'boolean' ], true ) ) { $value = wc_bool_to_string( $value ); } else { settype( $value, self::TYPES[ $key ] ); } } $product->update_meta_data( $this->prefix_meta_key( $key ), $value ); $product->save_meta_data(); } /** * @param WC_Product $product * @param string $key * * @throws InvalidMeta If the meta key is invalid. */ public function delete( WC_Product $product, string $key ) { self::validate_meta_key( $key ); $product->delete_meta_data( $this->prefix_meta_key( $key ) ); $product->save_meta_data(); } /** * @param WC_Product $product * @param string $key * * @return mixed The value, or null if the meta key doesn't exist. * * @throws InvalidMeta If the meta key is invalid. */ public function get( WC_Product $product, string $key ) { self::validate_meta_key( $key ); $value = null; if ( $product->meta_exists( $this->prefix_meta_key( $key ) ) ) { $value = $product->get_meta( $this->prefix_meta_key( $key ), true ); if ( isset( self::TYPES[ $key ] ) && in_array( self::TYPES[ $key ], [ 'bool', 'boolean' ], true ) ) { $value = wc_string_to_bool( $value ); } } return $value; } /** * @param string $key * * @throws InvalidMeta If the meta key is invalid. */ protected static function validate_meta_key( string $key ) { if ( ! self::is_meta_key_valid( $key ) ) { do_action( 'woocommerce_gla_error', sprintf( 'Product meta key is invalid: %s', $key ), __METHOD__ ); throw InvalidMeta::invalid_key( $key ); } } /** * @param string $key * * @return bool Whether the meta key is valid. */ public static function is_meta_key_valid( string $key ): bool { return isset( self::TYPES[ $key ] ); } /** * Register a service. */ public function register(): void { add_filter( 'woocommerce_product_data_store_cpt_get_products_query', function ( array $query, array $query_vars ) { return $this->handle_query_vars( $query, $query_vars ); }, 10, 2 ); } /** * Handle the WooCommerce product's meta data query vars. * * @hooked handle_query_vars * * @param array $query Args for WP_Query. * @param array $query_vars Query vars from WC_Product_Query. * * @return array modified $query */ protected function handle_query_vars( array $query, array $query_vars ): array { if ( ! empty( $query_vars['meta_query'] ) ) { $meta_query = $this->sanitize_meta_query( $query_vars['meta_query'] ); if ( ! empty( $meta_query ) ) { $query['meta_query'] = array_merge( $query['meta_query'], $meta_query ); } } return $query; } /** * Ensure the 'meta_query' argument passed to self::handle_query_vars is well-formed. * * @param array $queries Array of meta query clauses. * * @return array Sanitized array of meta query clauses. */ protected function sanitize_meta_query( $queries ): array { $prefixed_valid_keys = array_map( [ $this, 'prefix_meta_key' ], array_keys( self::TYPES ) ); $clean_queries = []; if ( ! is_array( $queries ) ) { return $clean_queries; } foreach ( $queries as $key => $meta_query ) { if ( 'relation' !== $key && ! is_array( $meta_query ) ) { continue; } if ( 'relation' === $key && is_string( $meta_query ) ) { $clean_queries[ $key ] = $meta_query; // First-order clause. } elseif ( isset( $meta_query['key'] ) || isset( $meta_query['value'] ) ) { if ( in_array( $meta_query['key'], $prefixed_valid_keys, true ) ) { $clean_queries[ $key ] = $meta_query; } // Otherwise, it's a nested meta_query, so we recurse. } else { $cleaned_query = $this->sanitize_meta_query( $meta_query ); if ( ! empty( $cleaned_query ) ) { $clean_queries[ $key ] = $cleaned_query; } } } return $clean_queries; } /** * @param array $meta_queries * * @return array */ public function prefix_meta_query_keys( $meta_queries ): array { $updated_queries = []; if ( ! is_array( $meta_queries ) ) { return $updated_queries; } foreach ( $meta_queries as $key => $meta_query ) { // First-order clause. if ( 'relation' === $key && is_string( $meta_query ) ) { $updated_queries[ $key ] = $meta_query; // First-order clause. } elseif ( isset( $meta_query['key'] ) || isset( $meta_query['value'] ) ) { if ( self::is_meta_key_valid( $meta_query['key'] ) ) { $meta_query['key'] = $this->prefix_meta_key( $meta_query['key'] ); } } else { // Otherwise, it's a nested meta_query, so we recurse. $meta_query = $this->prefix_meta_query_keys( $meta_query ); } $updated_queries[ $key ] = $meta_query; } return $updated_queries; } /** * Returns all available meta keys. * * @return array */ public static function get_all_meta_keys(): array { return array_keys( self::TYPES ); } }
Warning: class_implements(): Class Automattic\WooCommerce\GoogleListingsAndAds\Product\ProductMetaHandler does not exist and could not be loaded in /htdocs/wp-content/plugins/google-listings-and-ads/src/Internal/DependencyManagement/AbstractServiceProvider.php on line 73

Warning: foreach() argument must be of type array|object, bool given in /htdocs/wp-content/plugins/google-listings-and-ads/src/Internal/DependencyManagement/AbstractServiceProvider.php on line 73

Warning: class_implements(): Class Automattic\WooCommerce\GoogleListingsAndAds\DB\Migration\Migration20211228T1640692399 does not exist and could not be loaded in /htdocs/wp-content/plugins/google-listings-and-ads/src/Exception/ValidateInterface.php on line 22

Fatal error: Uncaught TypeError: array_key_exists(): Argument #2 ($array) must be of type array, bool given in /htdocs/wp-content/plugins/google-listings-and-ads/src/Exception/ValidateInterface.php:23 Stack trace: #0 /htdocs/wp-content/plugins/google-listings-and-ads/src/Exception/ValidateInterface.php(23): array_key_exists('Automattic\\WooC...', false) #1 /htdocs/wp-content/plugins/google-listings-and-ads/src/Internal/DependencyManagement/DBServiceProvider.php(146): Automattic\WooCommerce\GoogleListingsAndAds\Internal\DependencyManagement\DBServiceProvider->validate_interface('Automattic\\WooC...', 'Automattic\\WooC...') #2 /htdocs/wp-content/plugins/google-listings-and-ads/src/Internal/DependencyManagement/DBServiceProvider.php(102): Automattic\WooCommerce\GoogleListingsAndAds\Internal\DependencyManagement\DBServiceProvider->share_migration('Automattic\\WooC...', 'Automattic\\WooC...', 'Automattic\\WooC...') #3 /htdocs/wp-content/plugins/google-listings-and-ads/vendor/league/container/src/ServiceProvider/ServiceProviderAggregate.php(102): Automattic\WooCommerce\GoogleListingsAndAds\Internal\DependencyManagement\DBServiceProvider->register() #4 /htdocs/wp-content/plugins/google-listings-and-ads/vendor/league/container/src/Container.php(172): Automattic\WooCommerce\GoogleListingsAndAds\Vendor\League\Container\ServiceProvider\ServiceProviderAggregate->register('db_table') #5 /htdocs/wp-content/plugins/google-listings-and-ads/vendor/league/container/src/Argument/ArgumentResolverTrait.php(45): Automattic\WooCommerce\GoogleListingsAndAds\Vendor\League\Container\Container->get('db_table') #6 [internal function]: Automattic\WooCommerce\GoogleListingsAndAds\Vendor\League\Container\Definition\Definition->Automattic\WooCommerce\GoogleListingsAndAds\Vendor\League\Container\Argument\{closure}('db_table') #7 /htdocs/wp-content/plugins/google-listings-and-ads/vendor/league/container/src/Argument/ArgumentResolverTrait.php(19): array_map(Object(Closure), Array) #8 /htdocs/wp-content/plugins/google-listings-and-ads/vendor/league/container/src/Definition/Definition.php(253): Automattic\WooCommerce\GoogleListingsAndAds\Vendor\League\Container\Definition\Definition->resolveArguments(Array) #9 /htdocs/wp-content/plugins/google-listings-and-ads/vendor/league/container/src/Definition/Definition.php(212): Automattic\WooCommerce\GoogleListingsAndAds\Vendor\League\Container\Definition\Definition->resolveClass('Automattic\\WooC...') #10 /htdocs/wp-content/plugins/google-listings-and-ads/vendor/league/container/src/Definition/DefinitionAggregate.php(94): Automattic\WooCommerce\GoogleListingsAndAds\Vendor\League\Container\Definition\Definition->resolve(false) #11 /htdocs/wp-content/plugins/google-listings-and-ads/vendor/league/container/src/Container.php(157): Automattic\WooCommerce\GoogleListingsAndAds\Vendor\League\Container\Definition\DefinitionAggregate->resolve('Automattic\\WooC...', false) #12 /htdocs/wp-content/plugins/google-listings-and-ads/vendor/league/container/src/Argument/ArgumentResolverTrait.php(45): Automattic\WooCommerce\GoogleListingsAndAds\Vendor\League\Container\Container->get('Automattic\\WooC...') #13 [internal function]: Automattic\WooCommerce\GoogleListingsAndAds\Vendor\League\Container\Definition\Definition->Automattic\WooCommerce\GoogleListingsAndAds\Vendor\League\Container\Argument\{closure}('Automattic\\WooC...') #14 /htdocs/wp-content/plugins/google-listings-and-ads/vendor/league/container/src/Argument/ArgumentResolverTrait.php(19): array_map(Object(Closure), Array) #15 /htdocs/wp-content/plugins/google-listings-and-ads/vendor/league/container/src/Definition/Definition.php(253): Automattic\WooCommerce\GoogleListingsAndAds\Vendor\League\Container\Definition\Definition->resolveArguments(Array) #16 /htdocs/wp-content/plugins/google-listings-and-ads/vendor/league/container/src/Definition/Definition.php(212): Automattic\WooCommerce\GoogleListingsAndAds\Vendor\League\Container\Definition\Definition->resolveClass('Automattic\\WooC...') #17 /htdocs/wp-content/plugins/google-listings-and-ads/vendor/league/container/src/Definition/DefinitionAggregate.php(106): Automattic\WooCommerce\GoogleListingsAndAds\Vendor\League\Container\Definition\Definition->resolve(false) #18 /htdocs/wp-content/plugins/google-listings-and-ads/vendor/league/container/src/Container.php(162): Automattic\WooCommerce\GoogleListingsAndAds\Vendor\League\Container\Definition\DefinitionAggregate->resolveTagged('Automattic\\WooC...', false) #19 /htdocs/wp-content/plugins/google-listings-and-ads/vendor/league/container/src/Argument/ArgumentResolverTrait.php(45): Automattic\WooCommerce\GoogleListingsAndAds\Vendor\League\Container\Container->get('Automattic\\WooC...') #20 [internal function]: Automattic\WooCommerce\GoogleListingsAndAds\Vendor\League\Container\Definition\Definition->Automattic\WooCommerce\GoogleListingsAndAds\Vendor\League\Container\Argument\{closure}('Automattic\\WooC...') #21 /htdocs/wp-content/plugins/google-listings-and-ads/vendor/league/container/src/Argument/ArgumentResolverTrait.php(19): array_map(Object(Closure), Array) #22 /htdocs/wp-content/plugins/google-listings-and-ads/vendor/league/container/src/Definition/Definition.php(237): Automattic\WooCommerce\GoogleListingsAndAds\Vendor\League\Container\Definition\Definition->resolveArguments(Array) #23 /htdocs/wp-content/plugins/google-listings-and-ads/vendor/league/container/src/Definition/Definition.php(198): Automattic\WooCommerce\GoogleListingsAndAds\Vendor\League\Container\Definition\Definition->resolveCallable(Object(Closure)) #24 /htdocs/wp-content/plugins/google-listings-and-ads/vendor/league/container/src/Definition/DefinitionAggregate.php(106): Automattic\WooCommerce\GoogleListingsAndAds\Vendor\League\Container\Definition\Definition->resolve(false) #25 /htdocs/wp-content/plugins/google-listings-and-ads/vendor/league/container/src/Container.php(162): Automattic\WooCommerce\GoogleListingsAndAds\Vendor\League\Container\Definition\DefinitionAggregate->resolveTagged('Automattic\\WooC...', false) #26 /htdocs/wp-content/plugins/google-listings-and-ads/vendor/league/container/src/Container.php(178): Automattic\WooCommerce\GoogleListingsAndAds\Vendor\League\Container\Container->get('Automattic\\WooC...', false) #27 /htdocs/wp-content/plugins/google-listings-and-ads/src/Container.php(90): Automattic\WooCommerce\GoogleListingsAndAds\Vendor\League\Container\Container->get('Automattic\\WooC...') #28 /htdocs/wp-content/plugins/google-listings-and-ads/src/Infrastructure/GoogleListingsAndAdsPlugin.php(130): Automattic\WooCommerce\GoogleListingsAndAds\Container->get('Automattic\\WooC...') #29 /htdocs/wp-content/plugins/google-listings-and-ads/src/Infrastructure/GoogleListingsAndAdsPlugin.php(91): Automattic\WooCommerce\GoogleListingsAndAds\Infrastructure\GoogleListingsAndAdsPlugin->maybe_register_services() #30 /htdocs/wp-includes/class-wp-hook.php(324): Automattic\WooCommerce\GoogleListingsAndAds\Infrastructure\GoogleListingsAndAdsPlugin->Automattic\WooCommerce\GoogleListingsAndAds\Infrastructure\{closure}('') #31 /htdocs/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters(NULL, Array) #32 /htdocs/wp-includes/plugin.php(517): WP_Hook->do_action(Array) #33 /htdocs/wp-settings.php(559): do_action('plugins_loaded') #34 /htdocs/wp-config.php(85): require_once('/htdocs/wp-sett...') #35 /htdocs/wp-load.php(50): require_once('/htdocs/wp-conf...') #36 /htdocs/wp-blog-header.php(13): require_once('/htdocs/wp-load...') #37 /htdocs/index.php(17): require('/htdocs/wp-blog...') #38 {main} thrown in /htdocs/wp-content/plugins/google-listings-and-ads/src/Exception/ValidateInterface.php on line 23