This commit is contained in:
Prospress Inc
2018-07-19 12:14:08 +02:00
committed by Remco Tolsma
parent 5fb62b0e6a
commit 1039aec2d9
126 changed files with 13546 additions and 4169 deletions

View File

@@ -133,7 +133,7 @@ class WC_Product_Variable_Subscription_Legacy extends WC_Product_Variable_Subscr
$children = array_keys( $this->prices_array[ $price_hash ]['price'] );
sort( $children );
$min_max_data = wcs_get_min_max_variation_data( $this, $children );
$min_max_data = $this->get_min_and_max_variation_data( $children );
$min_variation_id = $min_max_data['min']['variation_id'];
$max_variation_id = $min_max_data['max']['variation_id'];
@@ -223,6 +223,8 @@ class WC_Product_Variable_Subscription_Legacy extends WC_Product_Variable_Subscr
$min_max_data = wcs_get_min_max_variation_data( $this, $child_variation_ids );
$this->set_min_and_max_variation_data( $min_max_data, $child_variation_ids );
update_post_meta( $this->id, '_min_price_variation_id', $min_max_data['min']['variation_id'] );
update_post_meta( $this->id, '_max_price_variation_id', $min_max_data['max']['variation_id'] );
@@ -378,4 +380,56 @@ class WC_Product_Variable_Subscription_Legacy extends WC_Product_Variable_Subscr
public function get_default_attributes( $context = 'view' ) {
return $this->get_variation_default_attributes();
}
/**
* Set the product's min and max variation data.
*
* @param array $min_and_max_data The min and max variation data returned by @see wcs_get_min_max_variation_data(). Optional.
* @param array $variation_ids The visible child variation IDs. Optional. By default this value be generated by @see WC_Product_Variable->get_children( true ).
* @since 2.3.0
*/
public function set_min_and_max_variation_data( $min_and_max_data = array(), $variation_ids = array() ) {
if ( empty( $variation_ids ) ) {
$variation_ids = $this->get_children( true );
}
if ( empty( $min_and_max_data ) ) {
$min_and_max_data = wcs_get_min_max_variation_data( $this, $variation_ids );
}
update_post_meta( $this->id, '_min_max_variation_data', $min_and_max_data, true );
update_post_meta( $this->id, '_min_max_variation_ids_hash', $this->get_variation_ids_hash( $variation_ids ), true );
}
/**
* Get the min and max variation data.
*
* This is a wrapper for @see wcs_get_min_max_variation_data() but to avoid calling
* that resource intensive function multiple times per request, check the value
* stored in meta or cached in memory before calling that function.
*
* @param array $variation_ids An array of variation IDs.
* @return array The variable product's min and max variation data.
* @since 2.3.0
*/
public function get_min_and_max_variation_data( $variation_ids ) {
$variation_ids_hash = $this->get_variation_ids_hash( $variation_ids );
// If this variable product has no min and max variation data, set it.
if ( ! metadata_exists( 'post', $this->id, '_min_max_variation_ids_hash' ) ) {
$this->set_min_and_max_variation_data();
}
if ( $variation_ids_hash === $this->get_meta( '_min_max_variation_ids_hash', true ) ) {
$min_and_max_variation_data = $this->get_meta( '_min_max_variation_data', true );
} elseif ( ! empty( $this->min_max_variation_data[ $variation_ids_hash ] ) ) {
$min_and_max_variation_data = $this->min_max_variation_data[ $variation_ids_hash ];
} else {
$min_and_max_variation_data = wcs_get_min_max_variation_data( $this, $variation_ids );
$this->min_max_variation_data[ $variation_ids_hash ] = $min_and_max_variation_data;
}
return $min_and_max_variation_data;
}
}