根据类别 woocommerce 更改同一产品的默认变体值

2024-05-21

我正在研究一种根据其所属类别显示同一产品的默认变体值的方法。 例如,我出售一张带有蓝色和红色选项的卡。 当用户进入“一”类别时,我希望默认值为蓝色。 如果他属于第二类,则该值将为红色。

我发现了一个钩子woocommerce_product_default_attributes,但我不知道如何使用它。

Note :即使您的产品属于两个类别,woocommerce 似乎也只能识别每个产品的一个类别。


Example (edit):

我有一个产品P.
产品P分为两类:Cat 1 & Cat 2.
另外,产品P有两个变量:Blue & Red

当用户过来时Cat 1,我想要的默认值是Blue。 如果他过来Cat 2,该值将是Red.

@LoicTheAztech 的答案代码 (below)有效,但是:

当我去Cat 1 or Cat 2,我可以看到对于 Woocommerce,该产品仅在Cat 1,即使我们可以通过这两个类别访问。

因此,在一切之前,我需要解决 woocommerce 问题。


从 Woocommerce 3 开始,您可以使用woocommerce_product_get_default_attributes过滤器挂钩...因此您的 2 个产品类别的代码将如下所示:

add_filter( 'woocommerce_product_get_default_attributes', 'filtering_product_get_default_attributes', 10, 2 );
function filtering_product_get_default_attributes( $default_attributes, $product ){
    // We EXIT if it's not a variable product
    if( ! $product->is_type('variable') ) return $default_attributes;

    ## --- YOUR SETTINGS (below) --- ##

    // The desired product attribute taxonomy (always start with "pa_")
    $taxonomy = 'pa_color';

    $category1 = 'one' // The 1st product category (can be an ID, a slug or a name)
    $value1 = 'blue' // The corresponding desired attribute slug value for $category1

    $category2 = 'two' // The 2nd product category (can be an ID, a slug or a name)
    $value2 = 'red' // The corresponding desired attribute slug value for $category2

    ## --- The code --- ##

    // Get the default attribute used for variations for the defined taxonomy
    $default_attribute = $product->get_variation_default_attribute( $taxonomy );

    // We EXIT if define Product Attribute is not set for variation usage
    if( empty( $default_attribute ) ) return $default_attributes;

    // For product category slug 'one' => attribute slug value "blue"
    if( has_term( 'one', 'product_cat', $product->get_id() ) )
        $default_attributes[$taxonomy] = 'blue';

    // For product category slug 'two' => attribute slug value "red"
    elseif( has_term( 'two', 'product_cat', $product->get_id() ) )
        $default_attributes[$taxonomy] = 'red';

    else return $default_attributes; // If no product categories match we exit

    return $default_attributes; // Always return the values in a filter hook
}

代码位于活动子主题(或活动主题)的 function.php 文件中。尚未测试,但应该可以工作。

说明:

自从 Woocommerce 3 和新引入的 CRUDS setter 方法以来,当方法使用get_prop() WC_Data方法,可以使用基于对象类型和方法名称的动态钩子(本质上对于前端:“查看”上下文)

See 这条线 https://github.com/woocommerce/woocommerce/blob/b2e4052e3bcc87dd100e70d25f59dc76c413f2a3/includes/abstracts/abstract-wc-data.php#L600-L623 $value = apply_filters( $this->get_hook_prefix() . $prop, $value, $this ); in

and 这条线 https://github.com/woocommerce/woocommerce/blob/b2e4052e3bcc87dd100e70d25f59dc76c413f2a3/includes/abstracts/abstract-wc-data.php#L590-L598return 'woocommerce_' . $this->object_type . '_get_'; in

So 过滤器钩子是动态制作的这边走(where $this->object_type等于'product'):

'woocommerce_' . $this->object_type . '_get_' . 'default_attributes'

有 2 个参数:

  • $attributes (替换的属性值$value)
  • $product (替换的类实例对象$this)

看到它Woocommerce Github 关闭并解决了问题 https://github.com/woocommerce/woocommerce/issues/19814

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

根据类别 woocommerce 更改同一产品的默认变体值 的相关文章

