在woocommerce中,什么决定了order_item_id?

时间:2013-06-11 08:36:30

标签: unique product woocommerce

我有一个运行woocommerce的网上商店。网上商店提供各种产品。当我添加具有相同变体的相同产品时,我希望它生成一个新的order_item_id,而不是在相同的order_item_id下组合两个。

我似乎无法找到负责生成order_item_id的代码。

有人能告诉我这段代码的位置吗?

我的目标是让每件产品都独一无二,而不是堆叠相同的商品。

- 编辑

好的,所以我把它缩小到了class-wc-cart.php

在第782行,使用以下代码生成产品ID:

public function generate_cart_id( $product_id, $variation_id = '', $variation = '', $cart_item_data = array() ) {

        $id_parts = array( $product_id );

        if ( $variation_id ) $id_parts[] = $variation_id;

        if ( is_array( $variation ) ) {
            $variation_key = '';
            foreach ( $variation as $key => $value ) {
                $variation_key .= trim( $key ) . trim( $value );
            }
            $id_parts[] = $variation_key;
        }

        if ( is_array( $cart_item_data ) && ! empty( $cart_item_data ) ) {
            $cart_item_data_key = '';
            foreach ( $cart_item_data as $key => $value ) {
                if ( is_array( $value ) ) $value = http_build_query( $value );
                $cart_item_data_key .= trim($key) . trim($value);
            }
            $id_parts[] = $cart_item_data_key;
        }

        return md5( implode( '_', $id_parts ) );
    }

现在剩下的就是通过时间戳或其他东西编辑一个唯一的ID。 会让你们发帖。

1 个答案:

答案 0 :(得分:0)

解决了它。 打开class-wc-cart.php,并添加时间戳或其他任何$ id_parts独有的内容。

就像下面的代码一样:

public function generate_cart_id( $product_id, $variation_id = '', $variation = '', $cart_item_data = array() ) {

    $id_parts = array( $product_id );

    if ( $variation_id ) $id_parts[] = $variation_id.time();

    if ( is_array( $variation ) ) {
        $variation_key = '';
        foreach ( $variation as $key => $value ) {
            $variation_key .= trim( $key ) . trim( $value );
        }
        $id_parts[] = $variation_key.time();
    }

    if ( is_array( $cart_item_data ) && ! empty( $cart_item_data ) ) {
        $cart_item_data_key = '';
        foreach ( $cart_item_data as $key => $value ) {
            if ( is_array( $value ) ) $value = http_build_query( $value );
            $cart_item_data_key .= trim($key) . trim($value);
        }
        $id_parts[] = $cart_item_data_key.time();
    }

    return md5( implode( '_', $id_parts ) );
}