如何在 WooCommerce 中的购物车和订单评论中的产品名称后显示 ACF 字段?

How to display ACF field after the product name on the cart and order reviews in WooCommerce?

我在 WooCommerce 产品上为 post 类型设置了高级自定义字段。所以每个产品都有 1 个唯一的自定义字段。

我正在尝试在购物车和结帐页面以及订单 table 信息的产品名称后显示自定义字段。

但是,运行 出现问题,因为我的代码没有显示任何输出。

任何关于如何实现这一目标的建议将不胜感激。谢谢

// Display the ACF custom field 'location' after the product title on cart / checkout page.
function cart_item_custom_feild( $cart_item ) {
    $address = get_field( 'location', $cart_item['product_id'] );
    echo "<div>Address: $address.</div>";
}
add_action( 'woocommerce_after_cart_item_name', 'cart_item_custom_feild', 10, 1 );

我也试过 the_field 而不是 get_field

1- 在购物车页面和结帐页面上的订单评论table

如果您需要 运行 在购物车页面 结帐页面上的订单评论 table,您可以使用 woocommerce_cart_item_name 过滤挂钩,像这样:

add_filter('woocommerce_cart_item_name', 'order_review_custom_field', 999, 3);

function order_review_custom_field($product_name, $cart_item, $cart_item_key)
{
    $address = get_field('location', $cart_item['product_id']);

    return ($address) ?
        $product_name . '<div>Address: ' . $address . '</div>'
        :
        $product_name . '<div>Address: No address found!</div>';

}

这是购物车页面上的结果:

并在结帐页面table订单评论:


2- 在电子邮件和订单详细信息中 table 在感谢页面上:

我们可以使用 woocommerce_order_item_meta_end 操作挂钩将自定义字段值附加到电子邮件模板上产品名称的末尾:

add_action("woocommerce_order_item_meta_end", "email_order_custom_field", 999, 4);

function email_order_custom_field($item_id, $item, $order, $plain_text)
{
    $address = get_field('location', $item->get_product_id());

    echo ($address) ?
        '<div>Address: ' . $address . '</div>'
        :
        '<div>Address: No address found!</div>';
};

这是电子邮件中的结果:

并在感谢页面的订单详情 table 中:


此答案已在 woocommerce 5.7.1 上进行了全面测试并且有效。