Wordpress获取functions.php中隐藏输入字段的值
我有一个隐藏的输入字段,我想在Wordpress获取functions.php中隐藏输入字段的值,php,wordpress,woocommerce,Php,Wordpress,Woocommerce,我有一个隐藏的输入字段,我想在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[
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
编辑
隐藏的输入字段位于mywoocommerce
-shop的myarchive products.php
上
<input type="hidden" name="myHiddenInput" value="">
现在,我将产品添加到购物车中。然后单击菜单选项卡“Friday 21”-隐藏字段的值得到更新->我将产品添加到购物车
现在,当我转到我的购物车页面时,我想让产品列出交付日期(添加产品时菜单选项卡上的日期)正如@LoicTheAztec所说
您不能通过ajax add to cart按钮从任何存档页面传递任何自定义内容,就像您查看ajax add to cart的源代码一样……没有可能的附加参数或挂钩。因此,您需要构建自己的Ajax添加到购物车功能,这是一项庞大而复杂的工作。因此,您的钩子函数woocommerce\u add\u cart\u item\u data将无效 因此,最好的逻辑是使用Javascript来实现您的目标,您可以按照以下解决方案来实现: 首先让我们在“添加到购物车”按钮中添加这些值作为属性,而不是
输入
标记
为此,我们将进行如下操作:woocommerce\u loop\u add\u to\u cart\u args
hook:
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
}
}
add_操作('wp_footer','script');
函数脚本(){
如果(is_shop()){?>
document.body.addEventListener(“单击”,将添加到购物车);
功能添加到购物车(e){
if(例如target.classList.contains('add\u to\u cart\u button')){
让val=e.target.getAttribute('data-selected-date');
让product_id=e.target.getAttribute('data-product_id');
sessionStorage.setItem(产品标识,val);
}
}
var items=document.querySelectorAll(“td”);
items.forEach(函数(项、索引){
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=会话存储.getItem(id);
item.nextElementSibling.nextElementSibling.appendChild(textnode)
}
}
});
哪里有输入隐藏字段?隐藏输入是一个html选项,您需要发布htmlcode@KrishnaJoshi请检查我更新的问题…您是否尝试关闭该函数来调试它?您不能通过ajax add to cart按钮从任何存档页面传递任何自定义内容,就好像您查看的是…的源代码一样,没有可能的添加不规则的参数或钩子。因此,您需要构建自己的Ajax添加到购物车功能,这是一项庞大而复杂的功能。因此,您的钩子功能woocommerce\u add\u cart\u item\u data
将不会产生任何效果。这实际上相当不错!:-)如果我更新商品数量(例如更新购物车),那么日期就不会显示了还有…@ST80如果你更新了项目,你可以添加一个事件监听器,然后你可以重新附加这个日期。这个日期已经保存在用户会话中,因此基本上你可以做任何你想做的事情!非常感谢:-)只是一个简短的问题@kashalo:当我在例如2018-09-19和第二天的相同产品上添加一个产品时,购物车会显示该产品只有一次,数量为两次。我可以避免吗?我希望该产品在使用的每一天都能显示出来ordered@ST80不,默认情况下这是不可能的,您必须覆盖整个“添加到购物车”过程,这与默认的逻辑不同
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
}
}