Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Woocommerce for Wordpress:如何修改订单号/id?_Php_Wordpress_Woocommerce - Fatal编程技术网

Php Woocommerce for Wordpress:如何修改订单号/id?

Php Woocommerce for Wordpress:如何修改订单号/id?,php,wordpress,woocommerce,Php,Wordpress,Woocommerce,我已经将WooCommerce应用到我的网店,并连接了一个CorvusPay网关进行在线支付 现在我们遇到的问题是,Corvus要求我的订单号包含字符(大写和小写)以及数字 我在Wordpress中看到并尝试了许多插件和过滤器,了解如何更改我的订单号,但在订单处理并发送到Corvus的过程中,订单号仍然是原来的post ID 我知道WooCommerce使用Wordpress post ID来创建初始订单号,但我如何更改 如何修改WooCommerce,使其使用特定的订单号生成方法,即我希望订单

我已经将WooCommerce应用到我的网店,并连接了一个CorvusPay网关进行在线支付

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

我在Wordpress中看到并尝试了许多插件和过滤器,了解如何更改我的订单号,但在订单处理并发送到Corvus的过程中,订单号仍然是原来的post ID

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

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


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

你可以使用
woocommerce\u Order\u number
钩子来过滤你想要的值。解释如何使用它简单地添加前缀和后缀

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\u order\u id的格式进行任何必要的调整


要记住的另一件事是,如果您使用的插件与之类似,那么它可以选择设置内置的发票前缀。

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

如果使用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))
    );
}
这意味着无论你尝试什么技巧,如果不修改这个函数,你都无法克服这个问题,因为插件总是发送错误的信息(或者至少是错误的格式)

对此,有许多修复程序:

  • (推荐)请插件开发人员向签出的设置页面添加一个字段,该字段为用户提供发送带前缀的订单id的选项
  • (有风险)修改插件代码并暂时强制使用前缀。这是有风险的,因为开发人员可能会更新插件,这将覆盖您的更改,但是由于插件只会每隔这么多个月更新一次,因此这可能是您唯一的解决方案。尝试将代码更改为类似以下内容:
  • -

    其中
    ABx
    是您的前缀


    Koda

    我尝试了这个精确的解决方案,但问题是它仍然没有将订单号发送给corvus;因为,它要做的第一件事是获取帖子id,将其设置为订单号,将该编号发送到corvus,然后转到我的wordpress,在那里它会被过滤器修改。指南最后写道:“WooCommerce提供了另一个过滤器WooCommerce_new_order_data,允许您在使用wp_insert_post()将订单数据插入wp_posts表之前修改订单数据。我们将在另一篇文章中查看。”但我似乎找不到与此相关的任何内容……感谢您的帮助!我已经尝试了代码修复,它确实在地址栏中发生了变化,但当它发送时,它只是停止并重定向到我的主页,就像什么都没发生一样。我也就此联系了Corvus,希望他们能解决一些问题。
    /**
     *  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))
        );
    }