Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Woocommerce:如何向购物车项目添加元数据?_Woocommerce - Fatal编程技术网

Woocommerce:如何向购物车项目添加元数据?

Woocommerce:如何向购物车项目添加元数据?,woocommerce,Woocommerce,我有一个数字产品,它用数量和价格来描述,但它还需要3个数字来完全指定它(Unix日期等)。问题:如何将这些号码放入购物车 据我所知,有两种可能的处理方法: 产品变体 产品自定义字段 看起来变体只能处理有限范围内的离散值(即红/黄/绿、S/M/L等),不能处理一般整数,如日期。这将留下自定义字段。我想我说的对,自定义字段是产品发布页面上的普通元数据,因此我可以使用get\u post\u meta和update\u post\u meta处理它们 因此,如果我选择自定义字段,那么我将在订购期间更新

我有一个数字产品,它用数量和价格来描述,但它还需要3个数字来完全指定它(Unix日期等)。问题:如何将这些号码放入购物车

据我所知,有两种可能的处理方法:

  • 产品变体
  • 产品自定义字段
  • 看起来变体只能处理有限范围内的离散值(即红/黄/绿、S/M/L等),不能处理一般整数,如日期。这将留下自定义字段。我想我说的对,自定义字段是产品发布页面上的普通元数据,因此我可以使用
    get\u post\u meta
    update\u post\u meta
    处理它们

    因此,如果我选择自定义字段,那么我将在订购期间更新product page字段,然后在创建
    WC_订单
    时在签出期间读回该字段,并将该字段添加到新订单中。然而,这是行不通的。我无法更改产品页面上的元数据,因为该产品对所有客户都是全局的,并且此操作会干扰其他客户换句话说,您无法在产品中存储订单特定信息,因此这两个选项都不起作用。

    那么,如何存储临时产品元数据并在订购和结帐阶段(即
    WC\u Cart
    WC\u Order
    之间)之间传递它呢


    一种选择是将其存储为用户元数据(或会话数据),但必须有更好的方法-有什么想法吗?

    事实证明,使用会话数据很容易做到这一点。将项目添加到购物车时(请参阅
    add\u to\u cart\u action
    的源代码),您将创建一个会话变量,其中包含所有附加元数据:

      WC()->session->set(
         'my_session_var_name',
         array(
            'members' => $members,
            'start'   => $start,
            'expiry'  => $expiry,
            'etc'     => $etc));
    
    add_action(
       'woocommerce_add_order_item_meta', 'hook_new_order_item_meta', 10, 3);
    
    function hook_new_order_item_meta($item_id, $values, $cart_item_key) {
       $session_var  = 'my_session_var_name';
       $session_data = WC()->session->get($session_var);
       if(!empty($session_data))
          wc_add_order_item_meta($item_id, $session_var, $session_data);
       else
          error_log("no session data", 0);
    }
    

    当用户签出时,购物车数据消失,并创建新订单。您可以连接到
    woocommerce\u add\u order\u item\u meta
    将会话元数据添加到order元数据:

      WC()->session->set(
         'my_session_var_name',
         array(
            'members' => $members,
            'start'   => $start,
            'expiry'  => $expiry,
            'etc'     => $etc));
    
    add_action(
       'woocommerce_add_order_item_meta', 'hook_new_order_item_meta', 10, 3);
    
    function hook_new_order_item_meta($item_id, $values, $cart_item_key) {
       $session_var  = 'my_session_var_name';
       $session_data = WC()->session->get($session_var);
       if(!empty($session_data))
          wc_add_order_item_meta($item_id, $session_var, $session_data);
       else
          error_log("no session data", 0);
    }
    

    就这样。不过,您必须弄清楚如何获取订单元数据,并使用它做一些有用的事情。您可能还希望清除会话数据,从钩子到
    woocommerce\u-before\u-cart\u-item\u-quantity\u-zero
    ,以及
    woocommerce\u-cart\u-tilled
    。这其中有一些示例代码。

    woocommerce\u add\u order\u item\u meta
    已被删除:可能可以使用
    wc\u add\u order\u item\u meta
    :@HarkályGergő函数已弃用,钩子仍然可以使用。现在钩子也弃用了<现在应使用代码>新商业\新订单\项目。