Magento: How to change order status programmatically?

This article shows how to change your order status programmatically in Magento.

First, you need to load your order. You can load order by either order_id or order_increment_id.

Load order by “order id”


$orderId = YOUR_ORDER_ID;
$order = Mage::getModel('sales/order')->load($orderId);

Load order by “order increment id”


$orderIncrementId = YOUR_ORDER_INCREMENT_ID;
$order = Mage::getModel('sales/order')->loadByIncrementId($orderIncrementId);

Change order status to Complete


/**
 * change order status to 'Completed'
 */
$order->setState(Mage_Sales_Model_Order::STATE_COMPLETE, true)->save();

Change the order status to pending, processing, canceled, closed, holded, etc.


/**
 * change order status to 'Pending'
 */
$order->setState(Mage_Sales_Model_Order::STATE_NEW, true)->save();

/**
 * change order status to 'Pending Paypal'
 */
$order->setState(Mage_Sales_Model_Order::STATE_PENDING_PAYMENT, true)->save();

/**
 * change order status to 'Processing'
 */
$order->setState(Mage_Sales_Model_Order::STATE_PROCESSING, true)->save();

/**
 * change order status to 'Completed'
 */
$order->setState(Mage_Sales_Model_Order::STATE_COMPLETE, true)->save();

/**
 * change order status to 'Closed'
 */
$order->setState(Mage_Sales_Model_Order::STATE_CLOSED, true)->save();

/**
 * change order status to 'Canceled'
 */
$order->setState(Mage_Sales_Model_Order::STATE_CANCELED, true)->save();

/**
 * change order status to 'Holded'
 */
$order->setState(Mage_Sales_Model_Order::STATE_HOLDED, true)->save();

Cancel an order


if($order->canCancel()) {
	$order->cancel()->save();
}

Hold an order


if($order->canHold()) {
	$order->hold()->save();
}

Unhold an order


if($order->canUnhold()) {
	$order->unhold()->save();
}

Hope this helps. Thanks.