WC_Product_Variation_Data_Store_CPT::read_product_data()protectedWC 3.0.0

Read post data.

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

Хуков нет.

Возвращает

null. Ничего (null).

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

// protected - в коде основоного (родительского) или дочернего класса
$result = $this->read_product_data( $product );
$product(WC_Product_Variation) (обязательный) (передается по ссылке — &)
Product object.

Список изменений

С версии 3.0.0 Введена.

Код WC_Product_Variation_Data_Store_CPT::read_product_data() WC 8.6.1

protected function read_product_data( &$product ) {
	$id = $product->get_id();

	$product->set_props(
		array(
			'description'       => get_post_meta( $id, '_variation_description', true ),
			'regular_price'     => get_post_meta( $id, '_regular_price', true ),
			'sale_price'        => get_post_meta( $id, '_sale_price', true ),
			'date_on_sale_from' => get_post_meta( $id, '_sale_price_dates_from', true ),
			'date_on_sale_to'   => get_post_meta( $id, '_sale_price_dates_to', true ),
			'manage_stock'      => get_post_meta( $id, '_manage_stock', true ),
			'stock_status'      => get_post_meta( $id, '_stock_status', true ),
			'low_stock_amount'  => get_post_meta( $id, '_low_stock_amount', true ),
			'shipping_class_id' => current( $this->get_term_ids( $id, 'product_shipping_class' ) ),
			'virtual'           => get_post_meta( $id, '_virtual', true ),
			'downloadable'      => get_post_meta( $id, '_downloadable', true ),
			'gallery_image_ids' => array_filter( explode( ',', get_post_meta( $id, '_product_image_gallery', true ) ) ),
			'download_limit'    => get_post_meta( $id, '_download_limit', true ),
			'download_expiry'   => get_post_meta( $id, '_download_expiry', true ),
			'image_id'          => get_post_thumbnail_id( $id ),
			'backorders'        => get_post_meta( $id, '_backorders', true ),
			'sku'               => get_post_meta( $id, '_sku', true ),
			'stock_quantity'    => get_post_meta( $id, '_stock', true ),
			'weight'            => get_post_meta( $id, '_weight', true ),
			'length'            => get_post_meta( $id, '_length', true ),
			'width'             => get_post_meta( $id, '_width', true ),
			'height'            => get_post_meta( $id, '_height', true ),
			'tax_class'         => ! metadata_exists( 'post', $id, '_tax_class' ) ? 'parent' : get_post_meta( $id, '_tax_class', true ),
		)
	);

	if ( $product->is_on_sale( 'edit' ) ) {
		$product->set_price( $product->get_sale_price( 'edit' ) );
	} else {
		$product->set_price( $product->get_regular_price( 'edit' ) );
	}

	$parent_object   = get_post( $product->get_parent_id() );
	$terms           = get_the_terms( $product->get_parent_id(), 'product_visibility' );
	$term_names      = is_array( $terms ) ? wp_list_pluck( $terms, 'name' ) : array();
	$exclude_search  = in_array( 'exclude-from-search', $term_names, true );
	$exclude_catalog = in_array( 'exclude-from-catalog', $term_names, true );

	if ( $exclude_search && $exclude_catalog ) {
		$catalog_visibility = 'hidden';
	} elseif ( $exclude_search ) {
		$catalog_visibility = 'catalog';
	} elseif ( $exclude_catalog ) {
		$catalog_visibility = 'search';
	} else {
		$catalog_visibility = 'visible';
	}

	$product->set_parent_data(
		array(
			'title'              => $parent_object ? $parent_object->post_title : '',
			'status'             => $parent_object ? $parent_object->post_status : '',
			'sku'                => get_post_meta( $product->get_parent_id(), '_sku', true ),
			'manage_stock'       => get_post_meta( $product->get_parent_id(), '_manage_stock', true ),
			'backorders'         => get_post_meta( $product->get_parent_id(), '_backorders', true ),
			'stock_quantity'     => wc_stock_amount( get_post_meta( $product->get_parent_id(), '_stock', true ) ),
			'weight'             => get_post_meta( $product->get_parent_id(), '_weight', true ),
			'length'             => get_post_meta( $product->get_parent_id(), '_length', true ),
			'width'              => get_post_meta( $product->get_parent_id(), '_width', true ),
			'height'             => get_post_meta( $product->get_parent_id(), '_height', true ),
			'tax_class'          => get_post_meta( $product->get_parent_id(), '_tax_class', true ),
			'shipping_class_id'  => absint( current( $this->get_term_ids( $product->get_parent_id(), 'product_shipping_class' ) ) ),
			'image_id'           => get_post_thumbnail_id( $product->get_parent_id() ),
			'purchase_note'      => get_post_meta( $product->get_parent_id(), '_purchase_note', true ),
			'catalog_visibility' => $catalog_visibility,
		)
	);

	// Pull data from the parent when there is no user-facing way to set props.
	$product->set_sold_individually( get_post_meta( $product->get_parent_id(), '_sold_individually', true ) );
	$product->set_tax_status( get_post_meta( $product->get_parent_id(), '_tax_status', true ) );
	$product->set_cross_sell_ids( get_post_meta( $product->get_parent_id(), '_crosssell_ids', true ) );
}