Automattic\WooCommerce\Internal\Utilities

ProductUtil::delete_product_specific_transients_for_productspublicWC 1.0

Delete the transients related to a set of products. If a product is a variation, delete the transients for the parent too.

Method of the class: ProductUtil{}

No Hooks.

Returns

null. Nothing (null).

Usage

$ProductUtil = new ProductUtil();
$ProductUtil->delete_product_specific_transients_for_products( $products_or_ids );
$products_or_ids(array) (required)
Products or product ids.

ProductUtil::delete_product_specific_transients_for_products() code WC 11.0.1

public function delete_product_specific_transients_for_products( array $products_or_ids ) {
	$product_ids = array();

	foreach ( $products_or_ids as $product_or_id ) {
		$parent_id = 0;
		if ( $product_or_id instanceof \WC_Product ) {
			$product    = $product_or_id;
			$product_id = $product->get_id();
		} else {
			$product_id = $product_or_id;
			$product    = wc_get_product( $product_id );
		}

		if ( $product instanceof \WC_Product_Variation ) {
			$parent_id = $product->get_parent_id();
		}

		$product_ids[] = $product_id;
		if ( $parent_id ) {
			$product_ids[] = $parent_id;
		}
	}

	$product_ids = array_unique( array_filter( array_map( 'absint', $product_ids ) ) );

	$product_specific_transient_names = array(
		'wc_product_children_',
		'wc_var_prices_',
		'wc_related_',
		'wc_child_has_weight_',
		'wc_child_has_dimensions_',
	);

	foreach ( $product_ids as $product_id ) {
		foreach ( $product_specific_transient_names as $transient ) {
			delete_transient( $transient . $product_id );
		}
	}
}