当前位置: 首页 > 知识库问答 >
问题:

在WooCommerce 3中到处显示ACF产品自定义字段

戈嘉慕
2023-03-14

我正在使用WooCommerce和高级自定义字段(ACF)插件构建一个网站。我已经创建了两个名为“plant”和“amount”的ACF自定义字段。

我试图在前端显示它们,但目前只有自定义字段“工厂”到处显示。我一直在网上找,运气不好。

add_action( 'woocommerce_before_add_to_cart_button', 'add_custom_field', 0 );

function add_custom_field() {
    global $product;             // Changed this

    // Added this too (compatibility with WC +3) 
    $product_id = method_exists( $product, 'get_id' ) ? $product->get_id() : $product->id;

    echo "<div class='produto-informacoes-complementares'>";
    echo get_field( 'plant', $product_id );
    echo "</div>";
    echo "<div class='produto-informacoes-complementares'>";
    echo get_field( 'amount', $product_id );
    echo "</div>";


    return true;
}


add_filter( 'woocommerce_add_cart_item_data', 'save_my_custom_product_field', 10, 2 );

function save_my_custom_product_field( $cart_item_data, $product_id ) {

    $custom_field_value = get_field( 'plant', $product_id, true );
     $custom_field_value = get_field( 'amount', $product_id, true );

    if( !empty( $custom_field_value ) ) 
    {
        $cart_item_data['plant'] = $custom_field_value;
         $cart_item_data['amount'] = $custom_field_value;

        // below statement make sure every add to cart action as unique line item
        $cart_item_data['unique_key'] = md5( microtime().rand() );
    }
    return $cart_item_data;
}

add_filter( 'woocommerce_get_item_data', 'render_meta_on_cart_and_checkout', 10, 2 );

function render_meta_on_cart_and_checkout( $cart_data, $cart_item ) {
    $custom_items = array();
    // Woo 2.4.2 updates
    if( !empty( $cart_data ) ) {
        $custom_items = $cart_data;
    }
    if( isset( $cart_item['plant'] )) {
        $custom_items[] = array( "name" => "גודל עציץ", "value" => $cart_item['plant'] );
        $custom_items[] = array( "name" => "כמות במגש", "value" => $cart_item['amount'] );
        
    }
    return $custom_items;
}

function add_order_item_meta_acf( $item_id, $values ) {

    wc_add_order_item_meta( $item_id, 'גודל עציץ', $values [ 'plant' ] );
    wc_add_order_item_meta( $item_id, 'גודל עציץ', $values [ 'amount' ] );
  }
add_action( 'woocommerce_add_order_item_meta', 'add_order_item_meta_acf' , 10, 2);

共有1个答案

姜学海
2023-03-14

您的代码有点过时,并且有一些错误。使用以下命令在任何地方显示产品ACF自定义字段(产品页面、购物车、结帐、订单和电子邮件通知):

// Display on product page
add_action( 'woocommerce_before_add_to_cart_button', 'display_acf_single_product_pages', 1 );
function display_acf_single_product_pages() {
    global $product;

    $plant  = get_field( 'plant',  $product->get_id() );
    $amount = get_field( 'amount', $product->get_id() );

    if ( ! empty($plant) && ! empty($amount) ) {
        echo '<div class="produto-informacoes-complementares">';

        if ( ! empty($plant) ) {
            echo '<div class="plant"><strong>' . __("Size", "woocommerce") . '</strong>: ' . $plant . '</div>';
        }

        if ( ! empty($amount) ) {
            echo '<div class="amount"><strong>' . __("Amount", "woocommerce") . '</strong>: ' . $amount . '</div>';
        }

        echo '</div>';
    }
}

