Для передачи данных из формы на странице корзины в заказ в системе Woocommerce можно использовать хуки и фильтры, предоставляемые самим Woocommerce. Вам необходимо создать функцию, которая будет обрабатывать данные из формы и добавлять их к заказу перед страницей "thankyou".
1. Создайте функцию, которая будет обрабатывать данные из формы и добавлять их к заказу. Например, такую:
```php
function add_custom_data_to_order( $order_id ) {
$custom_data = $_POST['custom_data']; // Получаем данные из формы
update_post_meta( $order_id, 'custom_data', $custom_data ); // Добавляем данные к заказу
}
add_action( 'woocommerce_checkout_update_order_meta', 'add_custom_data_to_order' );
```
2. Добавьте форму на страницу корзины только при наличии определенного товара. Можно использовать хук `woocommerce_after_cart_table` для этого:
```php
function add_custom_form_to_cart() {
if ( WC()->cart->find_product_in_cart( 'product_id' ) ) { // Проверяем наличие определенного товара в корзине
// Выводим форму
echo '<form method="post" action="">';
// Добавьте поля формы
echo '<input type="text" name="custom_data" placeholder="Введите данные">';
echo '<input type="submit" value="Отправить">';
echo '</form>';
}
}
add_action( 'woocommerce_after_cart_table', 'add_custom_form_to_cart' );
```
3. Чтобы передать данные из формы в заказ перед страницей "thankyou", вы можете использовать хук `woocommerce_thankyou`:
```php
function save_custom_data_to_order( $order_id ) {
$custom_data = $_POST['custom_data']; // Получаем данные из формы
update_post_meta( $order_id, 'custom_data', $custom_data ); // Добавляем данные к заказу
}
add_action( 'woocommerce_thankyou', 'save_custom_data_to_order' );
```
Это более эффективный способ передачи данных, чем использование `WC()->session->set`, так как данные будут сохранены в заказе и будут доступны в административной панели для просмотра.
Надеюсь, что это поможет вам реализовать необходимую функциональность.