在 WooCommerce 中阻止在没有送货方式的情况下访问结账

2023-11-30

我正在尝试删除继续结帐按钮并限制对结帐页面的访问,直到客户填写购物篮页面上的“计算运费”选项。

我创建了一种仅限于多个邮政编码/邮政编码的本地运输方法。然后我将其添加到我的functions.php 文件中。

function disable_checkout_button_no_shipping() {
  $package_counts = array();

  // get shipping packages and their rate counts
  $packages = WC()->shipping->get_packages();
  foreach( $packages as $key => $pkg )
      $package_counts[ $key ] = count( $pkg[ 'rates' ] );

  // remove button if any packages are missing shipping options
  if( in_array( 0, $package_counts ) )
      remove_action( 'woocommerce_proceed_to_checkout', 'woocommerce_button_proceed_to_checkout', 20 );
}
add_action( 'woocommerce_proceed_to_checkout', 'disable_checkout_button_no_shipping', 1 );

然而,当我在不同的浏览器和隐身模式下测试该网站时,“继续结帐”按钮就在那里。

如果我点击“计算运费”链接而不填写表格但更新它,按钮就会消失。我基本上希望当客户在购物车页面上填写“计算运费”表单(并且在我的送货方式中具有邮政编码之一)时,显示该按钮,然后才能进入结账页面。


您应该更好地尝试使用 WooCommerce 会话中的“选择的运输方式”,例如:

function disable_checkout_button_no_shipping() {

    $chosen_shipping_methods = WC()->session->get( 'chosen_shipping_methods' );

    // remove button if there is no chosen shipping method
    if( empty( $chosen_shipping_methods ) ) {
        remove_action( 'woocommerce_proceed_to_checkout', 'woocommerce_button_proceed_to_checkout', 20 );
    }
}
add_action( 'woocommerce_proceed_to_checkout', 'disable_checkout_button_no_shipping', 1 );

或者以不同的方式使用woocommerce_check_cart_items动作挂钩:

add_action( 'woocommerce_check_cart_items', 'required_chosen_shipping_methods' );
function required_chosen_shipping_methods() {
    $chosen_shipping_methods = WC()->session->get( 'chosen_shipping_methods' );

    if( is_array( $chosen_shipping_methods ) && count( $chosen_shipping_methods ) > 0 ) {
        // Display an error message
        wc_add_notice( __("A shipping method is required in order to proceed to checkout."), 'error' );
    }
}

它应该更好地工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 WooCommerce 中阻止在没有送货方式的情况下访问结账 的相关文章

