我有一个隐藏的输入字段,我想在我的functions.php
中获取它,但是我一直在获取NULL
作为返回值。
这是我的代码:
add_filter('woocommerce_add_cart_item_data', 'add_custom_field_data_to_cart', 10, 2 );
function add_custom_field_data_to_cart($cart_item_data, $product_id, $variation_id) {
$cart_item_data['myHiddenInput'] = $_POST['myHiddenInput'];
return $cart_item_data;
}
有人可以告诉我为什么我得到NULL
吗?
编辑
隐藏的输入字段位于我的archive-products.php
商店的woocommerce
上
<input type="hidden" name="myHiddenInput" value="">
使用javascript
更新
我想要实现的是,我有一个存档产品页面,其中列出了我所有的产品。现在,在我的产品上方,我有一个选项卡菜单,其中包含一周中接下来的5天。因此,我点击“星期三19”标签。隐藏输入的值获取活动菜单选项卡的日期:
<input type="hidden" name="chosenDate" value="2018-09-19">
现在,我将产品添加到购物车。然后,单击菜单选项卡“星期五21”。 -隐藏字段的值已更新->我将产品添加到购物车。
现在,当我进入购物车页面时-我希望产品在交货时列出列出的日期(添加时菜单选项卡中的日期)
答案 0 :(得分:1)
就像@LoicTheAztec Said
您无法通过ajax添加到购物车按钮通过任何存档页面传递任何自定义内容,就像您查看Ajax添加到购物车的源代码一样……没有可能的其他参数或挂钩。因此,您将需要构建自己的Ajax添加到购物车功能,这是巨大而又复杂的事情。因此,您的钩子函数woocommerce_add_cart_item_data将无效
所以最好的逻辑是使用Javascript实现您的目标,您可以像以下解决方案一样做到这一点:
首先让我们将这些值(而不是input
标签)作为属性添加到添加到购物车按钮内。
为此,我们将转到woocommerce_loop_add_to_cart_args
钩,如下所示:
add_filter( 'woocommerce_loop_add_to_cart_args', 'change_item_price', 10, 2 );
function change_item_price( $args, $product ) {
$args['attributes'] = $args['attributes'] + [ 'data-chosen-date' => '2018-09-19' ];
return $args;
}
您可以根据需要添加任意多个属性,并通过脚本修改值,然后在用户单击“添加到购物车简介会话存储”时存储这些值,然后在购物车页面中获取这些值并将其附加到购物车表格,例如:
add_action( 'wp_footer', 'script' );
function script() {
if ( is_shop() ) {?>
<script>
document.body.addEventListener('click', add_to_cart);
function add_to_cart(e) {
if (e.target.classList.contains('add_to_cart_button')) {
let val = e.target.getAttribute('data-chosen-date');
let product_id = e.target.getAttribute('data-product_id');
sessionStorage.setItem(product_id, val);
}
}
</script>
<?php
}
if ( is_cart() ) {
?>
<script>
var items = document.querySelectorAll("td");
items.forEach(function (item, index) {
if (item.classList.contains('product-remove')) {
var id = item.childNodes[1].getAttribute('data-product_id');
if (sessionStorage.getItem(id)) {
var textnode = document.createElement('p');
textnode.innerHTML = sessionStorage.getItem(id);
item.nextElementSibling.nextElementSibling.appendChild(textnode)
}
}
}); </script>
<?php
}
}
输出:
从我们的存储会话中检索了购物车表中项目链接后的日期,并且我们存储的每个值都以产品ID作为键映射到我们的存储会话中,因此我们可以具有不同的值每个产品。