在Woocommerce购物车和结帐中显示特定的父产品属性

时间:2018-08-05 05:15:59

标签: php wordpress woocommerce cart checkout

我为产品分配了“金属类型”属性,但未用作变体的一部分,我仍然想获取每个父产品的“金属类型”并将其显示在购物车/结帐页面中。

要获取所选“金属类型”术语的名称,我使用以下内容:

$_product = $cart_item['data]'];
$parent_id = $_product->get_parent_id();
$parent_attributes = wc_get_product($parent_id)->get_attributes();
$term_id = $parent_attributes['pa_metal-type']['data']['options'][0];
$term = get_term_by('id', $termId, 'pa_metal-type');
$term_name = $term->name;

我尝试使用woocommerce_get_item_data过滤器似乎没有用,我知道我在某个地方犯了一个错误,我没有足够的经验去知道在哪里:

// Add metal type to cart line items
add_filter( 'woocommerce_get_item_data', 'get_metal_type', $cart_data, $cart_item );

function get_metal_type($cart_data, $cart_item) {

  $_product = $cart_item['data]'];
  $parent_id = $_product->get_parent_id();
  $parent_attributes = wc_get_product($parent_id)->get_attributes();
  $term_id = $parent_attributes['pa_metal-type']['data']['options'][0];
  $term = get_term_by('id', $termId, 'pa_metal-type');
  $term_name = $term->name;

  $custom_items = array();

  if( !empty( $cart_data ) ) { $custom_items = $cart_data; }

  if( !empty($term) ) {

      $custom_items[] = array(
          'key'   => 'Metal Type',
          'value' => $term_name,
        );

      return $custom_items;

  }
}

任何见解将不胜感激!

1 个答案:

答案 0 :(得分:0)

您正在使事情变得更加复杂。请尝试以下操作:

// Display the Meta type in cart and checkout
add_filter( 'woocommerce_get_item_data', 'display_attribute_metal_type', 90, 2 );
function display_attribute_metal_type( $cart_item_data, $cart_item ){
    if( $cart_item['variation_id'] > 0 ) {
        // Get the parent variable product object instance
        $product = wc_get_product( $cart_item['product_id'] );

        // Get the "Metal type" product attribute term name
        $term_names = $product->get_attribute( 'metal-type' );

        if( isset($term_names) && ! empty($term_names) ){
            // Add "Metal type" data to be displayed
            $cart_item_data[] = array(
                'name' => __('Metal Type'),
                'value' => $term_names,
            );
        }
    }
    return $cart_item_data;
}

代码进入您的活动子主题(或活动主题)的function.php文件中。经过测试,可以正常工作。