更新(与作者评论相关):
我想自定义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 );?>
所以我知道代码正在运行。
我只需要帮助解决问题,如何从这些自定义属性和自定义字段中获取值。
感谢。
答案 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>';
}
}
参考文献: