woocommerce每个产品每个用户的自动完成计费帐单地址

时间:2018-07-10 03:49:32

标签: php woocommerce hook-woocommerce

在我的Woocommerce商店中,购买者应要求每种产品使用不同的billing_address_1

我想知道的是,是否有一种方法可以与先前使用billing_address_1的用户从该特定sku /产品的先前订单或最新订单中自动完成billing_address_1

如果仅使用了最近使用过的billing_address_1,则它可能与其他产品相关联...

编辑:例如,user 64从商店购买产品SKU=1234,将billing_address_1用于该产品。那么同一个用户去购买SKU=4321并使用不同的billing_address_1,因为它的商品不同。 2天后,user 64决定再次购买SKU=1234。而不是输入billing_address_1,我想知道它是否可能使用用户billing_address_1的最后一个已知user 64自动填充到该条目,并附加到SKU=1234的最后一个订单上。

仅供参考-商店一次只能购买一种产品(例如SKU)。

2 个答案:

答案 0 :(得分:1)

编辑后,尝试此操作。

编辑:(已测试)

add_filter( 'default_checkout_billing_address_1', 'change_default_checkout_address' );
function change_default_checkout_address($default_billing_address){

    $customer_orders = get_posts( array(
        'numberposts' => -1,
        'meta_key'    => '_customer_user',
        'meta_value'  => get_current_user_id(), //can be any other user id, like in your example = 64
        'post_type'   => wc_get_order_types(),
        'post_status' => array_keys( wc_get_order_statuses() ),
        'orderby' => 'date',
        'sort_order' => 'DESC'
    ) );

    $product_id = false;

    foreach (WC()->cart->get_cart() as $item){
        $product_id = $item['product_id'];
    }

    if (!$product_id) return $default_billing_address;


    foreach ($customer_orders as $order){
        $current_order = new WC_Order($order->ID);

        $order_items = $current_order->get_items();
        foreach ( $order_items as $order_item ) {
            if ($product_id == $order_item['product_id']){
                return $current_order->billing_address_1;
            };

        }

    }

    return $default_billing_address;
}

答案 1 :(得分:0)

我想到了另一种方法-将自定义字段添加到您希望获取并在结帐时具有默认地址的每个产品。将该自定义字段称为“ default_product_address”。 以下代码将贯穿购物车项目,并采用第一项的默认地址。

add_filter( 'default_checkout_billing_address_1', 'change_default_checkout_address' );
function change_default_checkout_address(){
    foreach (WC()->cart->get_cart() as $item){
        return get_post_meta($item['product_id'], 'default_product_address', true);
    }
}

(未经测试)