【问题标题】:woocommerce autocomplete billing_address per user per productwoocommerce 自动填充 billing_address 每个用户每个产品
【发布时间】:2018-07-10 03:49:32
【问题描述】:

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

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

如果它只是使用了最近使用的billing_address_1,那么它可能与另一个产品相关...

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

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

【问题讨论】:

  • 默认情况下,Woocommerce 已经从最近的订单中获取了最后使用的帐单地址 1。因此,您应该更新您的问题,因为当您说 “如果它只是使用了最近使用的 billing_address_1,那么它可能与另一个产品相关联......” 只是不清楚或不详细。你的问题在哪里?你在期待什么?什么产品?您尝试实现目标的代码在哪里?
  • 如果我理解正确,您想要包含相同产品的最近订单的最后使用地址?无论购买者是谁?

标签: php woocommerce hook-woocommerce


【解决方案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;
}

【讨论】:

  • 嗯...不工作(例如,当我使用购物车中已存在 SKU 订单的虚拟帐户时,不自动填充 billing_address_1。)...但我知道你要去哪里
  • 好的,修复了代码。拼写错误。在我的一个网站上进行了测试,它正在工作。让我知道它是否适合你,伙计
【解决方案2】:

我想到了另一种方法 - 为每个产品添加自定义字段,其中包含您希望获取并在结帐时使用的默认地址。将该自定义字段称为“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);
    }
}

(未经测试)

【讨论】:

  • 我想我将在我的问题中添加更多上下文作为帮助解释的编辑:)
猜你喜欢
  • 2016-12-21
  • 1970-01-01
  • 1970-01-01
  • 2019-07-17
  • 1970-01-01
  • 1970-01-01
  • 2012-09-02
  • 1970-01-01
  • 2020-02-01
相关资源
最近更新 更多