根据 WooCommerce 中的产品或类别隐藏特定运输选项

2024-01-03

我的 WooCommerce 网站使用 3 种不同的运输类型。

  1. 皇家邮件签收(7 天)
  2. 保证第二天
  3. 已记录的交付

有些产品只能使用选项 1 发货。当该产品添加到购物车时,我创建的运输类别有助于在购物车中显示选项 1,但其他两个选项仍然可见(不允许客户选择这些选项)这个产品)。通过使用 jQuery,我能够隐藏其他两个选项,因为选项 1 是默认选择。 (所以基于此很容易隐藏另外两个)。

我遇到的问题是结账页面上仍然出现 2 个隐藏选项,我不知道为什么。

这是当在购物车中选择第一个选项时我用来隐藏其他两个选项的代码:

jQuery(document.body).ready(function() {
    if(jQuery('#shipping_method_0_ced_pps').val() == 'ced_pps')
        jQuery('ul#shipping_method li:nth-child(2)').hide();
        jQuery('ul#shipping_method li:nth-child(3)').hide();
});

奇怪的是,如果我测试结账页面上是否存在某个值,我可以发出警报,但当我使用上面的代码时,它根本不起作用。

有人可以提供一些帮助或替代方法吗?

我看过这里这是我在不使用 jQuery 的情况下得到的最接近的解决方案。此解决方案的问题是我需要手动将产品 ID 输入到functions.php 文件中。当产品数量超过 100 种时,这并不理想。


Updated有多种方法可以做到这一点,而不需要 jQuery:

1)如果你的产品很少您可以使用以下代码,您将在其中定义:

  • 产品 ID 数组
  • 要删除的运输方式实例 ID

代码:

add_filter( 'woocommerce_package_rates', 'specific_products_shipping_methods', 10, 2 );
function specific_products_shipping_methods( $rates, $package ) {
    // HERE set the product IDs in the array
    $product_ids = array( 113, 115, 126 ); 
    // HERE set the shipping methods to be removed (like "fat_rate:5")
    $method_instances_ids = array('2846', '2851'); 

    $found = false;

    // Loop through cart items checking for defined product IDs
    foreach( $package['contents'] as $cart_item ) {
        if ( in_array( $cart_item['product_id'], $product_ids ) ){
            $found = true;
            break;
        }
    }

    if ( ! $found ) return $rates; // If not found we exit

    // Loop through your active shipping methods
    foreach( $rates as $rate_id => $rate ) {
        // Remove all other shipping methods other than your defined shipping method
        if ( in_array( $rate_id, $method_instances_ids ) ){
            unset( $rates[$rate_id] );
        }
    }    

    return $rates;
}

代码位于活动子主题(或活动主题)的 function.php 文件中。经过测试并工作。


2)如果你有一堆产品,最好通过产品类别来定位这些产品(或产品标签)...您可以批量分配它。

在代码中,您将定义:

  • 一个产品类别(或分类法为的产品标签product_tag)
  • 要删除的运输方式实例 ID

代码:

add_filter( 'woocommerce_package_rates', 'specific_products_shipping_methods', 10, 2 );
function specific_products_shipping_methods( $rates, $package ) {
    // HERE set the product category in the array (ID, slug or name)
    $terms = array( 'my-category' ); 
    $taxonomy = 'product_cat'; 

    // HERE set the shipping methods to be removed (like "fat_rate:5")
    $method_instances_ids = array('2846', '2851');  

    $found = false;

    // Loop through cart items checking for defined product IDs
    foreach( $package['contents'] as $cart_item ) {
        if ( has_term( $terms, $taxonomy, $cart_item['product_id'] ) ){
            $found = true;
            break;
        }
    }

    if ( ! $found ) return $rates; // If not found we exit

    // Loop through your active shipping methods
    foreach( $rates as $rate_id => $rate ) {
        // Remove all other shipping methods other than your defined shipping method
        if ( in_array( $rate_id, $method_instances_ids ) ){
            unset( $rates[$rate_id] );
        }
    }    

    return $rates;
}

代码位于活动子主题(或活动主题)的 function.php 文件中。经过测试并工作。