// Display on cart and checkout
add_filter( 'woocommerce_get_item_data', 'display_acf_on_cart_and_checkout', 10, 2 );
function display_acf_on_cart_and_checkout( $cart_data, $cart_item ) {
    $plant  = get_field( 'plant', $cart_item['product_id'] );
    $amount = get_field( 'amount', $cart_item['product_id'] );

    if ( ! empty($plant) ) {
        $custom_items[] = array( "name" => __("Size", "woocommerce"),  "value" => $plant  );
    }

    if ( ! empty($amount) ) {
        $custom_items[] = array( "name" => __("Amount", "woocommerce"), "value" => $amount );
    }
    return $custom_items;
}

// Display on orders and email notifications (save as custom order item meta data)
add_action( 'woocommerce_checkout_create_order_line_item', 'display_acf_on_orders_and_emails', 10, 4 );
function display_acf_on_orders_and_emails( $item, $cart_item_key, $values, $order ) {
    $plant  = get_field( 'plant', $values['product_id'] );
    $amount = get_field( 'amount', $values['product_id'] );

    if ( ! empty($plant) ) {
        $item->add_meta_data( __("Size", "woocommerce"), $plant );
    }

    if ( ! empty($amount) ) {
        $item->add_meta_data( __("Amount", "woocommerce"), $amount );
    }
}

代码进入函数。活动子主题(或活动主题)的php文件。测试和工作。

 类似资料:
  • 我成功地在后端的产品变化中的WooCommerce中创建了一个ACF自定义字段。该字段在每个变化中正确显示。 但是在编辑变体中的此字段或其他字段后,我无法再保存整个变体选项卡。加载/保存指示器圆圈继续无限旋转。并且定制字段未显示在前端的单个产品变体中。 我所做的是将以下代码添加到我的: 任何帮助都将不胜感激。

  • 在woocommerce上,我使用以下代码在购物车和结账时呈现一些产品自定义字段: 如何在订单中显示自定义产品字段wccpf_输入_product_id'值? 谢谢

  • 我为woocommerce产品“coffee_type”创建了自定义分类法。我为此分类法创建了一个ACF图像字段“coffee\u type\u image”。 我想在产品页面上显示带有链接的图像,而不是分类法的名称。我在这里读了大多数关于在分类法上显示acf图像的文章,但每一篇都是关于使用归档分类法页面而不是产品页面。我正在编辑single-product.php(确切地content-sing

  • 所以我差点就明白了,但这封电子邮件的最后一个细节让我的头脑有点纠结。 我需要显示产品的ACF(高级自定义字段)字段(在本例中,这是一个自定义发货时间) 但只有在新订单电子邮件(处理订单和等待付款订单发送到客户端),然后新订单电子邮件到管理员。 这是我发现的主要方式:“在Woocommerce交易电子邮件中显示产品ACF字段值”提前感谢@LoicTheAztec 我还向它添加了一些条件设置(请注意,

  • 是否有一种方法可以在WooCommerce订单页面的每个产品下显示我的自定义SKU? 当我编辑产品时,自定义sku显示良好,但它不会显示在产品的订单页面中。我需要在订单上显示此信息,以便Zapier可以将其与产品的Visma帐户软件ArticleID匹配。 此尝试基于如何向WooCommerce产品添加(第二个)自定义sku字段的解决方案?

  • 这个问题是关于如何在WooCommerce订单中显示产品自定义字段(自定义SKU)的,这是对我前面问题的回答。 如何使产品自定义字段(自定义SKU)仅在每个订单项目的管理订单编辑页面中可见? 此外,它不适用于手动订单。如何在手动订单上显示产品自定义字段(自定义SKU)?

  • 目前正在使用WordPress 5.1.1和WooCommerce 3.5.7。我的WooCommerce商店有大约500种产品,由简单和多变的产品组成。 每个产品自然都有一个SKU,但每个产品也有一个称为“商品代码”的唯一ID代码。我向特定行业销售特定产品。 我已经在我的functions.php文件中添加了简单和可变产品的自定义字段的代码,目前效果很好。 我的问题是,我试图让“商品代码”出现在

  • 我的职责是编写以下代码: 有没有人能把我推向正确的方向,让我在购物车、结帐、邮件和订单中获得正确的值? 最初取自这里在WooCommerce 3中到处显示ACF产品自定义字段