Woocommerce购物车专栏

时间:2014-07-23 17:28:59

标签: wordpress e-commerce woocommerce shopping-cart buddypress

如何将自定义列添加到woocommerce购物车,然后将此列的一些输入信息添加到订单,结帐页面和电子邮件中? 实际上我需要从buddypress添加朋友列表到每个产品行(价格必须取决于检查了多少朋友)。 在这里我找到了建议,但它部分有帮助WooCommerce: Add input field to every item in 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 个答案:

答案 0 :(得分:0)

这里,由于用户可以选择多个复选框,因此它可能包含多个值。因此,我们使用了&#34;序列化&#34;功能。

例如,

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);    
        } 
        }
       }

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

答案 1 :(得分:0)

感谢回复 - 是的,结帐页面中的变量isset,但是他的空白

var_dump($_POST)...

 ...[custom_field_name] => 
...
电子邮件中

和ofc为空。 也许我不正确发送它?

name="friendsfromcart"

或发送值为数组,必须发送:

name="friendsfromcart[]"

name="[friendsfromcart]"

或需要会话密钥

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

答案 2 :(得分:0)

它有效,数组在购物车中,但反序列化有问题:

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);
    }
}

}