WC_Product_Usage{}WC 1.0

Product usagee

No Hooks.

Usage

$WC_Product_Usage = new WC_Product_Usage();
// use class methods

Methods

  1. private static get_product_usage_restriction_rule( int $product_id )
  2. public static get_rules_for_product( int $product_id )
  3. protected static includes()
  4. public static load()

WC_Product_Usage{} code WC 9.4.2

class WC_Product_Usage {
	/**
	 * Load Product Usage class.
	 *
	 * @since 9.3.0
	 */
	public static function load() {
		self::includes();
	}

	/**
	 * Include support files.
	 *
	 * @since 9.3.0
	 */
	protected static function includes() {
		require_once WC_ABSPATH . 'includes/product-usage/class-wc-product-usage-rule-set.php';
	}

	/**
	 * Get product usage rule if it needs to be applied to the given product id.
	 *
	 * @param int $product_id product id to get feature restriction rules.
	 * @since 9.3.0
	 */
	public static function get_rules_for_product( int $product_id ): ?WC_Product_Usage_Rule_Set {
		$rules = self::get_product_usage_restriction_rule( $product_id );
		if ( null === $rules ) {
			return null;
		}

		// When there is no subscription for the product, restrict usage.
		if ( ! WC_Helper::has_product_subscription( $product_id ) ) {
			return new WC_Product_Usage_Rule_Set( $rules );
		}

		$subscriptions = wp_list_filter( WC_Helper::get_installed_subscriptions(), array( 'product_id' => $product_id ) );
		if ( empty( $subscriptions ) ) {
			return new WC_Product_Usage_Rule_Set( $rules );
		}

		// Product should only have a single connected subscription on current store.
		$product_subscription = current( $subscriptions );
		if ( $product_subscription['expired'] ) {
			return new WC_Product_Usage_Rule_Set( $rules );
		}

		return null;
	}

	/**
	 * Get the product usage rule for a product.
	 *
	 * @param int $product_id product id to get feature restriction rules.
	 * @return array|null
	 * @since 9.3.0
	 */
	private static function get_product_usage_restriction_rule( int $product_id ): ?array {
		$rules = WC_Helper::get_product_usage_notice_rules();
		if ( empty( $rules['restricted_products'][ $product_id ] ) ) {
			return null;
		}

		return $rules['restricted_products'][ $product_id ];
	}
}