WooCommerce 自定义订单号前置产品 sku

问题描述 投票:0回答:1

我正在构建一个具有不同功能的 WooCommerce 网上商店,我希望获得不同系列的订单号或发票号,与下面提到的链接完全相同。我需要一个类似的解决方案,但我尝试使用提供的两个代码,但每当我将代码添加到函数文件中时,结帐页面就会停止工作并给出错误“此网站上存在严重错误”

woocommerce 不同产品的唯一订单号或发票号

我尝试过的代码:

第一次尝试

add_filter( 'woocommerce_order_number', 'change_woocommerce_order_number' );

function change_woocommerce_order_number( $order_id ) {
    $order = new WC_Order( $order_id );
    foreach ( $order->get_items() as $item_key => $item )
    $product = $order->get_product_from_item( $item );
    $sku = $product->get_sku();
    $new_order_id = $sku . $order_id;
    return $new_order_id;
}

第二次尝试

function change_woocommerce_order_number($order_id) {
    $order = new WC_Order($order_id);
    $items = $order->get_items();
    $first_item = $items[0];
    $product_id = $first_item->get_product_id();
    $product = new WC_Product($product_id);
    $sku = $product->get_sku();

    return $sku.$order_id;
}
add_filter('woocommerce_order_number', 'change_woocommerce_order_number');

我在自定义代码方面完全是新手,因此非常感谢您的及时帮助。

php wordpress woocommerce orders sku
1个回答
0
投票

您的代码尝试中存在一些错误,并且由于一个订单可以有多个产品,因此您需要从第一个订单项(产品)获取 SKU,将其添加到订单号之前。

尝试以下方法:

add_filter( 'woocommerce_order_number', 'custom_wc_order_number', 10, 2 );
function custom_wc_order_number( $order_id, $order ) {
    $item    = current( $order->get_items() ); // Get the first order item
    $product = $item->get_product(); // Get the WC_Product Object
    $sku     = $product->get_sku(); // Get the SKU from the product

    if ( $sku ) {
        return $sku . $order_id; // Prepend the sku to the order number
    }
    return $order_id;
}

应该可以。

© www.soinside.com 2019 - 2024. All rights reserved.