为了让它发挥作用对于产品标签:
您只需替换分类法'product_cat' by 'product_tag'


3)如果你有一堆产品,您还可以创建运输类别并将其批量分配给您的产品。您需要在相关的运输方式中设置价格......

根据 Woocommerce 3 中的运输类别过滤运输方法 https://stackoverflow.com/questions/49847171/filter-shipping-method-based-on-shipping-class-in-woocommerce-3/49847815#49847815

您应该需要刷新运输缓存:
1) 首先,此代码已保存在您的 function.php 文件中并清空您的购物车...
2) 在运输设置中,输入运输区域并禁用邮寄方式和“保存”。然后重新启用该功能邮寄方式和“保存”。你完成了。

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

根据 WooCommerce 中的产品或类别隐藏特定运输选项 的相关文章

  • Readfile 从大文件中读取 0 字节?

    我正在尝试通过以下方式发送一个大文件readfile 但是 没有任何内容发送到浏览器 并且readfile 回报0 not false 我尝试发送的文件大小为 4GiB 并且可由 PHP 读取 我正在设置set time limit 0 以
  • 在 PHP 中包含 PHP 文件

    我有一个网站 它运行 PHP if 语句来根据附加文件的类型 即 Jpg Txt MP4 显示内容 所以我显示 TXT 文件的代码是 if post attachment txt display attachment div class d
  • Smarty 如果 URL 包含

    使用 Smarty 标签我想确定 URL 是否包含单词 例如 if smarty get page contains product php 我知道 contains 不存在 但是我怎样才能轻松地编写类似的东西来实现上述代码呢 所有 PHP
  • 简单的 PHP 回显代码不起作用

    这是我的 html 和 php 脚本 h1 Bob s Auto Parts h1 table width 100 tr tr table 为什么这个输出会出现一个 gt 我希望它是 这有效 仅有的 这是输出 鲍勃的汽车零件 鲍勃
  • 如何让Apache服务index.php而不是index.html?

    如果我将以下行放入index html文件 使 Apache 包含index php file 参观index html页面向我显示了这个 这是为什么 为什么它实际上不包含 PHP 文件 正如其他人指出的那样 您很可能没有 html设置为处
  • php源代码到PO文件生成器

    我必须将我的所有回显 打印字符串转换为PHP源代码代码文件到PO file 为了语言翻译 有批次吗对流器可用于相同的 我如何做到这一点 make gettext在您的服务器上运行 setup a 翻译适配器 例如带有 gettext 适配器
  • 如何检测字符串中的非 ASCII 字符?

    如果我有一个 PHP 字符串 如何以有效的方式确定它是否至少包含一个非 ASCII 字符 我所说的非 ASCII 字符是指不属于该表的任何字符 http www asciitable com http www asciitable com
  • 媒体的 Google Cloud Storage 签名网址

    我已经建立了一个视频网站 为用户提供 m3u8 和关联的 ts 文件 我不希望媒体文件免费可用 所以我所做的是 当用户在网站上时 在 mysql 中使用他们的 IP 和令牌创建一个会话 当他们请求特定媒体子域 mp4 domain com
  • 获取字符串中的最后一个整数

    我需要隔离包含多个整数的字符串中最新出现的整数 我怎样才能得到23代替1 for lastnum1 text 1 out of 23 lastnum1 this gt getEval eregi replace out of text 你可
  • 如何将我的 init 函数中的代码集中到所有控制器中?

    public function init this gt view gt user Zend Auth getInstance gt getIdentity this gt view gt siteName Zend Registry ge
  • WordPress 包含 SVG 文件错误

    我使用 PHP 和 WordPress 在本地主机上 我可以毫无问题地包含 SVG 文件 但在实时服务器上 我尝试包含一个 SVG 文件以便能够使用 CSS 对其进行样式设置 我收到此错误消息 Parse error syntax erro
  • PHP 扩展开发入门 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 请推荐有关 PHP 低 级 modules 编程接口的帮助文章或教程 搜索我的书签 我发现的唯一链接是
  • PHP print_r() 中 _r 的含义是什么?

    我见过这个答案 https stackoverflow com questions 13103410 what does r suffix mean就这样 但我不确定它对于 PHP 是否相同 如果是 可重入的含义是什么 From PHP n
  • 如何将 Smarty 3 包含到 Laravel 4 中?

    我是 Laravel 的新手 所以仍在习惯这些概念 但是我有大约 10 年的使用 Smarty 的经验 所以我希望利用这一点 除了事实上 Blade 似乎缺乏太多我发现有用且在 Smarty 中开箱即用的功能 但无论如何除了这个问题的要点之
  • WordPress 自定义帖子类型未显示在搜索结果中

    我在 WordPress 中遇到自定义帖子类型 测验 和搜索的问题 自定义帖子类型未显示在我的搜索结果页面中 我的搜索结果中仅显示默认的帖子内容 以下是我使用的代码 函数 php函数create posttype register post
  • 我可以在 PHP 会话变量中安全地存储用户名和密码吗?

    我想在 REST api 之上制作一个轻量级的 web 应用程序 用户只需进行一次身份验证 从那时起 所有针对 web api 的请求都希望通过以某种方式保持用户名和密码有效来完成 我已经做了一个工作原型我在哪里将用户名和密码存储在会话变量
  • Stream_context_set_params 不适用于 ssh2.sftp 包装器

    我想使用类似的功能here http www php net manual en function stream notification callback php 请检查以下代码 function notify notification
  • 从字符串中获取数字

    我有一个字符串 例如 lorem 110 ipusm 我想获取 110 我已经尝试过这个 preg match all 0 9 string ret 但这正在返回 Array 0 gt 1 1 gt 1 2 gt 0 我想要这样的东西 Ar
  • 如何清除 APC 缓存而不使 Apache 崩溃?

    如果 APC 存储大量条目 清除它们会导致 httpd 崩溃 如果 apc clear cache user 花费的时间超过 phps max execution time 调用 apc clear cache 的脚本 将在之前被 php
  • 使用 crypt() 加密

    我目前正在做一个非常安全的登录系统 但我是 crypt 函数的新手 需要一些快速帮助 我在注册过程中使用 crypt 加密密码字符串并将其保存到数据库中 但是 我如何在登录过程中解密密钥 或者我应该怎么做 或者是否可以对提交的密码字符串进行

