无法获得WooCommerce产品的自定义属性

时间:2020-02-15 08:59:53

标签: wordpress woocommerce hook-woocommerce

我在WooCommerce中创建订单后尝试保存自定义元数据。我用woocommerce_new_order_item钩子尝试了一下,总的来说可以用。但是我需要存储订购产品中的自定义属性。.但是我无法获得它。

我尝试过的事情:

add_action('woocommerce_new_order_item','add_basic_meta_for_new_quote',10,3); // add extra order metas

function add_basic_meta_for_new_quote($item_id, $values, $cart_item_key)
{
    $angebotstext = get_post_meta($item_id, 'angebotstext', false);
    wc_add_order_item_meta($item_id, 'angebotstext', $angebotstext);
}

add_action('woocommerce_new_order_item','add_basic_meta_for_new_quote',10,3); // add extra order metas

function add_basic_meta_for_new_quote($item_id, $values, $cart_item_key)
{
    global $product;
    $angebotstext = $product->get_attribute( 'pa_angebotstext' );
    wc_add_order_item_meta($item_id, 'angebotstext', $angebotstext);
}

该属性保存在此处:

enter image description here

...,并且meta_value的结果始终为空,NULL或a:0:{}

你有什么主意吗?

-----编辑----

它以这种方式工作:

    add_action('woocommerce_new_order_item','add_basic_meta_for_new_quote',10,3); // add extra order metas

function add_basic_meta_for_new_quote($item_id, $item, $order_id )
{

    if ($order_id) {
        $order = wc_get_order( $order_id );
  }

    # Iterating through each order items (WC_Order_Item_Product objects in WC 3+)
    if ($order) {
        foreach ( $order->get_items() as $item_id => $item_values ) {

            // Product_id
            $product_id = $item_values->get_product_id();

            $product = wc_get_product($product_id);
            $angebotstext = $product->get_attribute('Angebotstext');
            if ( !empty($angebotstext) && $angebotstext != NULL ) {
                wc_add_order_item_meta($item_id, 'Angebotstext' , $angebotstext);
      }
        }
  }
}

但是:这段代码两次将我的自定义属性添加为meta...。为什么呢? ?

1 个答案:

答案 0 :(得分:1)

这里的主要问题是订单中是否包含多个产品,因此您将面对同一订单的多个更新的问题。

为避免这种情况或选择以正确的方式进行处理,以下是一些建议:

要使其适用于多种产品:
更改了此部分:

wc_add_order_item_meta($item_id, 'Angebotstext _'.$product_id , $angebotstext);

这将通过在每个meta_key的末尾添加产品ID来为每个产品添加一个新的自定义元,并且meta_value将是该属性的产品唯一值。 因此您将在订单页面上找到此自定义字段:

  • Angebotstext_123 =产品属性。
  • Angebotstext_485 =产品
  • 属性。 Angebotstext_951 =产品属性。<​​br/>
    “ 123”,“ 485”是产品ID,该meta_key的元值将是该产品属性。<​​/ li>

为防止其多次更新:

if ($order) {
     $angebotstext ='';
        foreach ( $order->get_items() as $item_id => $item_values ) {

            // Product_id
            $product_id = $item_values->get_product_id();

            $product = wc_get_product($product_id);
            $angebotstext = $product->get_attribute('Angebotstext');
            $prev_angebotstext = $angebotstext;
            if ( !empty($angebotstext) && $angebotstext != NULL && $angebotstext != $prev_angebotstext ) {
                wc_add_order_item_meta($item_id, 'Angebotstext' , $angebotstext);
      }
        }
  }

“ $ prev_angebotstext”是上一个项目属性。

if ( !empty($angebotstext) && $angebotstext != NULL && $angebotstext != $prev_angebotstext )

此条件将检查当前产品属性是否等于先前的产品属性,如果是,它将不会再次更新订单。

谢谢!