提问者:小点点

以编程方式设置配送方法


我刚刚创建了一个id为custom\u shipping的自定义配送方法。该选项现在显示在屏幕上-

我想根据用户的凭据动态设置传送方法。现在默认的方法是flat_rate

问题:对于满足要求的用户,如何将整个会话的发货方式设置为custom_shipping

尝试:

$chosen_methods = $woocommerce->session->set('chosen_shipping_methods', array('purolator_shipping');

这将在我的购物车页面上正确设置会话变量“Selected\u shipping\u methods”,但在移动到结帐时,会话将返回到使用统一费率装运方法。

必须有一个钩子或过滤器,我可以插入它来更改购物车会话创建时的运输方法。(当用户第一次向购物车添加东西时)。

理想情况下,我希望在加载任何其他内容之前设置新的装运方法,以便装运方法在他们的购物车和结帐摘要上看起来正确。

感谢您的指导。


共2个答案

匿名用户

在结帐前使用woocommerce\u发货表单hook

add_action( 'woocommerce_before_checkout_shipping_form', 'before_shipping');

function before_shipping( $checkout ) {

    // check the user credentials here and if the condition is met set the shipping method

    WC()->session->set('chosen_shipping_methods', array( 'purolator_shipping' ) );

}

需要注意的是,在购物车页面上,如果用户将发货方法从默认更改为其他方法,上面的代码将再次将其还原为签出页面上的默认方法,这会让用户感到有点困惑。

匿名用户

// WC()->session->set('chosen_shipping_methods', array( 'your_shipping_rate_id_here' ) );

例子:

WC()->session->set('chosen_shipping_methods', array( 'flat_rate:1' ) );