Wordpress Получить значение скрытого поля ввода в functions.php - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть скрытое поле ввода, которое я хочу получить в моем 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 голосов
/ 18 сентября 2018

as @LoicTheAztec Сказано

Вы не можете передать что-либо нестандартное из любой страницы архива через кнопку добавления в корзину 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

Дата после того, как ссылка на элемент в таблице корзины была получена из нашего сеанса хранения, и каждое сохраненное нами значение отображается с идентификатором продукта в качестве ключа в нашем сеансе хранения, поэтому мы можем иметь различное значение для каждого продукта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...