提问者:小点点

Woocommerce购物车专栏


如何将自定义列添加到woocommerce购物车,然后将此列中的某些输入信息添加到订单、结帐页面和电子邮件?实际上,我需要将buddypress中的好友列表添加到每个产品行(价格必须取决于检查了多少好友)。在这里,我找到了一个建议,但它对WooCommerce有一定的帮助:为cart wp社区中的每个项目添加输入字段,同时保持沉默http://wordpress.org/support/topic/woocommerce-custom-column-in-cart?replies=1

我所做的-它只是添加可用的朋友列表,不知道如何在更新车上保存数据或继续。

if ( bp_has_members( 'user_id=' . bp_loggedin_user_id() ) ){
                        function ggUserFrom(){
                            $arrUsers = array();
                            while ( bp_members() ){
                                bp_the_member();
                                $arrUsers[ bp_get_member_user_nicename() ] = bp_get_member_user_nicename();
                            }
                            return $arrUsers;
                        }

                        echo "<div class='friends-holder'>";
                        foreach ( ggUserFrom() as $friend ){
                            echo '<p><input type="checkbox"  name="cart['.$cart_item_key.'][friendsfromcart]" value="'.$friend.'">
                            <span>'.$friend.'</span></p>';
                        }
                        echo "</div>";
                    }

我正在寻找关于这个问题的任何信息。


共3个答案

匿名用户

在这里,由于用户可以选择多个复选框,所以它可能包含多个值。因此,我们使用了“序列化”函数。

例如,

add_filter( 'woocommerce_get_cart_item_from_session', 'wdm_get_cart_items_from_session', 1, 3 ); 

if(!function_exists('wdm_get_cart_items_from_session')) 
{ 
    function wdm_get_cart_items_from_session($item,$values,$key) 
    { 

    $item['custom_field_name'] =  isset( $values['friendsfromcart'] )? serialize($values['friendsfromcart']) : ''; 

        return $item; 
    } 
} 

在添加订单元数据时,可以获取单个值并添加相应的键,如下所示:,

add_action('woocommerce_add_order_item_meta','wdm_add_values_to_order_item_meta',1,2);

    function wdm_add_values_to_order_item_meta($item_id, $values) 
    { 

        $user_custom_values = unserialize($values['friendsfromcart']); 

        if(count($user_custom_values) > 0) 
        { 
        foreach($user_custom_values as $single_value) 
        { 
            wc_add_order_item_meta($item_id,ucfirst($single_value),single_value);    
        } 
        }
       }

因为订单元将通过电子邮件发送。

匿名用户

感谢您的回复-是的,变量设置在结帐页面中,但其在中为空

var_dump($_POST)...

 ...[custom_field_name] => 
...

而ofc在电子邮件中是空的。也许我寄错了?

name="friendsfromcart"

或将其值发送到数组,并且必须发送:

name="friendsfromcart[]"

name="[friendsfromcart]"

或者需要会话密钥

name="cart['.$cart_item_key.'][friendsfromcart]" ?

匿名用户

它的工作原理,数组在购物车,但有一些错误与反序列化:

add_action( 'init', 'update_cart_action', 9);
function update_cart_action() {
global $woocommerce;
if ( ( ! empty( $_POST['update_cart'] ) || ! empty( $_POST['proceed'] ) ) && $woocommerce->verify_nonce('cart')) {
    $cart_totals = isset( $_POST['cart'] ) ? $_POST['cart'] : '';
    if ( sizeof( $woocommerce->cart->get_cart() ) > 0 ) {
        foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
            if ( isset( $cart_totals[ $cart_item_key ]['friendsfromcart'] ) ) {
                $woocommerce->cart->cart_contents[ $cart_item_key ]['friendsfromcart'] = $cart_totals[ $cart_item_key ]['friendsfromcart'];
            }
        }
    }
}

}

add_filter( 'woocommerce_get_cart_item_from_session', 'wdm_get_cart_items_from_session', 1, 3 );
function wdm_get_cart_items_from_session($item,$values,$key){
$item['friendsfromcart'] =  isset( $values['friendsfromcart'] )? serialize($values['friendsfromcart']) : '';
return $item;

}

add_action('woocommerce_add_order_item_meta','wdm_add_values_to_order_item_meta',1,2);
function wdm_add_values_to_order_item_meta($item_id, $values){
$user_custom_values = unserialize($values['friendsfromcart']);
if(count($user_custom_values) > 0){
    foreach($user_custom_values as $single_value){
        wc_add_order_item_meta($item_id,ucfirst($single_value),single_value);
    }
}

}