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

WC_AJAX::add_order_item() WC 1.0

Add order item via ajax. Used on the edit order screen in WP Admin.

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

Возвращает

Null. Ничего.

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

$var = WC_AJAX::add_order_item();

Код WC AJAX::add order item: woocommerce/includes/class-wc-ajax.php WC 3.6.5

<?php
public static function add_order_item() {
	check_ajax_referer( 'order-item', 'security' );

	if ( ! current_user_can( 'edit_shop_orders' ) ) {
		wp_die( -1 );
	}

	$response = array();

	try {
		if ( ! isset( $_POST['order_id'] ) ) {
			throw new Exception( __( 'Invalid order', 'woocommerce' ) );
		}

		$order_id = absint( wp_unslash( $_POST['order_id'] ) ); // WPCS: input var ok.
		$order    = wc_get_order( $order_id );

		if ( ! $order ) {
			throw new Exception( __( 'Invalid order', 'woocommerce' ) );
		}

		// If we passed through items it means we need to save first before adding a new one.
		$items = ( ! empty( $_POST['items'] ) ) ? wp_unslash( $_POST['items'] ) : ''; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized

		if ( ! empty( $items ) ) {
			$save_items = array();
			parse_str( $items, $save_items );
			wc_save_order_items( $order->get_id(), $save_items );
		}

		$items_to_add = isset( $_POST['data'] ) ? array_filter( wp_unslash( (array) $_POST['data'] ) ) : array(); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized

		// Add items to order.
		$order_notes = array();

		foreach ( $items_to_add as $item ) {
			if ( ! isset( $item['id'], $item['qty'] ) || empty( $item['id'] ) ) {
				continue;
			}
			$product_id = absint( $item['id'] );
			$qty        = wc_stock_amount( $item['qty'] );
			$product    = wc_get_product( $product_id );

			if ( ! $product ) {
				throw new Exception( __( 'Invalid product ID', 'woocommerce' ) . ' ' . $product_id );
			}

			$item_id                 = $order->add_product( $product, $qty );
			$item                    = apply_filters( 'woocommerce_ajax_order_item', $order->get_item( $item_id ), $item_id );
			$added_items[ $item_id ] = $item;
			$order_notes[ $item_id ] = $product->get_formatted_name();

			if ( $product->managing_stock() ) {
				$new_stock               = wc_update_product_stock( $product, $qty, 'decrease' );
				$order_notes[ $item_id ] = $product->get_formatted_name() . ' &ndash; ' . ( $new_stock + $qty ) . '&rarr;' . $new_stock;
				$item->add_meta_data( '_reduced_stock', $qty, true );
				$item->save();
			}

			do_action( 'woocommerce_ajax_add_order_item_meta', $item_id, $item, $order );
		}

		/* translators: %s item name. */
		$order->add_order_note( sprintf( __( 'Added line items: %s', 'woocommerce' ), implode( ', ', $order_notes ) ), false, true );

		do_action( 'woocommerce_ajax_order_items_added', $added_items, $order );

		$data = get_post_meta( $order_id );

		// Get HTML to return.
		ob_start();
		include 'admin/meta-boxes/views/html-order-items.php';
		$items_html = ob_get_clean();

		ob_start();
		$notes = wc_get_order_notes( array( 'order_id' => $order_id ) );
		include 'admin/meta-boxes/views/html-order-notes.php';
		$notes_html = ob_get_clean();

		wp_send_json_success(
			array(
				'html'       => $items_html,
				'notes_html' => $notes_html,
			)
		);
	} catch ( Exception $e ) {
		wp_send_json_error( array( 'error' => $e->getMessage() ) );
	}

	// wp_send_json_success must be outside the try block not to break phpunit tests.
	wp_send_json_success( $response );
}