使用 ACF 在 WooCommerce 购物车中获取可变产品的自定义字段

Get a custom field in WooCommerce cart for variable products too using ACF

在 WooCommerce 中,我使用高级自定义字段插件来显示名为 'product_cart_image' 的自定义字段(图像),它替换了购物车中产品的默认图像。该代码适用于简单产品,但不适用于可变产品。对于这些,我得到了默认图像。

以下代码进入 cart.php 模板文件:

foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
    $_product   = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key );
    $product_id = apply_filters( 'woocommerce_cart_item_product_id', $cart_item['product_id'], $cart_item, $cart_item_key ); 
    ?>
    <span class="product-thumbnail">
    <?php
    $product_image      = $_product->get_image();
    $product_cart_image = get_field('product_cart_image', $_product->get_id());

    if ( ! empty ( $product_cart_image ) ) {
        $product_image = wp_get_attachment_image( $product_cart_image['ID'] );
    }

    $thumbnail = apply_filters( 'woocommerce_cart_item_thumbnail', $product_image, $cart_item, $cart_item_key );

    if ( ! $product_permalink ) {
        echo $thumbnail;
    } else {
        printf( '<a href="%s">%s</a>', esc_url( $product_permalink ), $thumbnail ); 
    }
    ?>
    </span>
    <?php
}

如何让它也适用于可变产品?

将可变产品添加到购物车时,对于购物车项目 cart,您需要获取可变产品 ID 而不是变体 ID,因此您将替换以下行:

$product_cart_image = get_field('product_cart_image', $_product->get_id());

作者:

$product_cart_image = get_field('product_cart_image', $cart_item['product_id']);

现在它应该可以工作了……所以在你的代码中:

foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
    $_product   = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key );
    $product_id = apply_filters( 'woocommerce_cart_item_product_id', $cart_item['product_id'], $cart_item, $cart_item_key ); 
    ?>
    <span class="product-thumbnail">
    <?php
    $product_image      = $_product->get_image();
    $product_cart_image = get_field('product_cart_image', $cart_item['product_id']);

    if ( ! empty ( $product_cart_image ) ) {
        $product_image = wp_get_attachment_image( $product_cart_image['ID'] );
    }

    $thumbnail = apply_filters( 'woocommerce_cart_item_thumbnail', $product_image, $cart_item, $cart_item_key );

    if ( ! $product_permalink ) {
        echo $thumbnail;
    } else {
        printf( '<a href="%s">%s</a>', esc_url( $product_permalink ), $thumbnail ); 
    }
    ?>
    </span>
    <?php
}