首页 文章

在WooCommerce中将产品自定义字段值作为变量获取

提问于
浏览
1

我正在使用Woocommerce注册课程;每个类/产品最多有20个自定义字段,我需要将其作为变量返回,以便高度自定义结帐和订单详细信息页面以及客户电子邮件模板 .

我只是想用钩子添加所有自定义元数据,因为我需要非常严格地控制输出 . 例如,以下答案适用于在购物车页面中包含自定义字段:Display Custom Field's Value in Woocommerce Cart & Checkout items

但是我希望它们在结帐时,订购详细信息和电子邮件,完全控制它们出现的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 . '.';

但它不起作用......

如何访问和使用与特定产品关联的自定义字段值?

1 回答

  • 1

    首先 $product->ID 将无法正常工作 . So your problem is how to get the product ID.

    Multiple cases

    1)在商店或单个产品页面的存档页面中:

    • 使用 get_the_id() 将主要为您提供产品ID(帖子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 );
        ## … / … 
    }
    
    • 现在 product variations ,如果你需要 the parent variable product 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 );
        ## … / … 
    }
    
    • 现在 product variations ,如果你需要 the parent variable product 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 );
        ## … / … 
    }
    

    所以现在由你决定 .

相关问题