更改重复项目的WooCommerce订单的状态

fhgroupauto

客户付款一次,但有时商品在订单中显示两次,它是随机发生的。通常每周两次。

在这种情况下,我需要一个函数来更改订单状态(例如,订单中至少有重复的商品名称)。

这是我的代码尝试:

add_filter( 'woocommerce_cod_process_payment_order_status', 'prefix_filter_wc_complete_order_status', 10, 3 );
add_filter( 'woocommerce_payment_complete_order_status', 'prefix_filter_wc_complete_order_status', 10, 3 );

function prefix_filter_wc_complete_order_status( $status, $order_id, $order ) {
if( ! $order_id ) return;
$order = wc_get_order( $order_id );

$all_products_id = array();
foreach ($order->get_items() as $item_key => $item ){
    $item_name  = $item->get_name();    
    $all_products_id[] = $item_name;
}

$o_num = count($all_products_id);

if($o_num == 1){
    return 'processing';    
}else{
    
    $standard = 0;
    for($i=1;$i<$o_num;$i++){
        if($all_products_id[0] == $all_products_id[i]){
            $standard++;
        }   
    }

    if($standard > 0){
        return 'on-hold';   
    }else{
        return 'processing';
    }   

}

当我测试它时,出现以下错误: SyntaxError: Unexpected token < in JSON at position 18

任何建议将不胜感激。

LoicTheAztec

您的代码中存在一些错误和复杂性。同样,您不能同时使用具有相同功能的两个钩子,因为它们没有相同的参数。

您可以做的是通过以下方式在每个钩子的分离函数中使用自定义条件函数:

// Custom conditional function
function has_duplicated_items( $order ) {
    $order_items = $order->get_items();
    $items_count = (int) count($order_items);
    
    if ( $items_count === 1 ) {
        return false;
    }
    
    $items_names = array();
    
    // Loop through order items
    foreach( $order_items as $tem_id => $item ){
        $product_id  = $item->get_variation_id() > 0 ? $item->get_variation_id() : $item->get_product_id();
        $items_names[$product_id] = $item->get_name();
    }
    
    return absint(count($items_names)) !== $items_count ? true : false;
}

add_filter( 'woocommerce_cod_process_payment_order_status', 'filter_wc_cod_process_payment_order_status', 10, 2 );
function filter_wc_cod_process_payment_order_status( $status, $order ) {
    return has_duplicated_items( $order ) ? 'on-hold' : 'processing';
}

add_filter( 'woocommerce_payment_complete_order_status', 'filter_wc_payment_complete_order_status', 10, 3 );
function filter_wc_payment_complete_order_status( $status, $order_id, $order ) {
    return has_duplicated_items( $order ) ? 'on-hold' : 'processing';
}

这次,这应该可以解决错误:“ SyntaxError:JSON中位置18处的意外令牌<”

代码进入您的活动子主题(或活动主题)的function.php文件中。它应该工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何更改WooCommerce订单中可下载项目的到期日期?

来自分类Dev

WooCommerce订单状态从付款网关更改

来自分类Dev

WooCommerce更改订单状态BACS处理

来自分类Dev

根据运输方式更改 Woocommerce 订单状态

来自分类Dev

React Hooks:更改多个项目的状态

来自分类Dev

当订单状态更改为自定义订单状态时,从WooCommerce发送电子邮件

来自分类Dev

根据批准状态和特定订单项更改WooCommerce订单状态

来自分类Dev

当订单状态更改为自定义订单状态时,从WooCommerce发送电子邮件

来自分类Dev

根据不同的送货方式更改Woocommerce订单状态

来自分类Dev

WooCommerce根据特定的运输方式更改BACS订单的状态

来自分类Dev

限制用户角色仅更改 Woocommerce 中的某些订单状态

来自分类Dev

如何根据woocommerce订单中使用的优惠券更改订单状态

来自分类Dev

更改WooCommerce管理订单页面中显示的订单项目元密钥标签

来自分类Dev

重命名WooCommerce订单状态

来自分类Dev

如何删除WooCommerce订单状态?

来自分类Dev

WooCommerce ajax 获取订单状态

来自分类Dev

将ListView项目的状态更改为以编程方式激活?

来自分类Dev

如何避免项目的布局更改在 RecyclerView 中重复?

来自分类Dev

在WooCommerce中更改已付款订单状态更改的已付款日期

来自分类Dev

WooCommerce:在订单状态更改时仅运行一次代码

来自分类Dev

以编程方式在WooCommerce特定订单状态更改上添加免费产品

来自分类Dev

WooCommerce中特定产品的自动更改订单状态为已完成

来自分类Dev

C:快餐项目的订单系统

来自分类Dev

WooCommerce - 重复订单的不同运输方式

来自分类Dev

在WooCommerce中创建订单时获取订单商品的库存状态

来自分类Dev

如何根据状态隐藏 Woocommerce 订单列表中的订单

来自分类Dev

根据WooCommerce编辑订单页面中的订单状态在下拉菜单中隐藏订单状态

来自分类Dev

更改Laravel项目状态

来自分类Dev

更改后获取德勤订单状态

Related 相关文章

  1. 1

    如何更改WooCommerce订单中可下载项目的到期日期?

  2. 2

    WooCommerce订单状态从付款网关更改

  3. 3

    WooCommerce更改订单状态BACS处理

  4. 4

    根据运输方式更改 Woocommerce 订单状态

  5. 5

    React Hooks:更改多个项目的状态

  6. 6

    当订单状态更改为自定义订单状态时,从WooCommerce发送电子邮件

  7. 7

    根据批准状态和特定订单项更改WooCommerce订单状态

  8. 8

    当订单状态更改为自定义订单状态时,从WooCommerce发送电子邮件

  9. 9

    根据不同的送货方式更改Woocommerce订单状态

  10. 10

    WooCommerce根据特定的运输方式更改BACS订单的状态

  11. 11

    限制用户角色仅更改 Woocommerce 中的某些订单状态

  12. 12

    如何根据woocommerce订单中使用的优惠券更改订单状态

  13. 13

    更改WooCommerce管理订单页面中显示的订单项目元密钥标签

  14. 14

    重命名WooCommerce订单状态

  15. 15

    如何删除WooCommerce订单状态?

  16. 16

    WooCommerce ajax 获取订单状态

  17. 17

    将ListView项目的状态更改为以编程方式激活?

  18. 18

    如何避免项目的布局更改在 RecyclerView 中重复?

  19. 19

    在WooCommerce中更改已付款订单状态更改的已付款日期

  20. 20

    WooCommerce:在订单状态更改时仅运行一次代码

  21. 21

    以编程方式在WooCommerce特定订单状态更改上添加免费产品

  22. 22

    WooCommerce中特定产品的自动更改订单状态为已完成

  23. 23

    C:快餐项目的订单系统

  24. 24

    WooCommerce - 重复订单的不同运输方式

  25. 25

    在WooCommerce中创建订单时获取订单商品的库存状态

  26. 26

    如何根据状态隐藏 Woocommerce 订单列表中的订单

  27. 27

    根据WooCommerce编辑订单页面中的订单状态在下拉菜单中隐藏订单状态

  28. 28

    更改Laravel项目状态

  29. 29

    更改后获取德勤订单状态

热门标签

归档