Add method to delete variations
This commit is contained in:
parent
b749b654bc
commit
8e7687b9fc
|
@ -28,17 +28,22 @@ class WC_Product_Variable_Data_Store_CPT extends WC_Product_Data_Store_CPT imple
|
||||||
parent::read_product_data( $product );
|
parent::read_product_data( $product );
|
||||||
|
|
||||||
// Set directly since individual data needs changed at the WC_Product_Variation level -- these datasets just pull.
|
// Set directly since individual data needs changed at the WC_Product_Variation level -- these datasets just pull.
|
||||||
$this->read_children( $product );
|
$children = $this->read_children( $product );
|
||||||
$this->read_variation_attributes( $product );
|
$variation_attributes = $this->read_variation_attributes( $product );
|
||||||
|
|
||||||
|
$product->set_children( $children['all'] );
|
||||||
|
$product->set_visible_children( $children['visible'] );
|
||||||
|
$product->set_variation_attributes( $variation_attributes );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads variation child IDs.
|
* Loads variation child IDs.
|
||||||
|
*
|
||||||
* @param WC_Product
|
* @param WC_Product
|
||||||
* @param bool $force_read True to bypass the transient.
|
* @param bool $force_read True to bypass the transient.
|
||||||
* @return WC_Product
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function read_children( &$product, $force_read = false ) {
|
private function read_children( &$product, $force_read = false ) {
|
||||||
$children_transient_name = 'wc_product_children_' . $product->get_id();
|
$children_transient_name = 'wc_product_children_' . $product->get_id();
|
||||||
$children = get_transient( $children_transient_name );
|
$children = get_transient( $children_transient_name );
|
||||||
|
|
||||||
|
@ -65,14 +70,17 @@ class WC_Product_Variable_Data_Store_CPT extends WC_Product_Data_Store_CPT imple
|
||||||
set_transient( $children_transient_name, $children, DAY_IN_SECONDS * 30 );
|
set_transient( $children_transient_name, $children, DAY_IN_SECONDS * 30 );
|
||||||
}
|
}
|
||||||
|
|
||||||
$product->set_children( wp_parse_id_list( (array) $children['all'] ) );
|
$children['all'] = wp_parse_id_list( (array) $children['all'] );
|
||||||
$product->set_visible_children( wp_parse_id_list( (array) $children['visible'] ) );
|
$children['visible'] = wp_parse_id_list( (array) $children['visible'] );
|
||||||
|
|
||||||
|
return $children;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads an array of attributes used for variations, as well as their possible values.
|
* Loads an array of attributes used for variations, as well as their possible values.
|
||||||
*
|
*
|
||||||
* @param WC_Product
|
* @param WC_Product
|
||||||
|
* @return array
|
||||||
*/
|
*/
|
||||||
private function read_variation_attributes( &$product ) {
|
private function read_variation_attributes( &$product ) {
|
||||||
global $wpdb;
|
global $wpdb;
|
||||||
|
@ -122,7 +130,7 @@ class WC_Product_Variable_Data_Store_CPT extends WC_Product_Data_Store_CPT imple
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$product->set_variation_attributes( $variation_attributes );
|
return $variation_attributes;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -328,7 +336,9 @@ class WC_Product_Variable_Data_Store_CPT extends WC_Product_Data_Store_CPT imple
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ( $changed ) {
|
if ( $changed ) {
|
||||||
$this->read_children( $product, true );
|
$children = $this->read_children( $product, true );
|
||||||
|
$product->set_children( $children['all'] );
|
||||||
|
$product->set_visible_children( $children['visible'] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -366,4 +376,22 @@ class WC_Product_Variable_Data_Store_CPT extends WC_Product_Data_Store_CPT imple
|
||||||
public function sync_stock_status( &$product ) {
|
public function sync_stock_status( &$product ) {
|
||||||
$product->set_stock_status( $product->child_is_in_stock() ? 'instock' : 'outofstock' );
|
$product->set_stock_status( $product->child_is_in_stock() ? 'instock' : 'outofstock' );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete variations of a product.
|
||||||
|
*
|
||||||
|
* @param WC_Product
|
||||||
|
* @since 2.7.0
|
||||||
|
*/
|
||||||
|
public function delete_variations( &$product ) {
|
||||||
|
$variations = $this->read_children( $product );
|
||||||
|
|
||||||
|
if ( ! empty( $variations['all'] ) ) {
|
||||||
|
foreach ( $variations['all'] as $variation_id ) {
|
||||||
|
wp_delete_post( $variation_id, true );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
delete_transient( 'wc_product_children_' . $product->get_id() );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,4 +61,11 @@ interface WC_Product_Variable_Data_Store_Interface {
|
||||||
* @param WC_Product|int $product
|
* @param WC_Product|int $product
|
||||||
*/
|
*/
|
||||||
public function sync_price( &$product );
|
public function sync_price( &$product );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete variations of a product.
|
||||||
|
*
|
||||||
|
* @param WC_Product
|
||||||
|
*/
|
||||||
|
public function delete_variations( &$product );
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue