WordPress在functions.php中获取隐藏输入字段的值

时间:2018-09-18 06:22:36

标签: 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['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”。 -隐藏字段的值已更新->我将产品添加到购物车。

现在,当我进入购物车页面时-我希望产品在交货时列出列出的日期(添加时菜单选项卡中的日期)

1 个答案:

答案 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
    }

}

输出:

enter image description here

从我们的存储会话中检索了购物车表中项目链接后的

日期,并且我们存储的每个值都以产品ID作为键映射到我们的存储会话中,因此我们可以具有不同的值每个产品。