当前位置: 首页 > 知识库问答 >
问题:

根据产品SKU向WooCommerce订单项添加随机字符串

华哲茂
2023-03-14

我在WooCommerce中设置了可变产品。

每个变体都有一个唯一的SKU。我的任务是检查购物车内的SKU,然后根据SKU生成大量随机字符串(16个字母数字字符)。

>

  • 如果购物车中的项目(1)是SKU“ABC”,则为相应订单生成并存储(x)个唯一字符串。

    如果购物车中的项目(2)为SKU“DEF”,则为相应订单生成并存储(y)个唯一字符串。

    我已经查看了woocommerce\u add\u order\u item\u metahook,但我似乎无法访问我创建的与此hook关联的函数中的商品数据?

    我现在正在使用

    add_action( 'woocommerce_add_order_item_meta', 'experiment_add_order_item_meta', 10, 3 );
    function experiment_add_order_item_meta( $item_id, $values, $cart_item_key  ) {
        // Get a product custom field value
        $custom_field_value = 'hithere';
    
        // Update order item meta
        if ( ! empty( $custom_field_value ) ){
            wc_add_order_item_meta( $item_id, 'meta_key1', $custom_field_value, false );
        }
    }
    

    但我在尝试从这一点上获得产品SKU时迷失了方向。我无法在函数中var\u dump()查看$values等?

  • 共有1个答案

    孟正志
    2023-03-14

    说明/使用的功能

    • woocommerce\u add\u order\u item\u metahook自woocommerce 3以来已被弃用。改用woocommerce\u checkout\u create\u order\u line\u item
    • WC\u产品::获取库存单位($context) -获取SKU(库存单位)-产品唯一ID。
    • 有关不同选项,请参见PHP随机字符串生成器。我曾经https://stackoverflow.com/a/13212994/11987538 安塞尔密码

    所以你得到:

    function generate_random_string( $length = 16 ) {
        return substr( str_shuffle( str_repeat( $x = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', ceil( $length / strlen( $x ) ) ) ), 1, $length );
    }
     
    function action_woocommerce_checkout_create_order_line_item( $item, $cart_item_key, $values, $order ) {
        // The WC_Product instance Object
        $product = $item->get_product();
        
        // Get product SKU
        $product_sku = $product->get_sku();
        
        // Generate random string
        $random_string = generate_random_string();
        
        // Compare
        if ( $product_sku == 'ABC' ) {
            $item->update_meta_data( '_random_string', $random_string );
        } elseif ( $product_sku == 'DEF' ) {
            $item->update_meta_data( '_random_string', $random_string );        
        } elseif ( $product_sku == 'GHI' ) {
            $item->update_meta_data( '_random_string', $random_string );        
        } else {
            $item->update_meta_data( '_random_string', $random_string );
        }   
    }
    add_action( 'woocommerce_checkout_create_order_line_item', 'action_woocommerce_checkout_create_order_line_item', 10, 4 );
    

     类似资料:
    • 这有点奇怪,但是我很难找到如何做到这一点的答案: 我试图创建一个自定义查询,获取WooCommerce订单中包含的所有产品(及其元)。 例如,假设我有这些订单悬而未决: 产品1 产品2 产品3 产品4 产品5 产品6 我的目标是根据这些已订购的产品创建一个列表,该列表由产品的元数据进行订购。大概是这样的: 产品1 产品3 产品4 但同样,这些只是订单中的产品(包括其数量)。 我面临的问题是,数据库

    • 当从管理员向订单添加产品时,我尝试将自定义产品元添加到订单项元。这是我的代码,它在后端什么都不做。。。

    • 我想在不购买插件的情况下实现这一点。 不幸的是,我无法通过结帐阶段。 在这里我的步骤: //1属性的创建 //2保存属性 //3在前端显示属性 //4验证属性 //5将属性添加到购物车 //6在购物车中显示属性 因此,客户可以在产品页面中看到该字段,填充该字段并将产品添加到购物车,并在购物车页面中看到自己的自定义文本。直到现在一切都好。 但是,在退房时,我丢失了有关Embroed文本的信息,我无法

    • 是否有一种方法可以在WooCommerce订单页面的每个产品下显示我的自定义SKU? 当我编辑产品时,自定义sku显示良好,但它不会显示在产品的订单页面中。我需要在订单上显示此信息,以便Zapier可以将其与产品的Visma帐户软件ArticleID匹配。 此尝试基于如何向WooCommerce产品添加(第二个)自定义sku字段的解决方案?

    • 基于将产品自定义字段保存为自定义订单项元数据的WooCommerce管理手动订单 我有这些代码来显示从前端下的订单的产品重量和尺寸,但我无法让它们用于从后端手动下的订单。当我添加产品时,我看不到重量和尺寸,它们也不会显示在页面上以支付订单、收到订单和发送电子邮件。 这是我的代码: 在任何地方展示并保存产品的重量。 到处显示和保存产品尺寸。

    • 在函数的单个产品页面中获取产品的SKU时,我遇到了很多麻烦。php。我有多个单一产品页面,我希望根据产品显示不同的文本。我已经创建了一个子主题,我正在处理函数。php文件。我不熟悉wordpress和编辑主题,所以我还不太了解操作顺序。我能够让代码循环运行,并为所有产品提供所有SKU,但这与我所处的实际页面无关。 我试过很多东西。常见的解决方案似乎是: 但那不起作用。由于某些原因,$producs