WP WooCommerce从checkout下拉列表获取钩子

时间:2018-02-15 19:25:38

标签: wordpress woocommerce hook-woocommerce

我想通过他们自己的API获得第三方运费。他们需要国家,体重和服务。我有HTTP请求发送,带有硬编码值。但是当我试图获得实际值时,我看起来似乎碰到了国家。

enter image description here

当用户更改国家/地区时,需要重新发送价格,目前我正在寻找默认值,在这种情况下是英国。

但是,我无法使用以下钩子获取该值:

woocommerce_shipping_fields

woocommerce_checkout_get_value

这是当前的代码,在这里它动态获得权重:

add_action( 'woocommerce_cart_calculate_fees', 'shipping_weight_fee', 30, 1 );
function shipping_weight_fee( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    $url  = 'http://********/shipping/read.php';
    $args =  array(
        'body' => array(
            'weight' => $cart->get_cart_contents_weight(),
            'location' => 'United Kingdom',
            'service' => 1
        )
    );
    $data = wp_remote_post( $url, $args );
    $p = json_decode($data['body']);
    //print_r($p);

    $fee = $p->Data->rate;
    // Setting the calculated fee based on weight
    $cart->add_fee( __( 'Shipping Rate' ), $fee, false );
}

作为开始需要发生的事情是获得预先加载(默认)的当前国家/地区。然后,如果用户对此进行了更改,则会再次使用新国家/地询问API,并应用该新价格。

我上面尝试过的任何一个钩子都没有给我任何实际价值,而且想法是什么正确的过滤器?

感谢Addy

1 个答案:

答案 0 :(得分:3)

你应该先尝试使用:

void print_array(int arr[], int your_array_size)
{
    for (int i = 0; i < your_array_size; i++)
    {
        std::cout << arr[i] << " ";
    }
}

...因为它将更新客户变更,并且由woocommerce的自动检测位置功能填充。

您也可以尝试使用其中之一:

WC()->customer->get_shipping_country()

$shipping_counrtry = WC()->session->get('customer')['shipping_country'];

您还可以使用以下组合:

$package = WC()->shipping->get_packages()[0];
$custome_shipping_country = $package['destination']['country'];

所以在你的代码中:

$customer_shipping_country = WC()->customer->get_shipping_country();

if( empty($custome_shipping_country) ){
    $package = WC()->shipping->get_packages()[0];
    if( ! isset($package['destination']['country']) ) return $passed;
    $customer_shipping_country = $package['destination']['country'];
}

此代码位于您的活动子主题(或主题)的function.php文件中。

它应该有用。

我使用Shipping而不是结算,因为如果客户没有提供运费数据,运费国家/地区将填充结算数据。