WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru
функция не описана

WC_Admin_Post_Types::bulk_edit_save() WC 1.0

Bulk edit.

Это метод класса: WC_Admin_Post_Types

Возвращает

Null. Ничего.

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

$WC_Admin_Post_Types = new WC_Admin_Post_Types();
$var = $WC_Admin_Post_Types->bulk_edit_save( $post_id, $product );
$post_id(число) (обязательный)
Post ID being saved.
$product(WC_Product) (обязательный)
Product object.

Код WC Admin Post Types::bulk edit save: woocommerce/includes/admin/class-wc-admin-post-types.php WC 3.9.0

<?php
public function bulk_edit_save( $post_id, $product ) {
	$data_store        = $product->get_data_store();
	$old_regular_price = $product->get_regular_price();
	$old_sale_price    = $product->get_sale_price();
	$data              = wp_unslash( $_REQUEST ); // WPCS: input var ok, CSRF ok.

	if ( ! empty( $_REQUEST['change_weight'] ) && isset( $_REQUEST['_weight'] ) ) { // WPCS: input var ok, sanitization ok.
		$product->set_weight( wc_clean( wp_unslash( $_REQUEST['_weight'] ) ) ); // WPCS: input var ok, sanitization ok.
	}

	if ( ! empty( $_REQUEST['change_dimensions'] ) ) { // WPCS: input var ok, sanitization ok.
		if ( isset( $_REQUEST['_length'] ) ) { // WPCS: input var ok, sanitization ok.
			$product->set_length( wc_clean( wp_unslash( $_REQUEST['_length'] ) ) ); // WPCS: input var ok, sanitization ok.
		}
		if ( isset( $_REQUEST['_width'] ) ) { // WPCS: input var ok, sanitization ok.
			$product->set_width( wc_clean( wp_unslash( $_REQUEST['_width'] ) ) ); // WPCS: input var ok, sanitization ok.
		}
		if ( isset( $_REQUEST['_height'] ) ) { // WPCS: input var ok, sanitization ok.
			$product->set_height( wc_clean( wp_unslash( $_REQUEST['_height'] ) ) ); // WPCS: input var ok, sanitization ok.
		}
	}

	if ( ! empty( $_REQUEST['_tax_status'] ) ) { // WPCS: input var ok, sanitization ok.
		$product->set_tax_status( wc_clean( $_REQUEST['_tax_status'] ) ); // WPCS: input var ok, sanitization ok.
	}

	if ( ! empty( $_REQUEST['_tax_class'] ) ) { // WPCS: input var ok, sanitization ok.
		$tax_class = wc_clean( wp_unslash( $_REQUEST['_tax_class'] ) ); // WPCS: input var ok, sanitization ok.
		if ( 'standard' === $tax_class ) {
			$tax_class = '';
		}
		$product->set_tax_class( $tax_class );
	}

	if ( ! empty( $_REQUEST['_shipping_class'] ) ) { // WPCS: input var ok, sanitization ok.
		if ( '_no_shipping_class' === $_REQUEST['_shipping_class'] ) { // WPCS: input var ok, sanitization ok.
			$product->set_shipping_class_id( 0 );
		} else {
			$shipping_class_id = $data_store->get_shipping_class_id_by_slug( wc_clean( $_REQUEST['_shipping_class'] ) ); // WPCS: input var ok, sanitization ok.
			$product->set_shipping_class_id( $shipping_class_id );
		}
	}

	if ( ! empty( $_REQUEST['_visibility'] ) ) { // WPCS: input var ok, sanitization ok.
		$product->set_catalog_visibility( wc_clean( $_REQUEST['_visibility'] ) ); // WPCS: input var ok, sanitization ok.
	}

	if ( ! empty( $_REQUEST['_featured'] ) ) { // WPCS: input var ok, sanitization ok.
		$product->set_featured( wp_unslash( $_REQUEST['_featured'] ) ); // WPCS: input var ok, sanitization ok.
	}

	if ( ! empty( $_REQUEST['_sold_individually'] ) ) { // WPCS: input var ok, sanitization ok.
		if ( 'yes' === $_REQUEST['_sold_individually'] ) { // WPCS: input var ok, sanitization ok.
			$product->set_sold_individually( 'yes' );
		} else {
			$product->set_sold_individually( '' );
		}
	}

	// Handle price - remove dates and set to lowest.
	$change_price_product_types    = apply_filters( 'woocommerce_bulk_edit_save_price_product_types', array( 'simple', 'external' ) );
	$can_product_type_change_price = false;
	foreach ( $change_price_product_types as $product_type ) {
		if ( $product->is_type( $product_type ) ) {
			$can_product_type_change_price = true;
			break;
		}
	}

	if ( $can_product_type_change_price ) {
		$price_changed = false;

		if ( ! empty( $_REQUEST['change_regular_price'] ) && isset( $_REQUEST['_regular_price'] ) ) { // WPCS: input var ok, sanitization ok.
			$change_regular_price = absint( $_REQUEST['change_regular_price'] ); // WPCS: input var ok, sanitization ok.
			$raw_regular_price    = wc_clean( wp_unslash( $_REQUEST['_regular_price'] ) ); // WPCS: input var ok, sanitization ok.
			$is_percentage        = (bool) strstr( $raw_regular_price, '%' );
			$regular_price        = wc_format_decimal( $raw_regular_price );

			switch ( $change_regular_price ) {
				case 1:
					$new_price = $regular_price;
					break;
				case 2:
					if ( $is_percentage ) {
						$percent   = $regular_price / 100;
						$new_price = $old_regular_price + ( round( $old_regular_price * $percent, wc_get_price_decimals() ) );
					} else {
						$new_price = $old_regular_price + $regular_price;
					}
					break;
				case 3:
					if ( $is_percentage ) {
						$percent   = $regular_price / 100;
						$new_price = max( 0, $old_regular_price - ( round( $old_regular_price * $percent, wc_get_price_decimals() ) ) );
					} else {
						$new_price = max( 0, $old_regular_price - $regular_price );
					}
					break;

				default:
					break;
			}

			if ( isset( $new_price ) && $new_price !== $old_regular_price ) {
				$price_changed = true;
				$new_price     = round( $new_price, wc_get_price_decimals() );
				$product->set_regular_price( $new_price );
			}
		}

		if ( ! empty( $_REQUEST['change_sale_price'] ) && isset( $_REQUEST['_sale_price'] ) ) { // WPCS: input var ok, sanitization ok.
			$change_sale_price = absint( $_REQUEST['change_sale_price'] ); // WPCS: input var ok, sanitization ok.
			$raw_sale_price    = wc_clean( wp_unslash( $_REQUEST['_sale_price'] ) ); // WPCS: input var ok, sanitization ok.
			$is_percentage     = (bool) strstr( $raw_sale_price, '%' );
			$sale_price        = wc_format_decimal( $raw_sale_price );

			switch ( $change_sale_price ) {
				case 1:
					$new_price = $sale_price;
					break;
				case 2:
					if ( $is_percentage ) {
						$percent   = $sale_price / 100;
						$new_price = $old_sale_price + ( $old_sale_price * $percent );
					} else {
						$new_price = $old_sale_price + $sale_price;
					}
					break;
				case 3:
					if ( $is_percentage ) {
						$percent   = $sale_price / 100;
						$new_price = max( 0, $old_sale_price - ( $old_sale_price * $percent ) );
					} else {
						$new_price = max( 0, $old_sale_price - $sale_price );
					}
					break;
				case 4:
					if ( $is_percentage ) {
						$percent   = $sale_price / 100;
						$new_price = max( 0, $product->regular_price - ( $product->regular_price * $percent ) );
					} else {
						$new_price = max( 0, $product->regular_price - $sale_price );
					}
					break;

				default:
					break;
			}

			if ( isset( $new_price ) && $new_price !== $old_sale_price ) {
				$price_changed = true;
				$new_price     = ! empty( $new_price ) || '0' === $new_price ? round( $new_price, wc_get_price_decimals() ) : '';
				$product->set_sale_price( $new_price );
			}
		}

		if ( $price_changed ) {
			$product->set_date_on_sale_to( '' );
			$product->set_date_on_sale_from( '' );

			if ( $product->get_regular_price() < $product->get_sale_price() ) {
				$product->set_sale_price( '' );
			}
		}
	}

	// Handle Stock Data.
	$was_managing_stock = $product->get_manage_stock() ? 'yes' : 'no';
	$stock_status       = $product->get_stock_status();
	$backorders         = $product->get_backorders();
	$backorders         = ! empty( $_REQUEST['_backorders'] ) ? wc_clean( $_REQUEST['_backorders'] ) : $backorders; // WPCS: input var ok, sanitization ok.
	$stock_status       = ! empty( $_REQUEST['_stock_status'] ) ? wc_clean( $_REQUEST['_stock_status'] ) : $stock_status; // WPCS: input var ok, sanitization ok.

	if ( ! empty( $_REQUEST['_manage_stock'] ) ) { // WPCS: input var ok, sanitization ok.
		$manage_stock = 'yes' === wc_clean( $_REQUEST['_manage_stock'] ) && 'grouped' !== $product->get_type() ? 'yes' : 'no'; // WPCS: input var ok, sanitization ok.
	} else {
		$manage_stock = $was_managing_stock;
	}

	$stock_amount = 'yes' === $manage_stock && ! empty( $_REQUEST['change_stock'] ) && isset( $_REQUEST['_stock'] ) ? wc_stock_amount( $_REQUEST['_stock'] ) : $product->get_stock_quantity(); // WPCS: input var ok, sanitization ok.

	$product->set_manage_stock( $manage_stock );
	$product->set_backorders( $backorders );

	if ( 'yes' === get_option( 'woocommerce_manage_stock' ) ) {
		$change_stock = absint( $_REQUEST['change_stock'] );
		switch ( $change_stock ) {
			case 2:
				wc_update_product_stock( $product, $stock_amount, 'increase', true );
				break;
			case 3:
				wc_update_product_stock( $product, $stock_amount, 'decrease', true );
				break;
			default:
				wc_update_product_stock( $product, $stock_amount, 'set', true );
				break;
		}
	} else {
		// Reset values if WooCommerce Setting - Manage Stock status is disabled.
		$product->set_stock_quantity( '' );
		$product->set_manage_stock( 'no' );
	}

	// Apply product type constraints to stock status.
	if ( $product->is_type( 'external' ) ) {
		// External products are always in stock.
		$product->set_stock_status( 'instock' );
	} elseif ( $product->is_type( 'variable' ) && ! $product->get_manage_stock() ) {
		// Stock status is determined by children.
		foreach ( $product->get_children() as $child_id ) {
			$child = wc_get_product( $child_id );
			if ( ! $product->get_manage_stock() ) {
				$child->set_stock_status( $stock_status );
				$child->save();
			}
		}
		$product = WC_Product_Variable::sync( $product, false );
	} else {
		$product->set_stock_status( $stock_status );
	}

	$product->save();

	do_action( 'woocommerce_product_bulk_edit_save', $product );
}