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](https://i.stack.imgur.com/YJyvo.png)
Дата после того, как ссылка на элемент в таблице корзины была получена из нашего сеанса хранения, и каждое сохраненное нами значение отображается с идентификатором продукта в качестве ключа в нашем сеансе хранения, поэтому мы можем иметь различное значение для каждого продукта.