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

编辑

隐藏的输入字段位于my
woocommerce
-shop的my
archive 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
    }

}