Ask your WordPress questions! Pay money and get answers fast! (more info)

WooCommerce: Update order's payment method WordPress



Given an order ID, I need to update its <strong>payment method</strong> to COD (Cash on delivery) from a stand-alone PHP script (placed outside of the wordpress' root directory)

I've been using the Woocommerce REST API but it's limited for what I'm asking.

I want the script to access to the wordpress DB, so I would need the SQL query to update an order's payment method to "cod".

I've seen some answers that use the wc_query class to access to the DB but, because I'm a newbie, I don't know how to use it properly. So if your solution uses the WC_Query class tell me how I include it in my stand-alone PHP script


Answers (2)


Dbranes answers:

You can try this, if your <em>script.php</em> is in the WP root directory:


* Update payments methods for a given order
* file: script.php

define( 'WP_USE_THEMES', FALSE );
require( './wp-blog-header.php' );

// EDIT:
$order_id = 529;
$payment_method = 'paypal';
$payment_method_title = 'PayPal';

$order_id = 540;
$payment_method = 'cod';
$payment_method_title = 'Cash on delivery';

// before update:
echo 'payment_method: ' . get_post_meta( $order_id , '_payment_method', TRUE );
echo '<br/>';
echo ' payment_method_title: ' . get_post_meta( $order_id, '_payment_method_title', TRUE );

// update payment method
update_post_meta( $order_id, '_payment_method', $payment_method );
update_post_meta( $order_id, '_payment_method_title', $payment_method_title );

//after update:
echo '<hr/>';
echo 'payment_method: ' . get_post_meta( $order_id , '_payment_method', TRUE );
echo '<br/>';
echo ' payment_method_title: ' . get_post_meta( $order_id, '_payment_method_title', TRUE );

Paul August comments:

Hi Dbranes! That totally worked !
I want to change the order status to 'complete'.. How can I achieve that?

Dbranes comments:

You can change the order status by modifying the <em>shop_order_status</em> custom taxonomy for the given order.

So you can use for example:

//$order_status = 'cancelled';
$order_status = 'completed';

wp_set_object_terms( $order_id, $order_status, 'shop_order_status', FALSE );

to change it.

Paul August comments:

I really appreciate your answek Dbranes !

Big thanks !

Dbranes comments:

Glad to hear it worked for you.


Bob answers:

your custom script is in root directory.
if it is with in root of wordpress installation.

then call wp-load.php at the top.

now you can user wordpress function and hopefully wc_query also.

Bob comments:


Bob comments:

if only wp-load.php do not work then you might have to include wp-blog-header.php

require_once ('/path/to/wordpress/wp-load.php');
require_once ('/path/to/wordpress/wp-blog-header.php');