在WooCommerce购物车中回应特定的产品属性和元数据

时间:2016-08-07 10:34:42

标签: php wordpress woocommerce cart product

更新(与作者评论相关):

我想自定义WooCommerce cart.php,使用 Essential Grid premium plugin 显示一些在产品页面上运行正常的元数据。

我想显示一些产品属性字段以及我使用Essential Grid插件的元字段创建者创建的一些自定义元字段。

进行测试时,我使用 'Height' 属性(因此 'pa_height' )和自定义字段 'Age' 哪个slu is 'eg-age-cal'

目前,我已尝试使用以下内容:

<?php echo get_post_meta($product_id, 'pa_height', true );?>

还有:

<?php echo get_post_meta($product_id, 'eg-age-cal', true );?>

但这些似乎不起作用。

我已设法使用以下代码获取代码:

<?php echo get_post_meta($product_id, '_regular_price', true );?>

所以我知道代码正在运行。

我只需要帮助解决问题,如何从这些自定义属性和自定义字段中获取值。

感谢。

1 个答案:

答案 0 :(得分:5)

  

更新(与WC 3 +的兼容性)

在您在下面的评论中做出解释之后,我发现您正在使用Essential Grid premium plugin (商业插件)来创建与您的wooCommerce产品相关的一些自定义字段和属性。

  

此时,我无法帮助,因为我以前从未使用过这个插件,而且我不知道数据库中存储数据的位置。

我认为您不能使用常用的WordPress / WooCommerce功能来获取此数据,这就是您不会像往常一样使用get_post_meta()获取任何数据的原因...... < / p>

  

获得帮助的最佳方式是:
   - 搜索/浏览数据库中的自定义字段数据    - 在 Essential Grid 插件中搜索/询问作者支持线程。

  

我原来的回答:

对于产品中定义的属性,使用 get_post_meta() 功能 $product_id 变量,您需要以这种方式使用它来获取所需的数据(这是一个值数组):

// getting the defined product attributes
$product_attr = get_post_meta( $product_id, '_product_attributes' );

// displaying the array of values (just to test and to see output)
echo var_dump( $product_attr );

你也可以使用get_attributes() (更推荐)这个函数:

// Creating an object instance of the product
$_product = new WC_Product( $product_id );

// getting the defined product attributes
$product_attr = $_product->get_attributes();

// displaying the array of values (just to test and to see output)
echo var_dump( $product_attr );

所有代码都经过测试并正常运行。

  

现在将CART数据设置为COOKIES和会话,您需要使用 WC()->cart 语法来获取购物车数据和商品

因此,您可以使用此类代码获取购物车中的商品(产品):

foreach ( WC()->cart->get_cart() as $cart_item ) {
    $product = $cart_item['data'];
    if(!empty($product)){

        // getting the defined product attributes
        $product_attr = $_product->get_attributes();

        // displaying the attributes array of values (just to test and to see output)
        echo var_dump( $product_attr ) . '<br>';
    }
}

这将显示CART中每个产品的属性值数组。

基于this thread的解决方案,在相同的代码段中使用 wc_get_product_terms() 来获取您的属性:

foreach ( WC()->cart->get_cart() as $cart_item ) {
    $product = $cart_item['data'];
    if(!empty($product)){

        // compatibility with WC +3
        $product_id = method_exists( $product, 'get_id' ) ? $product->get_id() : $product->id;

        // Getting "height" product attribute
        $myAttribute = array_shift( wc_get_product_terms( $product_id, 'pa_height', array( 'fields' => 'names' ) ) );
        echo $myAttribute . '<br>';
    }
}

参考文献: