【问题标题】:Woocommerce disable the shipping option methods in checkoutWoocommerce 在结帐时禁用运输选项方法
【发布时间】:2021-07-08 22:31:56
【问题描述】:

在结帐页面上,我正在尝试根据我所在地区的邮政编码禁用送货方式选项。 You can find image here 。我正在开发 Wordpress 和 PHP 作为后端。

如果邮政编码与地区不匹配,则送货方式将被禁用,并在此处显示文字“”。我正在使用此代码:

        $packages = WC()->cart->get_shipping_packages();

        foreach ($packages as $key => $value) {
            $shipping_session = "shipping_for_package_$key";

            unset(WC()->session->$shipping_session);
        }

但此代码不起作用,它不会禁用运输方式选项。谁能帮帮我?

【问题讨论】:

  • 后端有邮政编码吗?
  • 嗨@Bhautik,是的,我正在从 WordPress 管理员发货设置中获取邮政编码。

标签: php wordpress woocommerce checkout shipping-method


【解决方案1】:

您可以通过 woocommerce_package_rates 挂钩禁用送货方式。

您可以通过钩子的第二个参数获取邮政编码$package

在下面的示例中,如果 邮政编码$postcodes 数组中的一个不匹配,则禁用运输方式(您也可以反向应用您的逻辑,通过排除。如果需要,您还可以检查州和国家/地区。)

你可以通过$package得到的所有字段是:

  • $package['destination']['country']
  • $package['destination']['state']
  • $package['destination']['postcode']
  • $package['destination']['city']
  • $package['destination']['address']
  • $package['destination']['address_1']
  • $package['destination']['address_2']

然后:

// disable shipping methods based on postcode
add_filter( 'woocommerce_package_rates', 'disable_shipping_method_based_on_postcode', 10, 2 );
function disable_shipping_method_based_on_postcode( $rates, $package ) {

    // initialize postcodes to match
    $postcodes = array( 12050, 20052, 15600, 45063 );

    // if the customer's postcode is not present in the array, disable the shipping methods
    if ( ! in_array( $package['destination']['postcode'], $postcodes ) ) {
        foreach ( $rates as $rate_id => $rate ) {
            unset( $rates[$rate_id] );
        }
    }
 
    return $rates;
    
}

代码已经过测试并且可以运行。将其添加到活动主题的 functions.php 中。

相关答案

【讨论】:

  • 嗨@Vincenzo,我无法使用任何钩子来解决这个问题。当我扩展插件并从 Wordpress 管理端运输设置中获取邮政编码时。我需要在该 PHP 文件中获取运输方式并根据邮政编码取消设置。谢谢。
  • 您能否发布完整的代码,以便能够在不使用任何钩子的情况下进行测试?我会做一些测试,让你知道。谢谢。
  • 嗨@Vincenzo,我已经用我的全部功能更新了这个问题。当 API 的状态码不返回 200 时,我必须取消设置运输选项。谢谢
猜你喜欢
  • 2015-11-29
  • 2021-06-03
  • 2019-05-08
  • 2020-05-20
  • 2015-01-17
  • 2015-06-28
  • 2018-02-05
  • 1970-01-01
  • 2016-09-18
相关资源
最近更新 更多