随机推荐

  • Linux 和 I/O 完成端口?

    使用winsock 您可以将套接字或单独的I O 操作配置为 重叠 这意味着执行 I O 的调用会立即返回 而实际操作则由单独的工作线程异步完成 Winsock 还提供 完成端口 据我了解 完成端口充当句柄 套接字 的多路复用器 如果句柄不
  • 行结束符区别适用于 html 表单吗?

    我知道文件使用的行结尾因操作系统而异 我想知道 如果用户将文本粘贴到 http 表单输入 例如文本区域 中 发送的行结束字符是否以相同的方式取决于操作系统 不 浏览器应该规范行结尾
  • 如何将 CSV 数据文件加载到 R 中以与 quantmod 一起使用

    我是 R 新手 刚刚开始使用它 我目前正在尝试 quantmod 包 quantmod 包似乎可以完成我想做的大部分事情 但是 我不想使用 getSymbols 函数将数据获取到 R 中 相反 我想使用我自己的数据 存储为本地磁盘上的 cs
  • 当滚动窗格包裹文本窗格时,如何防止 JScrollPane 箭头键处理移动插入符

    我有以下要求 我需要一个可滚动的 JTextPane 用户可以在此文本窗格中键入内容 或者可以将用户未键入的文本插入其中 想想类似于 IM 窗口的东西 尽管窗口必须可滚动以允许用户查看先前键入的文本 但插入符号永远不应该从文本末尾的位置移动
  • 解析非预定义参数

    有没有可以在Python中解析sys argv中随机键值对的库 例如 python run py v1 k1 v2 k2 v3 k3 应该返回给我一个像 v1 gt k1 v2 gt k2 v3 gt k3 这样的字典 在编译时我不知道那些
  • 在 IE 中使用 => 时出现语法错误 [重复]

    这个问题在这里已经有答案了 我有以下 JavaScript 代码行 var res Object keys packages filter e gt packages e true 上面的代码在除 IE 之外的所有其他浏览器中都可以正常运行
  • Nifi:如何编写自定义处理器

    我想写nifi处理器 可以从hdfs目录读取xml文件 然后将其数据提取到flowfile属性中 如果有两个 nifi 处理器可以获取该文件并读取数据或向其中写入内容的情况我怎样才能进行文件锁定这样一次只有一个处理器可以使用它 您能给我推荐
  • 在 Angular 2 中使用 ComponentResolver 加载组件时注入不同的提供程序

    我们可以在动态加载组件时注入不同的提供程序吗 我的组件 Component moduleId module id selector my component template div my component div providers M
  • Wikidata+SPARQL:根据股票代码查找公司

    我正在尝试使用 sparql 根据股票代码查找公司 此查询将列出企业及其股票代码 基本查询 SELECT DISTINCT id idLabel ticker WHERE id wdt P31 wdt P279 wd Q4830453 id
  • 如何防止ViewFlipper循环

    我正在开发一个应用程序 其中我使用ViewFlipper与定制OnTouch执行 在里面ViewFlipper 我有大约 20 张图像供用户翻阅 这工作正常 但如果我在该系列中的第 20 个图像处翻转屏幕 它会返回到第一个图像 我想防止Vi
  • AES 姜饼

    This是我的 AES 代码 在 Gingerbread 下 在 2 2 上加密数据然后尝试在 2 3 上解密后出现以下错误 Caused by javax crypto BadPaddingException pad block corr
  • VBA 使用循环引用文本框或标签

    我正在尝试替换以下内容 txt1 Text txt2 Text txt3 Text txt4 text continues for quite awhile With Dim cCont As Control For Each cCont
  • 登录时未通过凭据提供程序加载 KSP(密钥存储提供程序)

    我正在创建一个 Windows 凭据提供程序 以使用此处所述的证书登录到 Windows 域article 这意味着创建一个自定义 KSP 在创建身份验证包时将由 LsaLogonUser 调用 我设法创建自定义 KSP 并在直接调用 Ls
  • JQuery在渲染后搜索dom元素,并用其对应的值替换键

    我正在尝试在我正在开发的网络应用程序上应用我自己的本地化方法 知道我正在使用 JQuery 2 2 0 没有任何其他框架或第三方 我需要在纯 html 代码中编写一些表达式 ex 1 span lang details span ex 2
  • 如何在打字稿中选择性地从一个部分分配到另一个部分

    在下面的 TypeScript 代码片段中 我需要将一个对象分配给另一个对象 其中两个对象都在Partial
  • 当客户向您提供他们的公共证书时进行相互身份验证

    通常 2 路 ssl 又名相互身份验证包括生成服务器 ca 密钥和证书等 然后客户端生成一辆车 将其交给您 您签署他们的 csr 并向他们提供客户端证书 然而 我遇到过一种情况 客户要求我通过交换彼此的 x509 公共证书来实现 相互身份验
  • 使用 Apache POI 创建 .xlsx 文件时出现 java.lang.NoClassDefFoundError

    我正在尝试使用 Apache POI 创建 xlsx 文件 这是我的代码 FileOutputStream outputStream1 null XSSFWorkbook workbook new XSSFWorkbook XSSFShee
  • Cython 预编译器决策[关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我正在寻找一种在 cython 文件中添加预编译器逻辑的解决方案 我已经为 C 中的硬件设备 API 编写了一个 cython 包装器 这是一个 cython 项目 通常使用 MSVC
  • 如何根据点是否在多边形内来标记点

    我有新西兰各地鸟类观测的经度和纬度 存储在Count df 在变量下count longitude and latitude 然而 其中一些出现在近海 海洋中 这是一个公民科学数据集 我想根据这些点是否超出中给出的信息来对它们进行子集化ma
  • 在 WooCommerce 中阻止在没有送货方式的情况下访问结账

    我正在尝试删除继续结帐按钮并限制对结帐页面的访问 直到客户填写购物篮页面上的 计算运费 选项 我创建了一种仅限于多个邮政编码 邮政编码的本地运输方法 然后我将其添加到我的functions php 文件中 function disable