Automattic\WooCommerce\Blocks\Utils

ProductDescriptionUtils{} │ WC 1.0

Product description utilities.

Хуков нет.

Использование

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

Методы

  1. public static guarded_format( \WC_Product $product, callable $format_callback )
  2. private static is_description_accessible( \WC_Product $product )

Код ProductDescriptionUtils{} WC 11.2.2

class ProductDescriptionUtils {

	/**
	 * Product IDs whose descriptions are currently being formatted.
	 *
	 * @var array<int, true>
	 */
	private static array $formatting_product_descriptions = array();

	/**
	 * Whether the current visitor can access a product's description.
	 *
	 * @param \WC_Product $product Product object.
	 * @return bool
	 */
	private static function is_description_accessible( \WC_Product $product ): bool {
		if ( post_password_required( $product->get_id() ) ) {
			return false;
		}

		$parent_id = $product->get_parent_id();

		return ! $parent_id || ! post_password_required( $parent_id );
	}

	/**
	 * Format an accessible product description while preventing same-product recursion.
	 *
	 * @param \WC_Product $product         Product object.
	 * @param callable    $format_callback Callback that formats the product description.
	 * @return string Formatted product description.
	 */
	public static function guarded_format( \WC_Product $product, callable $format_callback ): string {
		$product_id = $product->get_id();

		if ( ! self::is_description_accessible( $product ) || isset( self::$formatting_product_descriptions[ $product_id ] ) ) {
			return '';
		}

		self::$formatting_product_descriptions[ $product_id ] = true;

		try {
			$result = $format_callback();

			return is_string( $result ) ? $result : '';
		} finally {
			unset( self::$formatting_product_descriptions[ $product_id ] );
		}
	}
}