Woocommerce:付款完成后更改订单ID

时间:2019-11-20 08:25:52

标签: php wordpress woocommerce

我用woocommerce建立了一个简单的网上商店,有三种付款方式。 iDeal以及通过直接银行转帐和帐户付款。订单ID是根据付款方式创建的。例如,如果使用iDEAL付款,则订单ID为ID190100;如果使用帐户付款,则订单ID为RK190100。我通过插件使用它 来自BeRocket的“ WooCommerce的顺序号”,但在付款完成之前已经创建了。付款完成后,订单ID必须最终确定。现在,尚未付款或可能尚未付款的订单将收到固定的订单ID。这样可以创建一个临时订单ID,并在订单完成后根据付款方式更改订单ID吗?

2 个答案:

答案 0 :(得分:1)

尝试一下。这是一个非常简单的例子。希望有帮助。

add_action( 'woocommerce_order_status_completed', 'wc_change_order_id' );

function wc_change_order_id( $order_id ) {

    $order = wc_get_order( $order_id );

    $method = $order->get_payment_method(); // need check this

    if ( $method === 'account' ) {

        $number = 'ID' . $order->get_id();

        $order->set_id( $number );

        $order->save();

    }
}

答案 1 :(得分:1)

默认情况下,Woocommerce将订单的帖子ID用作订单ID。这在查看WC_Order::get_order_number()方法时很明显。如果要使用自定义订单号显示,则需要在woocommerce_order_number上添加一个过滤器以加载其他值。

示例脚本为:

add_action( 'woocommerce_order_status_completed', 'wc_change_order_id' );

function wc_change_order_id( $order_id ) {

    $order = wc_get_order( $order_id );

    $method = $order->get_payment_method(); // need check this

    if ( $method === 'account' ) {

        $number = 'ID' . $order->get_id();

        $order->update_meta_data('_new_order_number', $number );

    }
}
add_filter('woocommerce_order_number', function($default_order_number, \WC_Order $order) {
   //Load in our meta value. Return it, if it's not empty.
   $order_number = $order->get_meta('_new_order_number');
   if(!empty($order_number)) {
      return $order_number;
   }
   // use whatever the previous value was, if a plugin modified it already.
   return $default_order_number;
},10,2);