更改包含重复商品的 WooCommerce 订单的状态

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


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


这是我的代码尝试:


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


任何建议将不胜感激。


ABOUTYOU
浏览 142回答 1
1回答

森林海

您的代码中存在一些错误和复杂性。此外,您不能使用具有相同函数的两个钩子,因为它们没有相同的参数。您可以做的是在每个挂钩的单独函数内使用自定义条件函数,如下所示:// Custom conditional functionfunction has_duplicated_items( $order ) {&nbsp; &nbsp; $order_items = $order->get_items();&nbsp; &nbsp; $items_count = (int) count($order_items);&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; if ( $items_count === 1 ) {&nbsp; &nbsp; &nbsp; &nbsp; return false;&nbsp; &nbsp; }&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; $items_names = array();&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; // Loop through order items&nbsp; &nbsp; foreach( $order_items as $tem_id => $item ){&nbsp; &nbsp; &nbsp; &nbsp; $product_id&nbsp; = $item->get_variation_id() > 0 ? $item->get_variation_id() : $item->get_product_id();&nbsp; &nbsp; &nbsp; &nbsp; $items_names[$product_id] = $item->get_name();&nbsp; &nbsp; }&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; 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 ) {&nbsp; &nbsp; 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 ) {&nbsp; &nbsp; return has_duplicated_items( $order ) ? 'on-hold' : 'processing';}这次应该可以解决错误:“SyntaxError: Unexpected token < in JSON at position 18”代码位于活动子主题(或活动主题)的 function.php 文件中。它应该有效。
打开App,查看更多内容
随时随地看视频慕课网APP