在 WooCommerce 中获取产品自定义字段值作为变量
Get product custom field values as variables in WooCommerce
我正在使用 Woocommerce 注册 类;每个 class/product 最多有 20 个自定义字段,我需要 return 作为变量,以便高度自定义结帐和订单详细信息页面以及客户电子邮件模板。
我不只是想添加所有带挂钩的自定义元数据,因为我需要对输出进行非常严格的控制。例如,以下答案适用于在购物车页面中包含自定义字段:
但我希望它们也出现在结帐、订单详细信息和电子邮件中,完全控制 HTML 它们出现的位置 (在某些情况下,它们也需要转换,例如,人类可读时间的 Unix 时间戳).
在 order-item-details.php
模板中,我尝试了以下操作:
$room = get_post_meta( $product->ID, 'room', true );
$room_number = get_post_meta( $product->ID, 'room_number', true );
$instructor = get_post_meta( $product->ID, 'instructor', true );
echo 'Your instructor is ' . $instructor . '.';
echo 'Your class is in ' . $room . '.';
但是没用……
如何访问和使用与特定产品关联的自定义字段值?
首先$product->ID
无论如何都行不通。 所以你的问题是如何获取产品ID。
多例
1) 在商店等存档页面或单品页面中:
使用 get_the_id()
将始终为您提供产品 ID(post ID)
$room = get_post_meta( get_the_id(), 'room', true );
如果未定义 $product
,您也可以将 global $product;
与 $product->get_id()
一起使用。
global $product;
$room = get_post_meta( $product->get_id(), 'room', true );
您还可以将 global $post;
与 $post->ID
一起使用(如果未定义 $post
):
global $post;
$room = get_post_meta( $post->ID, 'room', true );
2) 对于购物车商品(来自购物车对象):
// Loop through cart items
foreach( WC()->cart->get_cart() as $cart_item ){
// Get the WC_Product object (instance)
$product = $cart_item['data'];
$product_id = $product->get_id(); // get the product ID
$room = get_post_meta( $product->get_id(), 'room', true );
## … / …
}
现在对于产品变体,如果您需要获取父变量产品ID,您将使用:
// Get the parent product ID (the parent variable product)
$parent_id = $cart_item['product_id'];
$room = get_post_meta( $parent_id, 'room', true );
## … / …
3) 对于订单项 (来自定义的 WC_Order
对象 $order
):
// Loop through cart items
foreach( $order->get_items() as $item ){
// Get the Product ID
$product_id = $item->get_product_id();
$room = get_post_meta( $product_id, 'room', true );
## … / …
}
现在对于产品变体,如果您需要获取父变量产品ID,您将使用:
// Loop through cart items
foreach( $order->get_items() as $item ){
// Get the parent Product ID
$product = $item->get_product();
$parent_id = $product->get_parent_id(); // The parent product ID
$room = get_post_meta( $parent_id, 'room', true );
## … / …
}
现在就看你的了。
我正在使用 Woocommerce 注册 类;每个 class/product 最多有 20 个自定义字段,我需要 return 作为变量,以便高度自定义结帐和订单详细信息页面以及客户电子邮件模板。
我不只是想添加所有带挂钩的自定义元数据,因为我需要对输出进行非常严格的控制。例如,以下答案适用于在购物车页面中包含自定义字段:
但我希望它们也出现在结帐、订单详细信息和电子邮件中,完全控制 HTML 它们出现的位置 (在某些情况下,它们也需要转换,例如,人类可读时间的 Unix 时间戳).
在 order-item-details.php
模板中,我尝试了以下操作:
$room = get_post_meta( $product->ID, 'room', true );
$room_number = get_post_meta( $product->ID, 'room_number', true );
$instructor = get_post_meta( $product->ID, 'instructor', true );
echo 'Your instructor is ' . $instructor . '.';
echo 'Your class is in ' . $room . '.';
但是没用……
如何访问和使用与特定产品关联的自定义字段值?
首先$product->ID
无论如何都行不通。 所以你的问题是如何获取产品ID。
多例
1) 在商店等存档页面或单品页面中:
使用
get_the_id()
将始终为您提供产品 ID(post ID)$room = get_post_meta( get_the_id(), 'room', true );
如果未定义
$product
,您也可以将global $product;
与$product->get_id()
一起使用。global $product; $room = get_post_meta( $product->get_id(), 'room', true );
您还可以将
global $post;
与$post->ID
一起使用(如果未定义$post
):global $post; $room = get_post_meta( $post->ID, 'room', true );
2) 对于购物车商品(来自购物车对象):
// Loop through cart items
foreach( WC()->cart->get_cart() as $cart_item ){
// Get the WC_Product object (instance)
$product = $cart_item['data'];
$product_id = $product->get_id(); // get the product ID
$room = get_post_meta( $product->get_id(), 'room', true );
## … / …
}
现在对于产品变体,如果您需要获取父变量产品ID,您将使用:
// Get the parent product ID (the parent variable product) $parent_id = $cart_item['product_id']; $room = get_post_meta( $parent_id, 'room', true ); ## … / …
3) 对于订单项 (来自定义的 WC_Order
对象 $order
):
// Loop through cart items
foreach( $order->get_items() as $item ){
// Get the Product ID
$product_id = $item->get_product_id();
$room = get_post_meta( $product_id, 'room', true );
## … / …
}
现在对于产品变体,如果您需要获取父变量产品ID,您将使用:
// Loop through cart items foreach( $order->get_items() as $item ){ // Get the parent Product ID $product = $item->get_product(); $parent_id = $product->get_parent_id(); // The parent product ID $room = get_post_meta( $parent_id, 'room', true ); ## … / … }
现在就看你的了。