WooCommerce:将输入添加到购物车,然后将数据添加到购物车项目

时间:2017-06-26 12:15:01

标签: php wordpress woocommerce hook-woocommerce

我一直在尝试在购物车上的商品上添加选项,以便客户可以重命名产品。这用于跟踪不同产品的不同产品,以便发送给不同的人(制作一个妨碍系统)

我已使用woocommerce_cart_item_name过滤器将输入字段添加到购物车项目。我正在使用this link的答案并在用户点击输入框旁边的“添加”按钮时在我的javascript中触发wc_update_cart,但它似乎根本不起作用。

是否有其他方法可以在添加产品后将此自定义名称数据添加到相应的购物车项目?我知道我可以在将它添加到购物车时执行此操作(或者解决该产品并将其添加回此新字段。但不想这样做)

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

发现问题。

我在输入框旁边的“添加”按钮,我用来触发像wc_update_cart这样的jQuery(document).trigger('wc_update_cart');并没有验证我在php端放置的检查值$_POST['update_cart']。当我意识到我将woocommerce_cart_item_name过滤器更改为仅添加输入框并使用Update Basket按钮更新名称时。所以我的代码改为:

<?php
    add_filter('woocommerce_cart_item_name','custom_naming_front',10,3);

    function custom_naming_front($product_title,$cart_item,$cart_item_key){
        if(isset($cart_item['custom_name']) && !empty($cart_item['custom_name'])){
            $product_title=$cart_item['custom_name'];
        }
        $product_title .= '<div class="custom-name-form-wrapper" id="custom-name'.$cart_item_key.'">
                                    <input type="text" name="cart['.$cart_item_key.'][custom_name]" id="custom_name_text'.$cart_item_key.'" value="" placeholder="enter the name you want to give this product" />
                                </div>
                            </div>';

        return $product_title;

    }
?>

和显示更新名称的函数如下:

<?php

    function custom_name_save_to_cart(){
        if ( ( ! empty( $_POST['apply_coupon'] ) || ! empty( $_POST['update_cart'] ) || ! empty( $_POST['proceed'] ) ) && isset( $_POST['_wpnonce'] ) && wp_verify_nonce( $_POST['_wpnonce'], 'woocommerce-cart' ) ) {
                $cart_totals  = isset( $_POST['cart'] ) ? $_POST['cart'] : '';
            if ( ! WC()->cart->is_empty()) {
                foreach ( WC()->cart->cart_contents as $cart_item_key => $values ) {
                    if ( ! isset( $cart_totals[ $cart_item_key ] ) || ! isset( $cart_totals[ $cart_item_key ]['custom_name'] ) ) {
                        continue;
                    }
                    WC()->cart->cart_contents[ $cart_item_key ]['custom_name'] = $cart_totals[ $cart_item_key ]['custom_name'];

                }
            }

        }

     }
    add_action( 'wp_loaded', 'custom_name_save_to_cart', 25);
?>