Automattic\WooCommerce\Internal\Admin\Onboarding

OnboardingProducts::get_product_data()public staticWC 1.0

Get dynamic product data from API.

Метод класса: OnboardingProducts{}

Хуков нет.

Возвращает

Массив.

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

$result = OnboardingProducts::get_product_data( $product_types );
$product_types(массив) (обязательный)
Array of product types.

Код OnboardingProducts::get_product_data() WC 8.7.0

public static function get_product_data( $product_types ) {
	$locale = get_user_locale();
	// Transient value is an array of product data keyed by locale.
	$transient_value      = get_transient( self::PRODUCT_DATA_TRANSIENT );
	$transient_value      = is_array( $transient_value ) ? $transient_value : array();
	$woocommerce_products = $transient_value[ $locale ] ?? false;

	if ( false === $woocommerce_products ) {
		$woocommerce_products = wp_remote_get(
			add_query_arg(
				array(
					'locale' => $locale,
				),
				'https://woocommerce.com/wp-json/wccom-extensions/1.0/search'
			),
			array(
				'user-agent' => 'WooCommerce/' . WC()->version . '; ' . get_bloginfo( 'url' ),
			)
		);
		if ( is_wp_error( $woocommerce_products ) ) {
			return $product_types;
		}
		$transient_value[ $locale ] = $woocommerce_products;
		set_transient( self::PRODUCT_DATA_TRANSIENT, $transient_value, DAY_IN_SECONDS );
	}

	$data         = json_decode( $woocommerce_products['body'] );
	$products     = array();
	$product_data = array();

	// Map product data by ID.
	if ( isset( $data ) && isset( $data->products ) ) {
		foreach ( $data->products as $product_datum ) {
			if ( isset( $product_datum->id ) ) {
				$products[ $product_datum->id ] = $product_datum;
			}
		}
	}

	// Loop over product types and append data.
	foreach ( $product_types as $key => $product_type ) {
		$product_data[ $key ] = $product_types[ $key ];

		if ( isset( $product_type['product'] ) && isset( $products[ $product_type['product'] ] ) ) {
			$price        = html_entity_decode( $products[ $product_type['product'] ]->price );
			$yearly_price = (float) str_replace( '$', '', $price );

			$product_data[ $key ]['yearly_price'] = $yearly_price;
			$product_data[ $key ]['description']  = $products[ $product_type['product'] ]->excerpt;
			$product_data[ $key ]['more_url']     = $products[ $product_type['product'] ]->link;
			$product_data[ $key ]['slug']         = strtolower( preg_replace( '~[^\pL\d]+~u', '-', $products[ $product_type['product'] ]->slug ) );
		}
	}

	return $product_data;
}