【问题标题】:WooCommerce: Get current shipping address in checkout pageWooCommerce:在结帐页面中获取当前送货地址
【发布时间】:2021-11-12 17:07:42
【问题描述】:

我在帐单地址和送货地址中添加了几个额外的字段。其中之一是折扣,只能由管理员添加(对其他人隐藏)。不同的送货地址有不同的折扣(我正在使用一种为每位客户保存多个地址的暴跌)。

结帐时,我想加载该送货地址的折扣。我正在通过 ajax 调用一个方法(还有其他字段在更改时也会更新运输方式和支付网关),效果很好。对于这些字段,我只是通过 JS 将它们的值传递给 PHP,方法是从表单中获取它们。我不能因为折扣而这样做,因为有人可能只是打开开发人员工具并手动更改折扣。我需要从数据库中获取它。

在卡第一次加载时调用的那个方法中,我尝试按如下方式获取地址:

WC()->order->get_address('shipping');

但我得到一个错误,好像该方法不存在。

And WC()->order 返回空。

我加载了WC()->customer,我可以在那里看到它,但它隐藏在一些非常深的嵌套对象和数组中,你可以看出它们会因客户而异。而WC()->session 只有默认地址字段(不是我的自定义字段)。

有什么想法吗?

【问题讨论】:

  • 嗨,你试过WC()->customer->get_shipping_address(); 吗?
  • 谢谢。问题是,由于我使用的是多地址插件,我需要知道正在选择哪个地址。我通过 ajax 发送结帐表单中选择的当前地址找到了解决方案,并使用该地址检查客户元数据以找到具有相应折扣的正确地址。

标签: woocommerce


【解决方案1】:

我最终做的是检查购物车中的 3 个地址,然后加载客户元数据并检查匹配的地址(我找到了用于在元数据中存储额外地址的密钥),然后从中获取折扣地址:

$discount = null;
$address1 = WC()->customer->get_shipping_address_1();
$address2 = WC()->customer->get_shipping_address_2();
$addressCity = WC()->customer->get_shipping_city();
$c = WC()->customer->get_meta('thwma_custom_address');
if (is_array($c)) {
    foreach ($c as $key => $val) {
        if ($key == "shipping") {
            foreach ($val as $v) {
                if (isset($v['dealer_discount']) && $v['shipping_address_1'] == esc_html($address1) && $v['shipping_address_2'] == esc_html($address2) && $v['shipping_city'] == esc_html($addressCity)) {
                    $discount = absint($v['dealer_discount']);
                }
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-08
    • 2015-09-17
    • 2016-10-31
    • 2017-10-02
    • 1970-01-01
    • 2014-04-04
    • 2021-05-28
    • 1970-01-01
    相关资源
    最近更新 更多