【问题标题】:Woocommerce for Wordpress: How to modify the order number/id?Woocommerce for Wordpress:如何修改订单号/ID?
【发布时间】:2023-04-11 09:44:01
【问题描述】:

我已将 WooCommerce 部署到我的网上商店,并已连接 CorvusPay 网关以进行在线支付。

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

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

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

如何修改 WooCommerce 使其使用特定的订单号生成方法,即我希望订单号为例如“Kr-12345”和不是“12345”。

我需要一种方法来改变它的数字生成方法,而不是使用像 Sequential Order Numbers 这样的插件,因为这只会改变我的 Wordpress 页面中的数字。

【问题讨论】:

    标签: php wordpress woocommerce


    【解决方案1】:

    您可以使用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 这样的插件,它可以选择设置内置发票前缀。

    【讨论】:

    • 我尝试了那个确切的解决方案,但问题是它仍然没有将那个订单号发送给 corvus;因为,它做的第一件事是获取帖子 ID,将其设置为订单号,将该号码发送到 corvus,然后转到我的 wordpress 并由过滤器对其进行修改。该指南以这样的方式结束:“WooCommerce 提供了另一个过滤器 woocommerce_new_order_data,它允许您在使用 wp_insert_post() 将订单数据插入 wp_posts 表之前对其进行修改。我们将在另一篇文章中讨论。”但我似乎找不到与此相关的任何内容...
    【解决方案2】:

    这看起来像是网关开发人员没有正确实现网关的另一种情况。对于我的回答,我假设您使用的是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. (风险)现在修改插件代码并强制使用前缀。这是有风险的,因为开发人员可以更新会覆盖您的更改的插件,但是看到插件每隔几个月才会更新一次,这可能是您唯一的解决方案。尝试将代码更改为如下所示:

    -

    /**
     *  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 是您的前缀。

    柯达

    【讨论】:

    • 感谢您的帮助!我已经尝试了代码修复,它确实在地址栏中发生了变化,但是当它发送时它只是停止并重定向到我的主页,就像什么都没发生一样。我也就此联系了 Corvus,希望他们能够解决问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    • 2020-05-08
    • 2014-03-05
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    相关资源
    最近更新 更多