php - 以编程方式设置运输方式 Woocommerce

标签 php wordpress woocommerce

我刚刚创建了一个 ID 为 custom_shipping 的自定义 Woocommerce 送货方式。该选项现在出现在 Woocommerce -> 设置 -> 运输管理页面上。

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

问题: 如何为满足要求的用户在整个 session 期间将送货方式设置为 custom_shipping

尝试过:

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

这在我的 cart 页面上正确设置了 session 变量“chosen_shipping_methods”,但是在移动到 checkout 后, session 返回到使用 flat_rate 运输方式。

必须有一个钩子(Hook)或过滤器,我可以插入以在创建购物车 session 或其他东西时更改运输方式。 (当用户第一次将东西添加到购物车时)。

理想情况下,我希望在加载其他任何东西之前设置新的送货方式,这样送货方式在他们的购物车和结帐摘要上看起来是正确的。

感谢指导。

最佳答案

使用 woocommerce_before_checkout_shipping_form 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' ) );

}

请注意,如果用户在购物车页面上将送货方式从默认方式更改为其他方式,上面的代码将再次将其恢复为结帐页面上的默认方式,这会有点困惑为用户。

关于php - 以编程方式设置运输方式 Woocommerce,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32514094/

相关文章:

php - 在分号上拆分 php 中的 sql 语句(但不在引号内)

wordpress - 如何使 woocommerce 结账页面中的 'Province' 字段变为非必需字段?

php - jQuery 到 PHP : Add a selector class to children elements if more than one

php - date() 函数的问题

PHP - 试图通过for循环将数据插入数据库但只有一行被填充

php - 从 WordPress 中的自定义表列值中获取总和

php - wordpress中的文件写入问题

php - 本地 WordPress 站点上的 cURL 返回 : Error 6 (Could not resolve host)

php - 如何删除 woocommerce 容器 div '<div class="woocommerce">'

php - 为什么这些具有相同样式标签的页面会产生不同的字体大小?