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

在商业订单和电子邮件中添加和显示自定义购物车项目数据

司马萧迟
2023-03-14

我有一个定制的WooCommerce产品类型称为彩票。我需要一个自定义选择字段(因为它不是一个可变产品),所以我添加了一个。

一切都很好,我在购物车和结帐中也获得了价值,但我无法在管理员订单或订单邮件(客户和管理员)中获得价值。

下面是我在函数中添加的代码。php。我做错了什么?

function hpplrs_display_custom_field() {
    global $post;
    // Check for the custom field value
    $product = wc_get_product( $post->ID );
    $title = $product->get_meta( 'custom_text_field_title' );
    // display in lottery.php

    
        printf(
            '<div class="col-md-12 small-gap">
                <div class="size_select">
                    <select id="hpplrs-size-select" name="hpplrs-size-select" title="Size" class="size form-control">
                        <option value="" disabled selected>' . __('Select your size', 'hpplrs') . '</option>
                        <option value="option 1">option 1</option>
                        <option value="option 2">option 2</option>
                        <option value="option 3">option 3</option>
                    </select>
                </div>
            </div>',
            esc_html( $title )
        );
        
        
        
}
add_action( 'hpplrs_before_single_product_qty', 'hpplrs_display_custom_field' );

/**
 * Add the text field as item data to the cart object
 * @since 1.0.0
 */
function hpplrs_add_custom_field_item_data( $cart_item_data, $product_id, $variation_id, $quantity ) {
    if( ! empty( $_POST['hpplrs-size-select'] ) ) {
        // Add the item data
        $cart_item_data['title_field'] = $_POST['hpplrs-size-select'];
        $product = wc_get_product( $product_id ); // Expanded function
        $price = $product->get_price(); // Expanded function
    }
    return $cart_item_data;
}
add_filter( 'woocommerce_add_cart_item_data', 'hpplrs_add_custom_field_item_data', 10, 4 );


/**
 * Display the custom field value in the cart
 * @since 1.0.0
 */
function hpplrs_cart_item_name( $name, $cart_item, $cart_item_key ) {
    if( isset( $cart_item['title_field'] ) ) {
      $name .= sprintf(
            '<p class="size"><span>'. __('Size', 'hpplrs') .':</span> %s</p>',
            esc_html( $cart_item['title_field'] )
        );
    }
    return $name;
}
add_filter( 'woocommerce_cart_item_name', 'hpplrs_cart_item_name', 10, 3 );


/**
 * Add custom field to order object
 */
function hpplrs_add_custom_data_to_order( $item, $cart_item_key, $values, $order ) {
    foreach( $item as $cart_item_key=>$values ) {
        if( isset( $values['title_field'] ) ) {
            $item->add_meta_data( _e( 'Size', 'hpplrs' ), $values['title_field'], true );
        }
    }
}
add_action( 'woocommerce_checkout_create_order_line_item', 'hpplrs_add_custom_data_to_order', 10, 4 );

共有1个答案

舒宏富
2023-03-14

上一个函数中有一些错误…请用以下内容替换它:

/**
 * Set custom field as visible order item meta data (displayed on orders and email notifications)
 */
add_action( 'woocommerce_checkout_create_order_line_item', 'hpplrs_add_custom_data_to_order', 10, 4 );
function hpplrs_add_custom_data_to_order( $item, $cart_item_key, $values, $order ) {
    if( isset($values['title_field']) && ! empty($values['title_field']) ) {
        $item->add_meta_data( __( 'Size', 'hpplrs' ), $values['title_field'] );
    }
}

测试和工作。现在,您的自定义字段将显示在订单和电子邮件通知上。

 类似资料:
  • 关于WooCommerce。我有我要添加到购物车的自定义数据。在functions.php文件中,我有以下功能。 这是可行的,自定义数据显示在购物车中。但是,定制数据不会显示在订单和订单电子邮件上。我在Stackoverflow上看到了一些解决这个问题的答案,但我无法让它们适用于我的情况。我提到的解决方案是。 在Woocommerce中保存和显示订单项自定义元数据 显示和保存添加的自定义购物车项目

  • 我使用的是一个自定义的帖子类型和集成的woocommerce,我可以在页面上添加一个AddtoCart按钮,并可以将其添加到cart,所以效果很好 这是我的密码 但现在我需要在产品页面上添加一些自定义字段,一个包含颜色“黑色”和“白色”的下拉列表,这只是一个普通的下拉列表。当我选择一个将在购物车上显示在产品名称下的值时,我该怎么做

  • 我需要在管理订单页面、谢谢和电子邮件通知中显示我的自定义签出字段。 我正在使用验证和保存WooCommerce回答代码中特定支付网关的额外结账字段来显示,验证和保存我的自定义字段。 从显示管理订单详细信息上的自定义字段数据,我试图显示自定义字段保存的输入值。 这是我到目前为止的代码: 但它不起作用。该字段不会附加到数据库中,但不会显示在任何位置: 如何正确显示字段?

  • 在WooCommerce中,我启用了完美品牌WooCommerce插件来显示产品品牌。我希望品牌出现在整个周期(单个产品页面,购物车,结账,迷你购物车,订单和电子邮件)的产品名称之前。 我能够在购物车和结帐页面中的产品名称之前显示相关品牌,使用“将Woocommerce品牌名称添加到购物车项目产品名称”回答代码稍微更改(使用插件自定义分类法): 但我不知道如何在订单和电子邮件通知中实现这一点。