Wordpress的Woocommerce:如何修改订单号/ ID?

时间:2017-09-20 10:31:51

标签: php wordpress woocommerce

我已经在我的网上商店实施了WooCommerce,并连接了一个CorvusPay网关进行在线支付。

现在我们遇到的问题是Corvus要求我的订单号包含字符(大写和小写)以及数字。

我已经看过并尝试了很多关于如何在Wordpress中更改订单号的插件和过滤器,但在处理订单并将其发送到Corvus时,该号码仍然是旧邮政ID。

我知道WooCommerce使用Wordpress帖子ID来创建初始订单号,但我该如何更改?

如何修改WooCommerce以便它使用特定的订单号生成方法,即我希望订单号是例如"氪12345"和" 12345"。

我需要一种方法来改变它的数字生成方法,而不是使用顺序订单号这样的插件,因为这只会改变我的Wordpress页面中的数字。

2 个答案:

答案 0 :(得分:0)

您可以使用woocommerce_order_number挂钩来根据需要过滤值。 This guide解释了如何使用它来简单地添加前缀和后缀。

add_filter( 'woocommerce_order_number', 'change_woocommerce_order_number' );

function change_woocommerce_order_number( $order_id ) {
    $prefix = 'VK/';
    $suffix = '/TS';
    $new_order_id = $prefix . $order_id . $suffix;
    return $new_order_id;
}

所以看起来这会做你想要的。如果您不需要,可以删除后缀,或者对$ new_order_id的格式进行必要的调整。

要记住的另一件事是,如果您使用的是PayPal for WooCommerce这样的插件,则可以选择设置内置的发票前缀。

答案 1 :(得分:0)

这看起来像网关开发人员没有正确实现网关的另一种情况。对于我的回答,我假设您正在使用CorvusPay WooCommerce Integration

如果你在 classes.php process_payment()函数中,你会看到插件总是每次都将订单的实际post_id发送到网关:

/**
 *  This method accepts payment request initiated by user, and redirects
 *  him to CorvusPay IPG.
 * @param int $order_id
 * @return array
 */
public function process_payment($order_id) {
    // Load options
    $options = $this->_getOptions();
    $checkout_page_id = $options[CpsiKeys::OPTION_CHECKOUT_PAGE_ID];

    return array(
        'result' => 'success',
        'redirect' => add_query_arg('order_id', $order_id, get_permalink($checkout_page_id))
    );
}

这意味着无论你尝试什么技巧,如果不修改此函数,你将无法克服这个问题,因为插件总是发送错误的信息(或者至少以错误的格式)。

对此有很多修正:

  1. (推荐)请插件的开发人员在结帐的设置页面中添加一个字段,为用户提供发送带前缀订单ID的选项。
  2. (冒险)修改插件代码并强制使用前缀。这是有风险的,因为开发人员可能会更新会覆盖您的更改的插件,但是看到插件只会每隔几个月更新一次,它可能是您唯一的解决方案。尝试将代码更改为以下内容:
  3. -

    /**
     *  This method accepts payment request initiated by user, and redirects
     *  him to CorvusPay IPG.
     * @param int $order_id
     * @return array
     */
    public function process_payment($order_id) {
        // Load options
        $options = $this->_getOptions();
        $checkout_page_id = $options[CpsiKeys::OPTION_CHECKOUT_PAGE_ID];
    
        return array(
            'result' => 'success',
            'redirect' => add_query_arg('order_id', 'ABx' . $order_id, get_permalink($checkout_page_id))
        );
    }
    

    ABx是您的前缀。