php – 如何在WooCommerce中支付后检查订单状态

前端之家收集整理的这篇文章主要介绍了php – 如何在WooCommerce中支付后检查订单状态前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要在收到付款后自动更改已完成的订单状态,但仅限于订单状态为“正在处理”.我找到了片段,在每种情况下使订单状态完成的原因,但是在成功付款更改后我的付款插件返回数据并更改“处理”的订单状态.我想在成功后将其更改为“已完成”,如果状态不是“处理”,则不要更改它.我遇到的主要问题是我不知道如何获得收到的状态订单.

这是我的代码

  1. add_filter( 'woocommerce_thankyou','update_order_status',10,2 );
  2.  
  3. function update_order_status( $order_id ) {
  4. $order = new WC_Order( $order_id );
  5. $order_status = $order->get_status();
  6. if ('processing' == $order_status) {
  7. $order->update_status( 'completed' );
  8. }
  9. //return $order_status;
  10. }

我已经弄清楚了.这是工作代码

  1. add_filter( 'woocommerce_thankyou',1 );
  2.  
  3. function update_order_status( $order_id ) {
  4. if ( !$order_id ){
  5. return;
  6. }
  7. $order = new WC_Order( $order_id );
  8. if ( 'processing' == $order->status) {
  9. $order->update_status( 'completed' );
  10. }
  11. return;
  12. }
更新:与WooCommerce版本3的兼容性

基于:WooCommerce – Auto Complete paid virtual Orders (depending on Payment methods),您还可以处理条件中的所有付款方式:

  1. // => not a filter (an action hook)
  2. add_action( 'woocommerce_thankyou','custom_woocommerce_auto_complete_paid_order',1 );
  3. function custom_woocommerce_auto_complete_paid_order( $order_id ) {
  4. if ( ! $order_id )
  5. return;
  6.  
  7. $order = new WC_Order( $order_id );
  8.  
  9. // No updated status for orders delivered with Bank wire,Cash on delivery and Cheque payment methods.
  10. if ( get_post_meta($order_id,'_payment_method',true) == 'bacs' || get_post_meta($order_id,true) == 'cod' || get_post_meta($order_id,true) == 'cheque' ) {
  11. return;
  12. }
  13. // "completed" updated status for paid "processing" Orders (with all others payment methods)
  14. elseif ( $order->has_status( 'processing' ) ) {
  15. $order->update_status( 'completed' );
  16. }
  17. else {
  18. return;
  19. }
  20. }

猜你在找的PHP相关文章