php - WooCommerce 订单状态从支付网关更改

标签 php wordpress woocommerce payment-gateway orders

我已经集成了一个支付网关来接受我在 woocommerce 上运行的商店的在线支付。一切正常,但我注意到 woocommerce 默认将所有在线支付订单的订单状态更改为 wc-processing

根据我商店的功能,我希望所有在线支付订单最初都处于 wc-on-hold 状态。

有什么方法可以阻止 woocommerce 以编程方式将订单状态更改为 wc-processing 吗?

最佳答案

这是基于 thread 的代码片段.我们在这里使用 woocommerce_thankyou (在付款完成后立即触发) Hook 我们的功能,转换 '处理' 订单状态为 'on-hold':

add_action( 'woocommerce_thankyou', 'custom_woocommerce_paid_order_status', 10, 1 );
function custom_woocommerce_paid_order_status( $order_id ) {
    if ( ! $order_id ) {
        return;
    }

    global $woocommerce;
    $order = new WC_Order( $order_id );

    // 'processing' orders status are converted to 'on-hold'.
    if ( is_object($order) && $order->has_status( 'processing' ) {
        $order->update_status( 'on-hold' ); 
    }

    return;
}

您还可以在您的条件下定位支付网关,例如,我们绕过 3 个支付网关并使用 "your_payment_gateway" slug 定位特定的支付网关:

add_action( 'woocommerce_thankyou', 'custom_woocommerce_paid_order_status', 10, 1 );
function custom_woocommerce_paid_order_status( $order_id ) {
    if ( ! $order_id ) {
        return;
    }

    global $woocommerce;
    $order = new WC_Order( $order_id );

    // Bypass orders with Bank wire, Cash on delivery and Cheque payment methods.
    if ( ( get_post_meta($order->id, '_payment_method', true) == 'bacs' ) || ( get_post_meta($order->id, '_payment_method', true) == 'cod' ) || ( get_post_meta($order->id, '_payment_method', true) == 'cheque' ) ) {
        return;
    }

    // Target your "your_payment_gateway_slug" with this conditional
    if ( is_object($order) && get_post_meta($order->id, '_payment_method', true) == 'your_payment_gateway_slug'  && $order->has_status( 'processing' ) ) {
        $order->update_status( 'on-hold' ); 
    }

    return;
}

此代码片段位于您的事件子主题或主题的 function.php 文件中。

你可以轻松地做任何你想做的事,支付订单的正确 Hook 是woocommerce_thankyou

引用资料:

关于php - WooCommerce 订单状态从支付网关更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38741747/

相关文章:

php - 在星级评级旁边显示 woocommerce 评论计数

javascript - 使用ajax和php将数据显示到html表时遇到问题

php - 'c63rd321' 中的未知列 'where clause'

html - 为什么在添加文本时 HTML 页面的布局会发生变化

html - Wordpress 自定义注册表

wordpress - Apache 301 重定向原始 URL 包含特殊字符的位置

php - wordpress 中的 Woocommerce - 最近售出的产品?

php - 具有特定产品标签的 WooCommerce 产品的批量动态定价

php - Youtube API v3返回的结果少于要求的结果

php - Laravel Cors - 安装 CORS 包后类 throttle 不存在