Automattic\WooCommerce\Internal\Admin\Agentic

AgenticWebhookPayloadBuilder::map_order_statusprivateWC 1.0

Map WooCommerce order status to ACP status.

ACP statuses: created, manual_review, confirmed, canceled, shipped, fulfilled

Метод класса: AgenticWebhookPayloadBuilder{}

Возвращает

Строку. ACP status.

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

// private - только в коде основоного (родительского) класса
$result = $this->map_order_status( $wc_status ): string;
$wc_status(строка) (обязательный)
WooCommerce order status.

Код AgenticWebhookPayloadBuilder::map_order_status() WC 10.5.0

private function map_order_status( string $wc_status ): string {
	$status_map = array(
		// WooCommerce status => ACP status.
		OrderStatus::PENDING    => ACPOrderStatus::CREATED,
		OrderStatus::PROCESSING => ACPOrderStatus::CONFIRMED,
		OrderStatus::ON_HOLD    => ACPOrderStatus::MANUAL_REVIEW,
		OrderStatus::COMPLETED  => ACPOrderStatus::FULFILLED,
		OrderStatus::CANCELLED  => ACPOrderStatus::CANCELED,
		OrderStatus::REFUNDED   => ACPOrderStatus::FULFILLED, // Refunded orders are still fulfilled.
		OrderStatus::FAILED     => ACPOrderStatus::CANCELED,
	);

	/**
	 * Filter the WooCommerce to ACP order status mapping.
	 *
	 * Allows extensions to map custom WooCommerce order statuses to ACP order statuses.
	 * The mapped status must be one of: created, manual_review, confirmed, canceled, shipped, fulfilled.
	 *
	 * @see Automattic\WooCommerce\Internal\Agentic\Enums\Specs\OrderStatus
	 *
	 * @since 10.3.0
	 *
	 * @param array  $status_map Associative array of WooCommerce status => ACP status.
	 * @param string $wc_status  The WooCommerce order status being mapped.
	 */
	$status_map = apply_filters( 'woocommerce_agentic_webhook_order_status_map', $status_map, $wc_status );

	// Get mapped status or default to 'created'.
	$mapped_status = isset( $status_map[ $wc_status ] ) ? $status_map[ $wc_status ] : ACPOrderStatus::CREATED;

	// Validate the mapped status is a valid ACP status.
	if ( ! ACPOrderStatus::is_valid( $mapped_status ) ) {
		// Log a warning for invalid status but continue with fallback.
		wc_get_logger()->warning(
			sprintf(
				'Invalid ACP order status "%s" returned by woocommerce_agentic_webhook_order_status_map filter for WooCommerce status "%s". Using "created" as fallback.',
				$mapped_status,
				$wc_status
			),
			array( 'source' => 'agentic-webhooks' )
		);
		return ACPOrderStatus::CREATED;
	}

	return $mapped_status;
}