如何将自定义文本框值添加到 Woocommerce 中的购物车会话数组

问题描述 投票:0回答:1

我们需要从 cart_session 中的“添加到购物车”页面获取文本输入,并将其显示在“查看购物车”页面中,并将其保存在数据库中。我尝试将其添加到:

$this->cart_contents[$cart_item_key] = apply_filters( 'woocommerce_add_cart_item', array_merge( $cart_item_data, array('' => '','custom_text' => $_POST['custom_txt']) ), $cart_item_key );

它会保存一次custom_txt,并在下一个产品添加到购物车时将其清除。我认为我们需要做一些事情来拯救那些正在开会的人。请帮助我们。

php woocommerce
1个回答
3
投票

我假设您在“单一产品”页面中有一个(或多个)字段,并且您想要在购物车内插入该(或那些)字段中的值。在我的一个项目中,我使用了以下代码,可能会对您有所帮助。您需要根据需要进行定制。

        // Add to cart
        add_filter( 'woocommerce_add_cart_item', 'woocommerce_add_cart_item_custom' );


        // Add item data to the cart
        add_filter( 'woocommerce_add_cart_item_data', 'woocommerce_add_cart_item_data_custom', 10, 2 );

        // Load cart data per page load
        add_filter( 'woocommerce_get_cart_item_from_session', 'woocommerce_get_cart_item_from_session_custom', 20, 2 );

        // Get item data to display
        add_filter( 'woocommerce_get_item_data', 'woocommerce_get_item_data_custom', 10, 2 );

        // Validate when adding to cart
        add_filter( 'woocommerce_add_to_cart_validation', 'woocommerce_add_to_cart_validation_custom', 10, 3 );

        // Add meta to order
        add_action( 'woocommerce_add_order_item_meta', 'woocommerce_add_order_item_meta_custom', 10, 2 );

        // order again
        add_filter( 'woocommerce_order_again_cart_item_data', 'woocommerce_order_again_cart_item_data', 10, 3 );


    //  add to cart 
    function woocommerce_add_cart_item_custom( $cart_item ) {

        // operation done while item is added to cart.

        return $cart_item;

    }

    //  get cart from session

    function woocommerce_get_cart_item_from_session_custom( $cart_item, $values ) {

        if (!empty($values['cusotm_field'])) :
            $cart_item['cusotm_field'] = $values['cusotm_field'];
            $cart_item = woocommerce_add_cart_item_custom( $cart_item );
        endif;

        return $cart_item;

    }


    //  get item data
    function other_options_get_item_data( $other_data, $cart_item ) {

        if (!empty($cart_item['custom_option'])) :

            $other_data = array(
                'name' => $custom,
                'value' => $value,
                'display' => $custom .' : '.$value
            );

        endif;

        return $other_data;

    }

    function woocommerce_add_cart_item_data_custom($cart_item_meta, $product_id){
        global $woocommerce;

    if(empty($cart_item_meta['custom_field']))
        $cart_item_meta['custom_field'] = array();

$cart_item_meta['custom_field'] = esc_attr($_POST[sanitize_title('name_of_field')]);            

        return $cart_item_meta;

    }


    //  add to order meta

    function woocommerce_add_order_item_meta_custom( $item_id, $values ) {

        if ( ! empty( $values['custom_option'] ) ) {
            woocommerce_add_order_item_meta( $item_id, $option_name, $option_value );           
        }
    }


    //  validation

    function woocommerce_add_to_cart_validation_custom($passed, $product_id, $qty){

        global $woocommerce;

$option = ''; // your custom field's name

   if( isset($_POST[sanitize_title($option)]) && $_POST[sanitize_title($option)] == '' )
        $passed = false;

    if (!$passed)
        $woocommerce->add_error( sprintf( __('"%s" is a required field.', 'woocommerce'), $option) );

        return $passed;

    }

    function woocommerce_order_again_cart_item_data($cart_item_meta, $product, $order){
        global $woocommerce;

    // Disable validation
    remove_filter( 'woocommerce_add_to_cart_validation', array( $this, 'validate_add_cart_item' ), 10, 3 );

        if(empty($cart_item_meta['custom_field']))
            $cart_item_meta['custom_field'] = array();

$cart_item_meta['_other_options']= esc_attr($_POST[sanitize_title('field_name')]);

        return $cart_item_meta;
    }

这是一个非常通用的代码。您需要修改您需要的最佳套件。

谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.