2015-10-07 132 views
5

我正在为我的购物网站使用woo-commerce。我想在付款完成后更新订单状态,然后返回成功页面。支付完成后更新woocommerce订单状态并重定向至商店

我用下面的代码:

add_filter('woocommerce_payment_complete_order_status', 'my_change_status_function', 10, 2); 

function my_change_status_function ($order_status, $order_id) { 
    $order = new WC_Order($order_id); 
    return 'completed'; 
} 

但有人和重定向到支付页面支付之前调用此函数。

我想在付款完成后更改状态,然后返回到redirect URL。

这里是我的重定向链接:

http://example.com/checkout/order-received/82/?key=wc_order_5614e28c9d183&state=return 

但是,当我使用woocommerce_payment_complete_order_status钩的状态没有改变。 付款完成后应该调用挂钩。

+0

您的过滤器是否被解雇?订单完成后?如果不尝试将'add_filter'更改为'add_action',请查看这些链接以获取更多信息[link](https://wordpress.org/support/topic/woocommerce-on-order-complete-insert-quantity-data-into-自定义数据库表),[链接2](http://www.rcorreia.com/woocommerce/woocommerce-automatically-set-order-status-payment-received/) – Noman

+0

@Noman是过滤器开火,但在付款之前。它在网站转入付款页面时触发。付款完成后,我想要它。 –

+0

所以你需要在'order-received'页面中添加这段代码,当页面被查看时它会被触发。 – Noman

回答

3

尝试使用下面的代码在你的插件

add_action('woocommerce_thankyou', 'my_change_status_function'); 

function my_change_status_function($order_id) { 

    $order = new WC_Order($order_id); 
    $order->update_status('completed'); 

} 
+0

我添加了你的代码到我的function.php文件,,,但它没有更新订单状态,但我用PayPal完成了付款? –

+0

这是为什么呢? –

0

退房这段代码

add_action('woocommerce_checkout_order_processed', 'do_something'); 

function do_something($order_id) { 
    $order = new WC_Order($order_id); 
    // Do something 
} 
0

货到付款的方法,这个工作对我来说:

add_filter('woocommerce_cod_process_payment_order_status', 'prefix_filter_wc_complete_order_status', 10, 3); 

function prefix_filter_wc_complete_order_status($status, $order) { 
    return 'on-hold'; 
} 

对于大多数其他方法,这工作:

add_filter('woocommerce_payment_complete_order_status', 'prefix_filter_wc_complete_order_status', 10, 3); 

function prefix_filter_wc_complete_order_status($status, $order_id, $order) { 
    return 'on-hold'; 
} 
相关问题