随机推荐

  • 获取 Pandas 数据框中选定值的行和列标签

    我想获取与数据框中某些条件匹配的值的行和列标签 为了保持它的趣味性 我需要它与分层 多 索引一起使用 例如 df pd DataFrame np arange 16 reshape 4 4 columns pd MultiIndex fro
  • ReferenceError:找不到变量:需要

    我在加载时遇到问题node modules到我的网页之一 我已经安装了 npm node js 并且我想使用require 函数在我的网站上初始化 Firebase 我不知道为什么 但它抛出引用错误 ReferenceError 找不到变量
  • Opencart 的 $this->config->get('module_var_name')

    我正在尝试自定义 Opencart 支付模块 我看到很多地方都使用了配置信息 但我找不到任何创建正在使用的变量的内容 我知道在管理页面中 如果我选择 paypal 标准 我可以设置所有 配置 信息 但我找不到强调它的 模型 是否有模型 我希
  • 在 Eclipse 中隐藏重复的工具栏项

    我不知道如何 但我的 STS 有重复的工具栏项目 我不知道如何删除它们 这是我复制的工具栏的样子 我想摆脱这些 我试图隐藏工具栏 但这没有帮助 有人知道如何删除重复的吗 自从升级到 Oxygen 以来 我一直遇到同样的问题 我无法可靠地重现
  • CoreBluetooth:如何为许多特性(30 - 40)设计代码?

    我搜索了一下 发现这是一个可能重复的问题 同一设备的多个 CBPeripheral https stackoverflow com questions 10836703 multiple cbperipherals for same dev
  • 让用户渲染自己的 SVG 文件的安全隐患

    我计划让网站用户上传他们自己的 SVG 文档并使用inkscape or svg2pdf 用户要么未经身份验证 要么经历一个简单的注册过程 所以我预计会有一些黑客尝试 我可以采取哪些过滤措施来最大程度地减少安全威胁 Inkscape 似乎并
  • 如何让 mod_wsgi 在 Mac 上运行?

    几个小时以来 我一直在尝试在 Mac 上安装最新版本的 mod wsgi 3 3 我使用的是 Snow Leopard 并且有系统附带的 Apache Apache 2 2 15 和 Python 2 6 1 r261 67515 版本 我
  • 将 GMT 日期时间转换为本地日期时间

    我有一个 GMT 时区的日期时间值 如何将其转换为我当地的时区 我希望有一个功能可以实现这一点 请注意 由于是夏季 我不能只添加或减去差异 例如 该函数可以这样工作 data null gmtdatetime 17SEP14 09 42 1
  • 如何在jquery.repeater中仅在slideUp完成后执行下一个代码

    这是原始代码 this slideUp deleteElement itemRemove 上面的代码在 SlideUp 完成之前调用 itemRemove 所以我使用了如下回调函数 this slideUp deleteElement fu
  • 在用户窗体终止/关闭 VBA 时调用数组

    我有一个问题 我想在用户窗体关闭时将用户窗体的内容存储在数组中 我认为我的语法正确 但似乎不会在用户窗体初始化时重新填充 我尝试将数组放入其自己的模块中 但这也不起作用 有人愿意启发我吗 示例代码 Public Sub DPArrayStu
  • 如何动态更新 ttk.combobox?

    我正在 Windows 8 计算机上使用 Python 3 4 和 Tkinter 创建 GUI GUI 顶部有一些条目输入 然后是一些组合框 我希望组合框从先前输入描述的文本文件中获取选项列表 文件名 找到必要信息的行 分隔符类型等 我正
  • Google App Engine - 节点:找不到模块“firebase-admin”

    第一次在这里部署 GAE 应用程序 我尝试遵循本教程 https firebase googleblog com 2016 08 sending notifications Between android html https fireba
  • 使用 CQRS 处理中介管道中的错误/异常?

    我正在努力追随这个帖子 https lostechies com jimmybogard 2014 09 09 tackling cross cutting concerns with a mediator pipeline 由 Jimmy
  • 如何向命名元组添加字段?

    我正在处理命名元组列表 我想在创建每个命名元组后添加一个字段 看来我可以通过将其作为属性引用来做到这一点 如namedtuple attribute foo 但随后它不会添加到字段列表中 如果我不对字段列表执行任何操作 是否有任何理由不应该
  • Android Facebook sdk 3.5 分享对话框

    您好 我正在为 android sdk 3 5 实现 facebook 共享对话框 但是我按照指南没有取得任何成功 FacebookDialog shareDialog new FacebookDialog ShareDialogBuild
  • 无法显示由 Fine-uploader 上传到 Amazon s3 的图像

    我现在尝试设置fineuploader s3以显示在aws服务器上成功上传的文件的图像 如示例页面上所做的那样 http fineuploader com s3 demo http fineuploader com s3 demo 我 仍然
  • “#define for if (false) {} else for”的可能用途是什么?

    在另一个问题中 我刚刚发现了这个小珍珠C wisdom define for if false else for 这导致 MSVC 对于一个相当有效的语句发出 常量表达式 警告 for int i 0 i lt 10 i 我明白whyMSV
  • 替换C#字符串中的数字

    我正在尝试使用正则表达式对字符串进行一些工作 但遇到了一些困难 我的目标是用字符替换字符串中的数字 特别是如果字符串中有一组数字 我想用一个字符替换整个数字组 如果只有一个数字 我想将其替换为 例如 如果我有字符串 test12345 tx
  • 使用php插入sql数据库时出错

    我有一个带有 MySQL 插入查询的程序 sql INSERT INTO people person id name username password email salt VALUES person id name username p
  • 根据类别 woocommerce 更改同一产品的默认变体值

    我正在研究一种根据其所属类别显示同一产品的默认变体值的方法 例如 我出售一张带有蓝色和红色选项的卡 当用户进入 一 类别时 我希望默认值为蓝色 如果他属于第二类 则该值将为红色 我发现了一个钩子woocommerce product def