php - woocommerce_add_cart_item_data 过滤器挂钩的第一个参数上的空数组
问题描述
woocommerce_add_cart_item_data
将产品添加到购物车时,我从过滤器中得到一个空数组。functions.php
添加到WordPress 主题的示例;
function TEST_post_filter($a,$b,$c) {
print_r($a); //THIS IS EMPTY ARRAY ie returns Array()
return $a;
}
add_filter('woocommerce_add_cart_item_data', 'Test_post_filter',10,3);
知道为什么会这样吗?我在任何地方都没有找到关于这个问题的参考。我已经尝试了两种购物篮行为,即成功添加后重定向到购物篮页面和/或启用 AJAX 添加到档案上的购物篮按钮。我无法理解它。我激活的插件是 WooCommerce 和 WooCommerce Stripe Gateway。
更新 - 将产品选项添加到产品屏幕的代码
function option_add_to_product() {
global $product;
//get pizza categories
$categories = get_terms( 'product_cat', array(
'hide_empty' => false,
));
$use_product = [];
for($i=0;$i<count($categories);$i++) {
if(strtolower($categories[$i]->slug) === 'bespoke_product')
array_push($use_product,$categories[$i]->term_id);
}
$include_product = false;
if(! count($use_product))
return false;
for($i=0;$i<count($use_product);$i++) {
$this_product_categories = $product->get_category_ids();
for($ii=0;$ii<count($this_product_categories);$ii++) {
if($this_product_categories[$ii] === $use_prouduct[$i]) {
$include_product = true;
break;
}
}
}
if(! $include_product)
return false;
//template to add product option
require plugin_dir_path(__FILE__) . 'templates/add_product_option.php';
}
您可以看到add_product_option.php中的 html将被添加到产品中,如果产品有一个带有 slug “bespoke_product”的类别。请注意,这种获得产品匹配的方法是暂时的(目前只是技术债务)。
当woocommerce_add_cart_item_data
调用过滤器时,从产品表单发布的数据可用于相应的功能。未经处理的数据可能如下所示:
[extra_option_one] => 0
[extra_option_two] => 0
[extra_options_three] => 1
[extra_option_four] => 0
[order_note] =>
这些选项中的每一个都有一个带有相关价格的查找表,例如extra_options_three
可能是 1.50 英镑。此选项和任何其他选择的成本需要提高添加到购物车的特定项目的价格。它不应单独表示。添加的选项的定义应在显示购买项目的任何地方进入产品字段。我正在一步一步地工作,但在我现在这并不容易!我猜下一个是我将能够按此顺序更新项目吗?
解决方案
该woocommerce_add_cart_item_data
钩子用于在简单的添加到购物车提交时将自定义数据添加到购物车项目,例如“添加到购物车”按钮所在的位置中包含的其他字段......<form>
因此,如果您没有在添加到购物车事件(从单个产品页面)上的自定义字段中提交额外的自定义数据,第一个函数参数将是一个空数组......
使用这个钩子查看那些相关的答案线程。
推荐阅读
- mysql - 如何修复flask中mysqlclient构建轮失败的错误
- cython - Cython 文件写入
- coq - 是否可以删除/覆盖现有的强制?
- javascript - 每个 html 页面都有 1 个 .js 文件可以吗?
- javascript - 如何在服务时和使用 webpack 构建后通过绝对 url 使资产可用?
- jenkins - Jenkins 工作未显示在 Jenkins 仪表板上
- python - 如何将熊猫数据框日期时间列转换为 int?
- java - 如何在 Spring Boot Security 中启用或禁用用户
- javascript - 从现有的 ArangoDB 数据库自动生成模型定义
- java - 如何按具有 ID 的员工的值对 HashMap 进行排序?