随机推荐

  • 带有可选参数的智能 URL?

    我目前在我的 htaccess 文件中包含以下内容 RewriteEngine On RewriteBase RewriteCond REQUEST FILENAME f RewriteCond REQUEST FILENAME l Rew
  • 将不同的嵌入结构投影到相同的名称

    我正在编写一个执行这些任务的 python 脚本 查询带有嵌入文档的 MongoDB 集合 聚合和项目更改查询中返回的字段名称以匹配 u 约定 通过 REST API 将值导入到 ServiceNow ISSUE 嵌入的文档结构不一致 HO
  • 通用简单 3D 矩阵旋转问题

    我的 3D 对象旋转有问题 它是用 java 编写的 但这并不重要 的背景 我有一个简单的 3D 模型 您是其中的第一人称玩家 您向上移动鼠标以向上看 即按 3D 的 x 轴旋转 向下移动鼠标以向下看 沿相反方向旋转 But 我还有左 右箭
  • android.os.Build.SERIAL 是唯一的吗?

    我想为适用于手机和平板电脑的 Android 设备使用唯一的 ID IMEI 不适用于没有 SIM 卡的设备 有时 MAC 地址返回 null 我不确定 android os Build SERIAL 是否唯一 有人知道这件事吗 谢谢 问候
  • Eclipse 缺少数据库连接

    我在 Eclipse 中缺少 MySQL 和其他连接配置文件 因此 JBoss 服务器会抛出错误 由于声誉问题 无法发布图片 我只有 通用 JDBC HSQLDB 使用 Eclipse Kepler 和 jboss eap 6 1 已经在我
  • 使用 C 获取操作系统名称 [Linux,可移植发行版:Centos、Debian、Fedora、OpenSUSE、RedHat、Ubuntu]

    我知道我可以使用这个简单的命令检查我的操作系统名称 lsb release ds 但我也知道 它不能在我需要的所有平台上移植 我试过struct utsname info and uname info 它工作得很好 但只给了我 基本 名称
  • 在 ggplot2 r 中操作 geom_bar 和 coord_polar 的描绘

    我正在 ggplot 中使用 Polar coord 构建同心圆图表 我需要删除特定的线 这是代码和情节 df lt data frame A letters 1 12 B c rep Dim 1 4 rep Dim 2 4 rep Dim
  • 实例化(子)类时,您将对象声明为什么“类型”有什么区别吗?

    假设我有一个名为ParentClass和一个名为ChildClass The ParentClass是抽象的 并且ChildClass延长了ParentClass根据 Java 术语 此外 ParentClass有一个构造函数 它需要一个i
  • 使用 sed/awk 打印具有匹配模式或另一个匹配模式的行

    我需要打印文件中与模式匹配的行OR使用不同的模式awk questions tagged awk or sed questions tagged sed 我觉得这是一项容易的任务 但我似乎找不到答案 有任何想法吗 POSIX 方式 awk
  • new Function 和 vm 有什么区别?

    我想知道两者之间有什么区别新功能 https developer mozilla org en US docs Web JavaScript Reference Global Objects Function 实际上 eval https
  • 将列表数组转换为 Keras 输入

    给定一个以下形式的数组 array list 21603 125 737 579 2065 10399 1175 0 0 0 list 1896 3917 498 296 1452 523 754 450 3795 341 dtype ob
  • 子类型字段编号顺序依赖于 protobuf-net

    我可以看到 protobuf net 似乎需要在运行类型模型上具有确定性排序 有什么好的策略可以使用而不需要在每个类上都有属性来进行排序 如果您是通过属性实现的 protobuf 本身会如何执行 model Add typeof IMess
  • 在github工作流程中运行超时命令

    我有一个类似于下面代码的 GitHub 操作 我有一个文件本来打算永远运行 但在需要时会被用户中断 我尝试过使用timeout但它不起作用 并给出了一些奇怪的消息 对此的一个小警告是 如果该过程超时 我希望这不会引发错误 以便操作继续并报告
  • WPF 中的 BitmapImage 会锁定文件

    I use Dim bmi As New BitmapImage New Uri fiInfo FullName UriKind Absolute bmi CacheOption BitmapCacheOption OnLoad 这不使用加
  • 使用 javascript 查找渲染的换行符

    我有这样的情况 div width 200px div example example example example example div 文本填满整个宽度时自动跳到下一行 div 使用 javascript 如何在上面的行中呈现渲染内
  • 几次函数调用后变量的值消失

    我正在制作一个支持代理的解析器 因为使用免费代理 它们经常死掉 所以我的代码切换到其他代理 这里没有问题 但是切换的原因是我多次重新运行函数 2 7 和我解析的数据消失了 我确信问题很愚蠢 但我自己找不到答案 谢谢回复 想一想 应该以某种方
  • 在CFScript中获取新插入的记录ID

    我有一些代码将记录与请求信息一起插入到日志中 发送请求并发回响应后 我将使用响应信息更新记录 有没有办法获取新插入记录的 ID 以便我可以引用它并在收到响应后更新它 我知道使用 CF 标签可以使用 SET NO COUNT 但它似乎在 CF
  • websockets项目的jetty运行错误

    我正在尝试让 websockets 与 jetty 一起使用 我正在日食 当我尝试运行它时 控制台上出现以下错误 java lang NoClassDefFoundError org objectweb asm ClassVisitor 我
  • Ruby 中的类和该类的单例有什么区别?

    好吧 我正在尝试用 Ruby 进行一些元编程 但我有点困惑 根据我读过的几篇文章 例如this one http ryanangilly com post 234897271 dynamically adding class methods
  • 根据 WooCommerce 中的产品或类别隐藏特定运输选项

    我的 WooCommerce 网站使用 3 种不同的运输类型 皇家邮件签收 7 天 保证第二天 已记录的交付 有些产品只能使用选项 1 发货 当该产品添加到购物车时 我创建的运输类别有助于在购物车中显示选项 1 但其他两个选项仍然可见 不允