/**
* Множественное добавление в корзину
* Вызывается по Ajax
*
* @hook-handle qop_add_to_cart
*/
public function ajax_add_to_cart() {
$product_items = isset( $_POST['products'] ) && is_array( $_POST['products'] ) ? $_POST['products'] : false;
$errors = array();
$added_products_count = 0;
foreach ( $product_items as $item ) {
$product_id = $item['product_id'];
$quantity = $item['quantity'];
$variation_id = $item['variation_id'];
$title = $item['product_title'];
$sku = $item['sku']; // для простого товара здесь тоже его sku
$passed_validation = apply_filters( 'woocommerce_add_to_cart_validation', true, $product_id, $quantity );
$product_status = get_post_status( $product_id );
if ( $passed_validation && WC()->cart->add_to_cart( $product_id, $quantity, $variation_id ) && 'publish' === $product_status ) {
do_action( 'woocommerce_ajax_added_to_cart', $product_id );
$added_products_count ++;
} else {
$notices = WC()->session->get( 'wc_notices', array() );
if ( isset( $notices['error'] ) ) {
$error = array_pop( $notices['error'] );
$err_msg = preg_replace( '/<a.*?href.*?=(.*)>(.*?)<\/a>/', '', $error );
$errors[] = array(
'variationId' => $variation_id,
'title' => $title,
'sku' => $sku,
'msg' => $err_msg,
);
}
wc_clear_notices();
}
}
$response = array(
'added' => $added_products_count,
'errors' => $errors,
'popup' => $this->template_errors_formating( $errors ), // Формирование собственного popup-a для пользователя
'cart' => $this->get_refreshed_fragments(), // необходимо для обновления миникорзины в шапке.
);
wp_send_json( $response );
}