将自定义字段添加为订单上的物料元数据



>我已经为woocommerce产品添加了一个自定义字段,它与以下代码配合得很好。但我的问题是如何将其添加到cart_item_data

// Display Text in Admin Panel 
add_action('woocommerce_product_options_general_product_data', 'product_custom_text_field');
function product_custom_text_field()
{
    // Custom Product Text Field ( para Tex Area -> woocommerce_wp_textarea_input )
    woocommerce_wp_text_input(
        array(
        'id'          => '_optional_text_field',
        'label'       => __('Customize title', 'woocommerce'),
        'placeholder' => '',
        'desc_tip' => 'true',
        'description' => __('Customizable title for the field that the user must fill out.', 'woocommerce')
        )
    );
}

保存字段

add_action('woocommerce_process_product_meta', 'product_custom_text_field_save');
function product_custom_text_field_save($post_id)
{
    if (!empty($_POST['_optional_text_field'])) {
        update_post_meta($post_id, '_optional_text_field', esc_attr($_POST['_optional_text_field']));
    }
}
Display The Text in Product Page
    add_action('woocommerce_single_variation', 'display_text_field');
    function display_text_field()
    {
        global $post;
        if (get_post_meta($post->ID, '_optional_text_field', true)) {
            echo "<div class='titulo-c'><label>";
            echo get_post_meta($post->ID, '_optional_text_field', true);
            echo "</label></div>";
            return;
        }
        echo __('FREE LOCAL SHIPPING', 'woocommerce');
    }

到目前为止,它可以正常工作,现在我想将其添加到 cart_item_data ,使用以下代码,但它对我不起作用。

add_filter( 'woocommerce_add_cart_item_data', 'add_cart_item_data', 25, 2 );
function add_cart_item_data( $cart_item_meta, $product_id ) {
        $custom_data  = array() ;
        $custom_data[ "_optional_text_field"] = isset( $_POST['_optional_text_field'] ) ?  sanitize_text_field ( $_POST['_optional_text_field'] ) : "" ;
        $cart_item_meta ['custom_data']     = $custom_data ;

    return $cart_item_meta;
}

在购物车和结帐页面上显示自定义数据。

add_filter( 'woocommerce_get_item_data', 'get_item_data' , 25, 2 );
function get_item_data ( $other_data, $cart_item ) {
    if ( isset( $cart_item [ 'custom_data' ] ) ) {
        $custom_data  = $cart_item [ 'custom_data' ];
        $other_data[] = array( 'name' => 'Title',
                    'display'  => $custom_data['_optional_text_field'] );
    }
    return $other_data;
}

结果,在我看来:Title: ________

我将不胜感激任何使我的代码工作的建议。

对代码进行以下更改,如下所示,这应该可以工作。

/**
 * Add data to cart item
 */
add_filter( 'woocommerce_add_cart_item_data', 'add_cart_item_data', 25, 2 );
function add_cart_item_data( $cart_item_meta, $product_id ) {

        global $woocommerce;
        $mytitle_form_data = get_post_meta($product_id, '_optional_text_field', true);
        $custom_data  = array() ;
        $custom_data[ "_optional_text_field"] = $mytitle_form_data;
        $cart_item_meta ['custom_data']     = $custom_data ;
    return $cart_item_meta;
}

相关内容

  • 没有找到相关文章

最新更新