whoami7 - Manager
:
/
home
/
dataiclx
/
www
/
wp-content
/
plugins
/
woocommerce
/
src
/
Internal
/
Caches
/
Upload File:
files >> /home/dataiclx/www/wp-content/plugins/woocommerce/src/Internal/Caches/ProductCache.php
<?php declare( strict_types=1 ); namespace Automattic\WooCommerce\Internal\Caches; use Automattic\WooCommerce\Caching\ObjectCache; use WC_Product; /** * A class to cache Product objects. * * @since 10.5.0 */ class ProductCache extends ObjectCache { /** * Get the cache key and prefix to use for Products. * * @since 10.5.0 * * @return string */ public function get_object_type(): string { return 'product_objects'; } /** * Get the id of an object to be cached. * * @since 10.5.0 * * @param WC_Product $product The product to be cached. * * @return int The id of the object. */ protected function get_object_id( $product ) { return $product->get_id(); } /** * Validate an object before caching it. * * @since 10.5.0 * * @param WC_Product $product The product to validate. * * @return string[]|null An array of error messages, or null if the object is valid. */ protected function validate( $product ): ?array { if ( ! $product instanceof WC_Product ) { return array( 'The supplied product is not an instance of WC_Product' ); } return null; } /** * Add a product to the cache, or update an already cached product. * * Sets the clone mode to CACHE before storing to ensure meta IDs are preserved * when WordPress object cache clones the object. * * @since 10.5.0 * * @param WC_Product $product The product to be cached. * @param int|string|null $id Id of the product to be cached, if null, get_object_id will be used to get it. * @param int $expiration Expiration of the cached data in seconds from the current time, or DEFAULT_EXPIRATION to use the default value. * * @return bool True on success, false on error. * @throws \Automattic\WooCommerce\Caching\CacheException Invalid parameter, or null id was passed and get_object_id returns null too. */ public function set( $product, $id = null, int $expiration = self::DEFAULT_EXPIRATION ): bool { if ( null !== $id ) { $id = (int) $id; } $original_mode = $product->get_clone_mode(); $product->set_clone_mode( \WC_Data::CLONE_MODE_CACHE ); $result = parent::set( $product, $id, $expiration ); $product->set_clone_mode( $original_mode ); return $result; } /** * Remove a product from the cache. * * @since 10.5.0 * * @param int|string $id The id of the product to remove. * * @return bool True if the product is removed successfully, false otherwise. */ public function remove( $id ): bool { return parent::remove( (int) $id ); } /** * Retrieve a cached product, and if no product is cached with the given id, * try to get one via get_from_datastore callback and then cache it. * * After retrieval, resets the clone mode to DUPLICATE to maintain backward compatibility * for code that expects cloning to clear meta IDs. * * @since 10.5.0 * * @param int|string $id The id of the product to retrieve. * @param int $expiration Expiration of the cached data in seconds from the current time, used if a product is retrieved from datastore and cached. * @param callable|null $get_from_datastore_callback Optional callback to get the product if it's not cached, it must return a WC_Product or null. * * @return WC_Product|null Cached product, or null if it's not cached and can't be retrieved from datastore or via callback. * @throws \Automattic\WooCommerce\Caching\CacheException Invalid id parameter. */ public function get( $id, int $expiration = self::DEFAULT_EXPIRATION, ?callable $get_from_datastore_callback = null ): ?WC_Product { $id = (int) $id; $product = parent::get( $id, $expiration, $get_from_datastore_callback ); if ( $product instanceof WC_Product ) { $product->set_clone_mode( \WC_Data::CLONE_MODE_DUPLICATE ); return $product; } return null; } }
Copyright ©2021 || Defacer Indonesia